Solidity events
Друзья, привет! Раз уж речь о функциях заходит дальше, давайте не останавливаться. Сегодня поговорим о механизме событий (events) в языке Solidity.
Событие - это специальный интерфейс, предоставляемый виртуальной машиной Ethereum (EVM). Когда событие отправляется, оно инициирует сохранение входных параметров в специальном логе транзакций в EVM. [не журнал транзакций]. Эти логи ассоциированы с адресом контракта и записаны в блокчейне.
Но обратите внимание: лог событий не доступен в рамках контракта, даже в контракте, который создал его.
В Solidity события определяются с помощью ключевого слова event. Интерфейс совпадает с объявлением функции, кроме того, события также могут быть наследованы.
event EventName(address bidder, uint amount);
Определение event включает в себя имя события и параметры, которые вы хотите сохранить при инициировании события. Вы также можете добавить атрибут indexed к любому параметру в событии (но максимум к 3-м).
Для инициирования события ("запуска") используется ключевое слово emit:
emit EventName(msg.sender, msg.value);
Этот действие можно осуществить в любой функции, например:
function testEvent() public { // вызвать событие emit EventName(msg.sender, msg.value); }
События являются интерфейсом взаимодействия с функциональностью логирования в EVM.
Использование event может служить альтернативным дешевым источником хранения данных (со своими особенностями).
События из лога можно извлекать либо поблочно - при сканировании новых блоков, либо с помощью механизма фильтров событий, что очень удобно для фильтрации больших объемов данных (фильтрация осуществляется по indexed аргументам).
Кроме того, события используются для обмена информацией с приложением клиента или с front-end сайта. С их помощью можно отслеживать изменения в блокчейне. Пример взаимодействия на клиентской стороне вы можете посмотреть здесь.