Înregistrarea datelor din contractele inteligente cu evenimente
În Solidity, evenimentele sunt semnalele expediate pe care contractele inteligente le pot declanșa. Aplicațiile dapp sau orice conectat la Ethereum JSON-RPC API, pot asculta aceste evenimente și pot acționa în consecință. De asemenea, evenimentul poate fi indexat, pentru ca istoricul evenimentelor să poată fi căutat mai târziu.
Cel mai comun eveniment pe Ethereum blockchain la momentul scrierii acestui articol este evenimentul de transfer, care este emis de tokenuri ERC20 atunci când cineva transferă tokenuri.
1event Transfer(address indexed from, address indexed to, uint256 value);2Copiere
Semnătura evenimentului este declarată în interiorul codului contractului și poate fi emisă cu ajutorul cuvântului cheie „emit”. De exemplu, jurnalele de evenimente de transfer care au trimis transferul de la (from), la cine (to) și câte tokenuri au fost transferate (value).
Dacă revenim la contractul nostru inteligent Counter și decidem să ne conectăm de fiecare dată când valoarea este modificată. Deoarece acest contract nu este destinat să fie implementat, ci servește drept bază pentru construirea unui alt contract prin extinderea acestuia: se numește contract abstract. În cazul exemplului nostru de contor, acesta ar arăta astfel:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Variabilă privată de tip int nesemnat pentru a păstra numărul de contorizări8 uint256 private count = 0;910 // Funcție care incrementează contorul nostru11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter pentru a obține valoarea contorizării17 function getCount() public view returns (uint256) {18 return count;19 }2021}22Afișează totCopiere
Observă că:
linia 5: Declarăm evenimentul nostru și ce conține, vechea valoare și noua valoare.
linia 13: Când incrementăm variabila noastră „count”, „emit”-em evenimentul.
Dacă implementăm acum contractul și apelăm funcția increment, vom vedea că Remix îl va afișa automat când faci clic pe noua tranzacție din interiorul unei matrice numite „logs".
Jurnalele sunt foarte utile pentru depanarea contractelor inteligente, dar sunt, de asemenea, importante atunci când construiești aplicații utilizate de diferite persoane și faci mai ușoară analiza pentru a urmări și a înțelege modul în care este utilizat contractul inteligent. Jurnalele generate de tranzacții sunt afișate în exploratoarele de bloc populare și, de asemenea, le poți utiliza, de exemplu, pentru a crea scripturi off-chain pentru a asculta evenimente specifice și de a lua măsuri atunci când acestea apar.