Вики ZooBC
Транзакции

Триггеры и аттестации

Триггер — это условный платёж, который удерживает цепочка: ZBC блокируются сейчас и освобождаются для получателя позже, когда выполнено условие. Условие — это либо высота блока, либо событие во внешнем мире, например результат матча, которое зарегистрированные узлы подтверждают аттестацией. Триггеры дают временные блокировки, отложенные подарки и выплаты по реальным исходам без какого-либо кода контрактов.

Создание триггера

Транзакция CreateTrigger (тип 15) указывает получателя, сумму и условие. Триггеры несут только ZBC. Условия бывают двух видов:

  • триггер по высоте называет высоту блока, которая должна быть в будущем. Блок появляется каждые 15 секунд, поэтому высота работает как дата: на сутки вперёд — это 5 760 блоков;
  • триггер по событию называет идентификатор события и срабатывает, когда зарегистрированные узлы разрешают это событие; до тех пор, если его не отменят, он остаётся ожидающим. Он также несёт высоту срабатывания, которая не используется.

Сумма сразу уходит с баланса создателя и блокируется. Пока триггер не сработал, создатель может забрать деньги обратно транзакцией CancelTrigger (тип 16). Триггер платит один раз: он не исполняет никакого скрипта и не повторяется.

Три пути из ящика с заблокированными ZBC: достигнута высота блока H, две трети реестра согласны на значении и CancelTrigger до срабатывания, который возвращает деньги создателю
Три пути из ящика с заблокированными ZBC: достигнута высота блока H, две трети реестра согласны на значении и CancelTrigger до срабатывания, который возвращает деньги создателю

Аттестации: как разрешаются события

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

  • Зарегистрированный узел отправляет AttestEvent (тип 17), несущую идентификатор события и значение, каждое не более 4 096 байт.
  • У каждого узла один голос на событие: более новая аттестация заменяет его более старую. Засчитываются только аттестации зарегистрированных узлов.
  • В конце каждого блока цепочка подсчитывает аттестации каждого неразрешённого события. Когда две трети активного реестра аттестуют в точности одно и то же значение (например, 8 из 11 мест), это значение становится результатом события — окончательно.
  • В том же блоке каждый ожидающий триггер, который называет это событие, выплачивает средства своему получателю.
Одиннадцать узлов, у восьми из них карточка с одним и тем же значением; подсчёт переходит две трети, триггер открывается и выплачивает средства получателю, а результат записывается окончательно
Одиннадцать узлов, у восьми из них карточка с одним и тем же значением; подсчёт переходит две трети, триггер открывается и выплачивает средства получателю, а результат записывается окончательно

Аттестация — обязанность без комиссии: она объявляет комиссию ровно 0 и исходит с собственного аккаунта узла (см. Комиссии). Ни одно решение всего реестра не принимается, пока реестр меньше своей нижней границы в max(3, min_registry_size) мест и различных владельцев, то есть 7 в mainnet (см. Правила двух третей).

Зарезервированные идентификаторы событий

Те же аттестации несут и другие решения сети — под зарезервированными префиксами идентификатора события. Каждое из них разрешается собственным шагом, а не шагом триггеров:

ПрефиксДля чего используется
ZBRDEP1:депозиты моста (см. Мост и обёрнутые монеты)
ZBWDR1:выводы через мост
ZBCGOV1:управление
ZBCREL1:голосования по релизам (см. Релизы и обновления)

Вместе с другими возможностями

  • Выплата триггера — входящее зачисление, поэтому она проходит через политику разделения получателя (см. Политики разделения и транзакций).
  • Политика транзакций получателя проверяется только относительно самой CreateTrigger; освобождённые средства всё равно доходят до получателя, даже если он позже откажется от платежей.
  • В политике транзакций AttestEvent относится к категории Bridge.

Для повторяющихся платежей см. Запланированные переводы; для денег, которые начисляются минута за минутой, — ликвидные платежи (потоки).

См. также