Перейти до основного вмісту

Логування даних зі смарт-контрактів за допомогою подій

смарт-контракти
Remix
Solidity
події
Середній рівень
jdourlens
3 квітня 2020 р.
2 хвилин на читання

У Solidity події — це відправлені сигнали, які можуть генерувати смарт-контракти. Децентралізовані застосунки (dapps) або будь-що, підключене до API JSON-RPC Етеріуму, може прослуховувати ці події та діяти відповідно. Подія також може бути проіндексована, щоб історію подій можна було шукати пізніше.

Події

Найпоширенішою подією в блокчейні Етеріуму на момент написання цієї статті є подія Transfer, яка генерується токенами ERC-20, коли хтось здійснює переказ токенів.

event Transfer(address indexed from, address indexed to, uint256 value);

Підпис події оголошується всередині коду контракту і може бути згенерований за допомогою ключового слова emit. Наприклад, подія transfer логує, хто відправив переказ (from), кому (to) і скільки токенів було переказано (value).

Якщо ми повернемося до нашого смарт-контракту Counter і вирішимо логувати кожну зміну значення. Оскільки цей контракт не призначений для розгортання, а слугує базою для створення іншого контракту шляхом його розширення, він називається абстрактним контрактом. У випадку нашого прикладу з лічильником це виглядало б так:

Зверніть увагу, що:

  • Рядок 5: ми оголошуємо нашу подію та те, що вона містить — старе та нове значення.

  • Рядок 13: коли ми збільшуємо нашу змінну count, ми генеруємо подію.

Якщо ми тепер розгорнемо контракт і викличемо функцію increment, то побачимо, що Remix автоматично відобразить її, якщо ви натиснете на нову транзакцію всередині масиву з назвою logs.

Remix screenshot

Логи дуже корисні для зневадження ваших смарт-контрактів, але вони також важливі, якщо ви створюєте застосунки, якими користуються різні люди, оскільки вони полегшують аналітику для відстеження та розуміння того, як використовується ваш смарт-контракт. Логи, згенеровані транзакціями, відображаються в популярних оглядачах блоків, і ви також можете, наприклад, використовувати їх для створення позамережевих скриптів, які прослуховують певні події та виконують дії, коли вони відбуваються.