Zoe - наша новая платформа, которая обеспечивает инновационный и гораздо более безопасный подход к созданию смарт-контрактов и взаимодействию с ними. В другом месте мы говорим о безопасности предложения в Zoe: гарантия того, что при выплате клиент контракта либо получит то, что он хочет, либо получит возмещение. Здесь я собираюсь углубиться в еще одну особенность Zoe, живучесть выплат (также называемую безопасностью выхода в ранних презентациях), при которой система гарантирует, что выплата происходит независимо от ненадлежащего поведения других клиентов или сам контракт.

Зои выплатит предложение после выхода. Есть три участника, каждый из которых запускает выход по-разному в зависимости от своей роли:

  • Отклонение контракта: контракт удовлетворил или отклонил предложение.
  • Клиент хочет уйти: клиент, который отправил предложение, хочет уйти.
  • Системная ошибка: система прекращает действие целевого контракта, например, из-за ошибки.

Гарантия жизнеспособности выплат заключается в том, что после срабатывания выхода из предложения Zoe гарантирует, что выплата по этому предложению будет произведена незамедлительно, независимо от того, что делает код контракта в этот момент. Никакие проступки, сбои и т. Д. Контракта не могут помешать выплате участникам контракта.

Контракт хочет выйти

Самый простой сценарий выхода из предложения состоит в том, что контракт запускает его: контракт всегда и по любой причине может инициировать выход любого предложения из контракта. Например, аукцион может напрямую удовлетворить предложения продавца и лица, предложившего самую высокую цену, и вернуть все остальные предложения. Для этого он меняет местами товары и соответствующие средства от участника, предложившего наивысшую цену (с помощью перераспределения), а затем запускает выход всех предложений. Затем Зоя обеспечит доставку выплат (выигрышей и возмещения).

Zoe обеспечивает жизнеспособность выплат: как только контракт инициирует выход из предложения, Zoe не разрешит дальнейшее перераспределение активов предложения, и предложение будет выплачено независимо от какого-либо будущего поведения кода контракта. Поскольку Зоя разрешает перераспределение активов предложения только в соответствии с ограничениями предложения, выплата по предложению обязательно сохранит безопасность предложения.

Клиент хочет уйти

Запрос клиента на выход из предложения имеет больше возможностей. Каждое предложение включает условия, на которых клиент может выйти из него. Клиент, который делает предложение, получает право выйти из этого предложения в соответствии с включенными условиями. Первоначально поддерживаются три варианта, которые поддерживают широкий спектр вариантов использования:

  • onDemand: Клиент может выйти из предложения в любой момент.
  • afterDeadline: предложение автоматически закрывается по истечении крайнего срока.
  • отказано: клиент не может выйти из предложения.

Дело onDemand

В случае onDemand, когда клиент, который сделал предложение, запрашивает его выход, этот запрос направляется напрямую в инфраструктуру Zoe контракта, а не к коду контракта. Инфраструктура Zoe реагирует на запрос быстро, и код контракта никогда не может препятствовать его выполнению.

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

Дело afterDeadline

В случае afterDeadline клиент может сделать предложение, в котором связанные активы будут переданы до крайнего срока. Например, если продавец хочет сделать опцион покрытого колл (право купить базовый актив по фиксированной цене до некоторого времени в будущем) с датой истечения срока действия в следующий четверг, Зоя должна надежно заблокировать эти активы до следующего четверга - но после следующего четверга продавец возвращает их, если покрытое требование не было фактически исполнено.

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

Ссылки на время

Ключевым вопросом при определении крайних сроков является «время, в соответствии с которым?» Дедлайны Зои всегда привязаны к временному ориентиру. Это не обязательно должна быть половина первого ночи по Гринвичу. Эталоном может быть высота блока или время на Часы Долгого Сейчас; конкретная ссылка не имеет значения, если это ссылка, которую договор и участники договора понимают и согласовали. Поясняющий пример: контракт в одной цепочке может использовать в качестве временной привязки высоту блока другой цепочки (например, потому что активы, с которыми проводятся транзакции, происходят из этой другой цепочки).

События

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

Отказ от дела

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

Системная ошибка

Последний сценарий - когда система обнаруживает неисправимую ошибку и прекращает выполнение контракта, например, если контракт делится на ноль, использует слишком много ресурсов, зацикливается бесконечно и т.д. Когда контракт внезапно прекращается, Зоя обнаруживает расторжение и инициирует выход и, таким образом, выплату всех предложений. Как и в других сценариях, Zoe разрешает перераспределения только в соответствии с ограничениями предложения, поэтому безопасность предложения сохраняется. Мы все идем домой, и все счастливы. Или, по крайней мере, все клиенты счастливы, потому что они получили предложение безопасности, и они выполнили его правильно, когда произошел сбой, вместо того, чтобы застрять в подвешенном состоянии в ожидании возврата денег. (Примечание: эта функция защиты разработана, но еще не реализована в нашей тестовой сети.)

Что впереди

Мы расскажем больше об уникальных особенностях Зои в будущем. Затем вы можете прочитать код и документацию и, возможно, даже установить Zoe: npm install @agoric/zoe

Наслаждаться!