Реєстрація даних зі смарт-контрактів за допомогою подій
У 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;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Приватна змінна типу беззнакового цілого числа для збереження кількості підрахунків8 uint256 private count = 0;910 // Функція, яка збільшує наш лічильник11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Гетер для отримання значення лічильника17 function getCount() public view returns (uint256) {18 return count;19 }2021}Показати всеЗверніть увагу:
-
Рядок 5: ми оголошуємо нашу подію та її вміст: старе й нове значення.
-
Рядок 13: коли ми збільшуємо нашу змінну count, ми генеруємо подію.
Якщо ми зараз розгорнемо контракт і викличемо функцію increment, то побачимо, що Remix автоматично відобразить подію, якщо натиснути на нову транзакцію в масиві з назвою logs.
Логи дуже корисні для налагодження ваших смарт-контрактів, але вони також важливі, якщо ви створюєте застосунки для різних користувачів. Вони полегшують аналітику, відстеження та розуміння того, як використовується ваш смарт-контракт. Логи, що генеруються транзакціями, відображаються в популярних оглядачах блоків. Ви також можете, наприклад, використовувати їх для створення offchain-скриптів, які прослуховують певні події та реагують на них.
Останні оновлення сторінки: 12 лютого 2025 р.
