Я могу сгенерировать правильное событие DuskVM и при этом отправить бэкенд, который не может его прочитать.
Скрытый шаг — регистрация в Forge. dusk_core::abi::emit(topic, value) помещает событие в выполнение, но сама по себе отправка не добавляет его в сгенерированную схему. Чтобы драйвер данных смог декодировать это событие, мне всё равно нужно определить сериализуемый тип события, реализовать ContractEvent, зарегистрировать его в #[dusk_forge::contract(events = [...])], а затем отправить зарегистрированный тип.
Пропусти одно из этих звеньев — и контракт сможет корректно выполниться, но интеграция потеряет читаемую событийную поверхность, от которой она зависит.
Последствие, о котором я забочусь: редемпшн в приложении “застревает” после того, как уже завершился on-chain. Состояние контракта сдвинулось. Транзакция пользователя финализировалась. Мой бэкенд всё ещё ждёт, потому что байты события не имеют сгенерированного декодера, с которым он умеет работать.
Я бы протестировал событие снаружи контракта: собрать драйвер, осмотреть схему, декодировать отправленные байты, а затем заставить UI редемпшна зависеть от этого.
В DuskVM финишная черта — не “событие отправлено”. Финиш — “событие декодировано потребителем”.
#dusk $DUSK @Dusk
Скрытый шаг — регистрация в Forge. dusk_core::abi::emit(topic, value) помещает событие в выполнение, но сама по себе отправка не добавляет его в сгенерированную схему. Чтобы драйвер данных смог декодировать это событие, мне всё равно нужно определить сериализуемый тип события, реализовать ContractEvent, зарегистрировать его в #[dusk_forge::contract(events = [...])], а затем отправить зарегистрированный тип.
Пропусти одно из этих звеньев — и контракт сможет корректно выполниться, но интеграция потеряет читаемую событийную поверхность, от которой она зависит.
Последствие, о котором я забочусь: редемпшн в приложении “застревает” после того, как уже завершился on-chain. Состояние контракта сдвинулось. Транзакция пользователя финализировалась. Мой бэкенд всё ещё ждёт, потому что байты события не имеют сгенерированного декодера, с которым он умеет работать.
Я бы протестировал событие снаружи контракта: собрать драйвер, осмотреть схему, декодировать отправленные байты, а затем заставить UI редемпшна зависеть от этого.
В DuskVM финишная черта — не “событие отправлено”. Финиш — “событие декодировано потребителем”.
#dusk $DUSK @Dusk

