Przejdź do głównej zawartości

Pomóż nam zaktualizować tę stronę

🌏

Dostępna jest nowsza wersja tej strony, ale tylko w języku angielskim. Pomóż nam przetłumaczyć najnowszą wersję.

Przetłumacz stronę
Zobacz wersję po angielsku

Brak błędów!🐛

Ta strona nie jest tłumaczona. Na razie celowo zostawiliśmy tę stronę w języku angielskim.

Rejestrowanie danych z inteligentnych kontraktów ze zdarzeniami

inteligentne kontrakty
remix
solidity
zdarzenia
Średnie
✍jdourlens
📚EthereumDev
📆3 kwietnia 2020
⏱️2 minuta czytania
Autor porady 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

W Solidity zdarzenia to wysyłane sygnały, które mogą uruchamiać inteligentne kontrakty. Aplikacje zdecentralizowane lub wszystko, co jest połączone z interfejsem API Ethereum JSON-RPC, 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ń.

Zdarzeniami

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);
2
📋 Kopiuj

Sygnatura zdarzenia jest deklarowana w kodzie kontraktu i może być emitowana za pomocą słowa kluczowego emit. Na przykład dzienniki zdarzeń transferu, nadawca transferu (od), odbiorca transferu (do) i ilość przeniesionych tokenów (wartość).

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ę to kontraktem abstrakcyjnym. W przypadku naszego przykładu counter wyglądałoby to tak:

1pragma solidity 0.5.17;contract Counter { event ValueChanged(uint oldValue, uint256 newValue); // Zmienna prywatna typu unsigned int przechowywania liczby zliczeń uint256 private count = 0; // Funkcja zwiększająca licznik function increment() public { count += 1; emit ValueChanged(count - 1, count); }
2
3 // Getter w celu uzyskania wartości zliczeń function getCount() public view returns (uint256) { return count; }}
4
📋 Kopiuj

Zauważ, że:

  • Wiersz 5: deklarujemy nasze wydarzenie i jego zawartość, starą wartość i nową wartość.

  • Wiersz 13: Kiedy zwiększamy naszą zmienną count, emitujemy zdarzenie.

Jeżeli teraz wdrożymy umowę i wywołamy funkcję inkrementacji, zobaczymy, że Remix automatycznie ją wyświetli, jeśli zostanie kliknięta nowa transakcja w tablicy nazwanych rejestrów.

Zrzut ekranu Remix

Dzienniki są naprawdę przydatne do debugowania inteligentnych kontraktów, ale są również ważne, jeśli tworzysz aplikacje używane przez różne osoby i ułatwiają analizę w celu śledzenia i zrozumienia, w jaki sposób jest używany inteligentny kontrakt. Logi generowane przez transakcje są wyświetlane w popularnych eksploratorach bloków i można je również wykorzystać np. do tworzenia skryptów off-chain do nasłuchiwania określonych zdarzeń i podejmowania działań w momencie ich wystąpienia.

Ostatnia edycja: , Invalid DateTime
Edytuj stronę

Czy ta strona była pomocna?