Rejestrowanie danych z inteligentnych kontraktów za pomocą zdarzeń
W Solidity zdarzenia to wysyłane sygnały, które inteligentne kontrakty mogą emitować. Dapki lub wszystko, co jest połączone z API JSON-RPC Ethereum, może nasłuchiwać tych zdarzeń i odpowiednio działać. Zdarzenie można również zindeksować, aby później można było przeszukiwać historię zdarzeń.
Zdarzenia
Najczęstszym zdarzeniem na blockchainie Ethereum w momencie pisania tego artykułu jest zdarzenie Transfer, które jest emitowane przez tokeny ERC20, gdy ktoś przenosi tokeny.
1event Transfer(address indexed from, address indexed to, uint256 value);Sygnatura zdarzenia jest deklarowana w kodzie kontraktu i może być emitowana za pomocą słowa kluczowego emit. Na przykład zdarzenie transferu rejestruje, kto wysłał transfer (from), do kogo (to) i ile tokenów zostało przeniesionych (value).
Jeśli wrócimy do naszego inteligentnego kontraktu Counter i zdecydujemy się rejestrować za każdym razem, gdy wartość się zmieni. Ponieważ kontrakt ten nie jest przeznaczony do wdrożenia, ale służy jako podstawa do zbudowania kolejnego kontraktu poprzez jego rozszerzenie: nazywa się go kontraktem abstrakcyjnym. W przypadku naszego przykładu z licznikiem Counter wyglądałoby to tak:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Prywatna zmienna typu unsigned int do przechowywania liczby zliczeń8 uint256 private count = 0;910 // Funkcja, która zwiększa nasz licznik11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter do pobrania wartości licznika17 function getCount() public view returns (uint256) {18 return count;19 }2021}Pokaż wszystkoZauważ, że:
-
Wiersz 5: deklarujemy nasze zdarzenie i to, co zawiera: starą i nową wartość.
-
Wiersz 13: Kiedy zwiększamy naszą zmienną count, emitujemy zdarzenie.
Jeżeli teraz wdrożymy kontrakt i wywołamy funkcję increment, zobaczymy, że Remix automatycznie to wyświetli, gdy klikniemy nową transakcję w tablicy o nazwie logs.
Logi są bardzo przydatne do debugowania inteligentnych kontraktów, ale są również ważne, jeśli tworzysz aplikacje używane przez różne osoby, ponieważ ułatwiają przeprowadzanie analiz w celu śledzenia i zrozumienia, w jaki sposób używane są Twoje inteligentne kontrakty. Logi generowane przez transakcje są wyświetlane w popularnych eksploratorach bloków i można je również wykorzystać, np. do tworzenia skryptów offchain do nasłuchiwania określonych zdarzeń i podejmowania działań w momencie ich wystąpienia.
Strona ostatnio zaktualizowana: 14 lutego 2026
