Skip to content

Пример trigger событий

В этом примере используются канонические счета без домена IDs и прогнозируемые определения активов в модели данных Iroha 3.

Предположим, что сеть имеет:

  • Канонический отчет, контролируемый ключом Алисы.
  • Канонический отчет, контролируемый ключом безумного шляпщика.
  • определение активов, прогнозируемое как tea в соответствии с wonderland.universal
  • баланс этого актива, находящегося на каждом счете;

Цель состоит в том, чтобы зарегистрировать триггер, который наблюдает баланс чая Алисы и отправляет перевод с учетной записи Mad Hatter при выпуске совпадающего события данных.

1. Подготовка счетов и активов

Сначала зарегистрируйте учетные записи участников и определение активов. В текущем Iroha, счета IDs приходят от контролеров счетов, в то время как проектируемые домены используют domain.dataspace Форма:

text
domain: wonderland.universal
asset definition projection: tea in wonderland.universal
holder accounts: AccountId(controller=alice_key), AccountId(controller=mad_hatter_key)

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

2. Выберите орган запуска

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

Технический аккаунт должен уже существовать и иметь разрешение на представление инструкций в запускающем устройстве.

3. Определить исполняемое

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

text
Transfer(
  source = AssetId(tea_definition, mad_hatter_account),
  value = Numeric(1),
  destination = AssetId(tea_definition, alice_account)
)

Используйте текущие типовые конструкторы SDK для окончательной полезной загрузки транзакции. Избегайте жесткого кодирования старого текстового IDs в код запуска; анализируйте или запрашивайте канонический IDs перед созданием исполняемого.

4. Определить фильтр событий

Используйте фильтр событий данных , который сужает события на объект , о котором вы заботитесь:

text
EventFilterBox::Data(
  DataEventFilter for asset changes involving
  AssetId(tea_definition, alice_account)
)

Сохраняйте фильтры так же специфичны, как и практичны. Фильтр AcceptAll полезен для дебгугирования, но он заставляет каждое совпадение оплачивать стоимость оценки запуска.

5. Зарегистрируйте триггер.

Зарегистрируйте триггер с:

  • устойчивый TriggerId
  • последовательность выполняемых инструкций
  • Repeats::Indefinitely или Repeats::Exactly(n)
  • технический учет
  • фильтр событий
  • необязательные метаданные

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

Приказ исполнения

Когда блок выполняется:

  1. Обычные инструкции о транзакциях выполняются первыми.
  2. Собираются данные о событиях, вызванных указанными инструкциями.
  3. Запускаются триггеры, фильтры которых совпадают с этими мероприятиями.
  4. Эффекты, вызванные триггером, обрабатываются в цепочке исполнения блока без ограничения рекурсивного выполнения триггера.

Если в пуске используется Repeats::Exactly(n), зарегистрируйте новый пуск, когда число исчерпано и снова требуется одно и то же действие.