Î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ță. An event can also be indexed so that the event history is searchable later.
Evenimente
The most common event on the Ethereum blockchain at the time of writing this article is the Transfer event that is emitted by ERC20 tokens when someone transfers tokens.
1event Transfer(address indexed from, address indexed to, uint256 value);Copiați
The event signature is declared inside of the contract code and can be emitted with the emit keyword. For example, the transfer event logs who sent the transfer (from), to who (to) and how much tokens were transferred (value).
If we get back to our Counter smart contract and decide to log every time the value is changed. 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. In the case of our counter example, it would look like this:
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}Afișează totCopiați
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. The logs generated by transactions are displayed in popular block explorers and you can also for example use them to create off chain scripts for listening to specific events and taking action when they occur.
Ultima modificare: @nhsz(opens in a new tab), 15 august 2023