Для чего нужны События/Event в Solidity?
В Solidity есть Event.
В каких случаях они нужны? Какую проблему они решают?
Если не сложно, приведите простой пример на словах. Я понимаю так: с помощью события можно записать некий результат в транзакцию блокчейна, а потом с помощью кода на Java проверить, было ли такое событие. Как пример, при проведении платежа/транзакции, можно вызвать событие и передать ему 3 аргумента: отправитель, получатель, сумма. В дальнейшем, можно посмотреть в логе транзакций смарт-контракта, была ли проведена данная транзакция. Правильно ли я понял? Если это так, то как происходит проверка этого события в логе?
И ещё, при объявлении события, егё аргументы можно пометить как индексированные (indexed), что это даёт в отличие от того, если их не помечать ключевым словом indexed? Спасибо.
Ответы (1 шт):
События нужны для того, чтобы отслеживать реальные изменения, вызванные в смарт-контракте транзакцией. Ибо одна и та же транзакция в зависимости от текущего состояния смарт-контракта может иметь различное действие.
Да, можно в смарт-контракте в соответсвующей точке кода сгенерить событие и передать ему нужные аргументы.
События пишутся не в лог транзакций, а в отдельный лог событий. События можно извлекать либо поблочно - при сканировании новых блоков, либо с помощью механизма фильтров событий. Насколько я помню индексированные аргументы могут участвовать в фильтре событий, но сам я этим не пользовался.