Przejdź do głównej treści

Logowanie danych z inteligentnych kontraktów za pomocą zdarzeń

inteligentne kontrakty
Remix
Solidity
zdarzenia
Średniozaawansowany
jdourlens
3 kwietnia 2020
2 minut czytania

W języku Solidity zdarzenia to wysyłane sygnały, które mogą być wyzwalane przez inteligentne kontrakty. Zdecentralizowane aplikacje (dapp) lub cokolwiek połączonego z API JSON-RPC Ethereum może nasłuchiwać tych zdarzeń i odpowiednio na nie reagować. Zdarzenie może być również indeksowane, dzięki czemu jego historia będzie później możliwa do przeszukiwania.

Zdarzenia

Najczęstszym zdarzeniem na blockchainie Ethereum w momencie pisania tego artykułu jest zdarzenie Transfer, które jest emitowane przez tokeny ERC-20, gdy ktoś wykonuje transfer tokenów.

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

Podpis zdarzenia jest deklarowany wewnątrz kodu kontraktu i może być wyemitowany za pomocą słowa kluczowego emit. Na przykład zdarzenie transferu loguje, kto wysłał transfer (from), do kogo (to) i ile tokenów zostało przetransferowanych (value).

Jeśli wrócimy do naszego inteligentnego kontraktu Counter i zdecydujemy się logować każdą zmianę wartości. Ponieważ ten kontrakt nie jest przeznaczony do wdrożenia, ale służy jako baza do budowy innego kontraktu poprzez jego rozszerzenie: nazywa się go kontraktem abstrakcyjnym. W przypadku naszego przykładu licznika wyglądałoby to tak:

Zauważ, że:

  • Linia 5: deklarujemy nasze zdarzenie i to, co zawiera, czyli starą i nową wartość.

  • Linia 13: Kiedy inkrementujemy naszą zmienną count, emitujemy zdarzenie.

Jeśli teraz wdrożymy kontrakt i wywołamy funkcję increment, zobaczymy, że Remix automatycznie go wyświetli, jeśli klikniesz nową transakcję wewnątrz tablicy o nazwie logs.

Remix screenshot

Logi są naprawdę przydatne do debugowania inteligentnych kontraktów, ale są również ważne, jeśli budujesz aplikacje używane przez różne osoby, ponieważ ułatwiają tworzenie analityki w celu śledzenia i zrozumienia, w jaki sposób używany jest Twój inteligentny kontrakt. Logi generowane przez transakcje są wyświetlane w popularnych eksploratorach bloków, a ponadto możesz na przykład użyć ich do tworzenia skryptów pozałańcuchowych do nasłuchiwania określonych zdarzeń i podejmowania działań, gdy one wystąpią.