Атомарное исполнение

Когда смарт-контракт изменяет состояние своего глобального стейта, или локального стейта, операция проводится атомарно. В данном случае это означает, что, если два разных запроса к одному стейту будут менять его состояние, то только один из них завершится успешно (и изменит это состояние), а все остальные будут завершены с ошибкой, и их изменения будут отвергнуты.

Атомарность реализована с использованием механизма критических секций. Юбот, для которого предполагается возможность запуска нескольких параллельных сессий исполнения, может воспользоваться функциями входа в именованную критическую секцию, внутри которой (в рамках указанного имени секции) обеспечивается атомарность исполнения кода Юбота.

То есть, кроме всего прочего, секция обеспечивает функцию lock-for-update для записи в стейт: строго одна сессия исполнения юботов (1 юбот либо консенсус юботов) получает эксклюзивное право на модификацию соответствующих стейтов.

Таким образом, если какой то метод смарт-контракта блокирует на запись глобальный стейт, то система гарантирует, что этот метод исполняется всегда ровно одной сессией. Для параллельного исполнения методы не должны блокировать глобальный стейт и использовать/создавать локальные, а также не должны использовать потоковое хранилище для записи результатов.