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

Реєстрація даних зі смарт-контрактів за допомогою подій

Смарт-контракти
remix
мова програмування
події
Середнячок
jdourlens
3 квітня 2020 р.
2 читається за хвилину

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

Події

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

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

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

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

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Приватна змінна типу беззнакового цілого числа для збереження кількості підрахунків
8 uint256 private count = 0;
9
10 // Функція, яка збільшує наш лічильник
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Гетер для отримання значення лічильника
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Показати все

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

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

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

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

Знімок екрана Remix

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

Останні оновлення сторінки: 12 лютого 2025 р.

Чи була ця інструкція корисною?