Триггеры и аттестации
Триггер — это условный платёж, который удерживает цепочка: ZBC блокируются сейчас и освобождаются для получателя позже, когда выполнено условие. Условие — это либо высота блока, либо событие во внешнем мире, например результат матча, которое зарегистрированные узлы подтверждают аттестацией. Триггеры дают временные блокировки, отложенные подарки и выплаты по реальным исходам без какого-либо кода контрактов.
Создание триггера
Транзакция CreateTrigger (тип 15) указывает получателя, сумму и условие. Триггеры несут только ZBC. Условия бывают двух видов:
- триггер по высоте называет высоту блока, которая должна быть в будущем. Блок появляется каждые 15 секунд, поэтому высота работает как дата: на сутки вперёд — это 5 760 блоков;
- триггер по событию называет идентификатор события и срабатывает, когда зарегистрированные узлы разрешают это событие; до тех пор, если его не отменят, он остаётся ожидающим. Он также несёт высоту срабатывания, которая не используется.
Сумма сразу уходит с баланса создателя и блокируется. Пока триггер не сработал, создатель может забрать деньги обратно транзакцией CancelTrigger (тип 16). Триггер платит один раз: он не исполняет никакого скрипта и не повторяется.
Аттестации: как разрешаются события
Блокчейн сам по себе не может прочитать внешний мир: если бы каждый узел загружал веб-страницу, они могли бы увидеть разные ответы и разойтись во мнениях. Вместо этого ZooBC использует аттестации.
- Зарегистрированный узел отправляет AttestEvent (тип 17), несущую идентификатор события и значение, каждое не более 4 096 байт.
- У каждого узла один голос на событие: более новая аттестация заменяет его более старую. Засчитываются только аттестации зарегистрированных узлов.
- В конце каждого блока цепочка подсчитывает аттестации каждого неразрешённого события. Когда две трети активного реестра аттестуют в точности одно и то же значение (например, 8 из 11 мест), это значение становится результатом события — окончательно.
- В том же блоке каждый ожидающий триггер, который называет это событие, выплачивает средства своему получателю.
Аттестация — обязанность без комиссии: она объявляет комиссию ровно 0 и исходит с собственного аккаунта узла (см. Комиссии). Ни одно решение всего реестра не принимается, пока реестр меньше своей нижней границы в max(3, min_registry_size) мест и различных владельцев, то есть 7 в mainnet (см. Правила двух третей).
Зарезервированные идентификаторы событий
Те же аттестации несут и другие решения сети — под зарезервированными префиксами идентификатора события. Каждое из них разрешается собственным шагом, а не шагом триггеров:
| Префикс | Для чего используется |
|---|---|
ZBRDEP1: | депозиты моста (см. Мост и обёрнутые монеты) |
ZBWDR1: | выводы через мост |
ZBCGOV1: | управление |
ZBCREL1: | голосования по релизам (см. Релизы и обновления) |
Вместе с другими возможностями
- Выплата триггера — входящее зачисление, поэтому она проходит через политику разделения получателя (см. Политики разделения и транзакций).
- Политика транзакций получателя проверяется только относительно самой CreateTrigger; освобождённые средства всё равно доходят до получателя, даже если он позже откажется от платежей.
- В политике транзакций AttestEvent относится к категории Bridge.
Для повторяющихся платежей см. Запланированные переводы; для денег, которые начисляются минута за минутой, — ликвидные платежи (потоки).