Runtime

Runtime

Среда выполнения представляет собой параллельный обработчик транзакций. Транзакции указывают свои зависимости данных заранее, а динамическое выделение памяти является явным. Отделив программный код от состояния, в котором он работает, среда выполнения может управлять одновременным доступом. Транзакции с доступом только к учетным записям только для чтения выполняются параллельно, тогда как транзакции с доступом к учетным записям с возможностью записи сериализуются. Среда выполнения взаимодействует с программой через точку входа с четко определенным интерфейсом. Данные, хранящиеся в учетной записи, представляют собой непрозрачный тип, массив байтов. Программа имеет полный контроль над своим содержимым.

Структура транзакции определяет список открытых ключей и подписей для этих ключей, а также последовательный список инструкций, которые будут выполняться в состояниях, связанных с ключами учетной записи. Чтобы транзакция была зафиксирована, все инструкции должны быть выполнены успешно; если произойдет какое-либо прерывание, вся транзакция не будет зафиксирована.

Структура аккаунта

Учетные записи поддерживают баланс лампы и память для конкретной программы.

Механизм транзакций

Механизм сопоставляет открытые ключи с учетными записями и направляет их к точке входа программы.

Исполнение

Транзакции группируются и обрабатываются в конвейере. TPU и TVU идут немного другим путем. Среда выполнения TPU гарантирует, что запись PoH произойдет до фиксации памяти.

Среда выполнения TVU гарантирует, что проверка PoH выполняется до того, как среда выполнения обработает какие-либо транзакции.

Runtime pipeline

На этапе execute загружаемые аккаунты не имеют зависимостей данных, поэтому все программы могут выполняться параллельно.

Среда выполнения применяет следующие правила:

  1. Только программа owner может изменять содержимое учетной записи. Это означает, что при назначении вектор данных гарантированно равен нулю.
  2. Суммарные остатки на всех счетах равны до и после совершения транзакции.
  3. После выполнения транзакции балансы счетов только для чтения должны быть равны балансам до транзакции.
  4. Все инструкции в транзакции выполняются атомарно. В случае сбоя все изменения учетной записи отбрасываются.

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

Интерфейс системной программы

Интерфейс лучше всего описывается Instruction::data, который кодирует пользователь.

Государственная безопасность программы

Для правильной работы блокчейна программный код должен быть устойчивым к пользовательскому вводу. Вот почему в этом дизайне программный специфический код является единственным кодом, который может изменить состояние массива байтов данных в присвоенных ему Учетных записях. Это также причина, по которой Assign или CreateAccount должны обнулить данные. В противном случае у программы не было бы возможности отличить недавно назначенные данные учетной записи от естественно сгенерированного перехода состояния без некоторых дополнительных метаданных из среды выполнения, чтобы указать, что эта память назначена, а не сгенерирована изначально.

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

Примечания

Будущая работа