Salt la conținutul principal

Înregistrarea datelor din contractele inteligente cu evenimente

contracte inteligenteremixsolidityevenimente
Intermediar
jdourlens
EthereumDev(opens in a new tab)
3 aprilie 2020
2 minute de citit minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

Î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;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Variabilă privată de tip int nesemnat pentru a păstra numărul de contorizări
8 uint256 private count = 0;
9
10 // Funcție care incrementează contorul nostru
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter pentru a obține valoarea contorizării
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Afișează tot
Copiaț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".

Captură ecran Remix

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: @nicklcanada(opens in a new tab), 15 august 2023

A fost util acest tutorial?