Реєстрація даних зі смарт-контрактів за допомогою подій
У Solidity події — це сигнали, які можуть надсилати смарт-контракти. Dapps або будь-що, пов’язане з Ethereum JSON-RPC API, може прослуховувати ці події та діяти відповідно. Подію також можна проіндексувати, щоб пізніше можна було шукати історію подій.
Події
Найпоширенішою подією в блокчейні Ethereum на момент написання цієї статті є подія Transfer, яка генерується токенами ERC20, коли хтось передає токени.
event Transfer(address indexed from, address indexed to, uint256 value);
Сигнатура події оголошується всередині коду контракту та може бути згенерована за допомогою ключового слова emit. Наприклад, подія переказу реєструє, хто надіслав переказ (from), кому (to) і скільки токенів було переказано (value).
Якщо ми повернемося до нашого смарт-контракту Counter і вирішимо реєструвати щоразу, коли значення змінюється. Оскільки цей контракт не призначений для розгортання, а слугує основою для створення іншого контракту шляхом його розширення, він називається абстрактним контрактом. У нашому прикладі з Counter це матиме такий вигляд:
pragma solidity 0.5.17;
contract Counter {
event ValueChanged(uint oldValue, uint256 newValue);
// Приватна змінна типу беззнакового цілого числа для збереження кількості підрахунків
uint256 private count = 0;
// Функція, яка збільшує наш лічильник
function increment() public {
count += 1;
emit ValueChanged(count - 1, count);
}
// Гетер для отримання значення лічильника
function getCount() public view returns (uint256) {
return count;
}
}
Зверніть увагу:
-
Рядок 5: ми оголошуємо нашу подію та її вміст: старе й нове значення.
-
Рядок 13: коли ми збільшуємо нашу змінну count, ми генеруємо подію.
Якщо ми зараз розгорнемо контракт і викличемо функцію increment, то побачимо, що Remix автоматично відобразить подію, якщо натиснути на нову транзакцію в масиві з назвою logs.
Логи дуже корисні для налагодження ваших смарт-контрактів, але вони також важливі, якщо ви створюєте застосунки для різних користувачів. Вони полегшують аналітику, відстеження та розуміння того, як використовується ваш смарт-контракт. Логи, що генеруються транзакціями, відображаються в популярних оглядачах блоків. Ви також можете, наприклад, використовувати їх для створення offchain-скриптів, які прослуховують певні події та реагують на них.
Останнє оновлення сторінки: 3 березня 2026 р.
