Vai al contenuto principale

Registrare dati dagli Smart Contract con gli eventi

contratti intelligentiremixsolidityeventi
Intermedio
jdourlens
EthereumDev(opens in a new tab)
3 aprile 2020
2 minuti letti minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

In Solidity, gli eventi sono segnali inviati che possono essere attivati dagli Smart Contract. Le dapp, o qualsiasi cosa sia connessa all'API di JSON-RPC di Ethereum, possono ascoltare questi eventi e agire di conseguenza. Gli eventi sono anche indicizzabili così che la cronologia dell'evento sia ricercabile in seguito.

Eventi

L'evento più comune sulla blockchain Ethereum al momento della scrittura di questo articolo è l'evento Transfer, emesso dai token ERC20 quando qualcuno trasferisce token.

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

Le firme dell'evento sono dichiarate nel codice del contratto e possono essere emesse con la parola chiave emit. Per esempio l'evento transfer registra chi ha inviato il trasferimento (from), a chi (to) e quanti token sono stati trasferiti (value).

Torniamo al nostro Smart Contract Counter e decidiamo di registrare ogni volta che il valore cambia. Poiché questo contratto non è inteso per la distribuzione ma serve come base per la costruzione di un altro contratto tramite estensione, è detto contratto astratto. Nel caso del nostro esempio Counter somiglierà a:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Variabile privata di tipo int senza segno per tenere il numero di conteggi
8 uint256 private count = 0;
9
10 // Funzione che incrementa il Counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter per ottenere il valore di conteggio
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Mostra tutto
Copia

Da notare:

  • Riga 5: dichiariamo l'evento e cosa contiene, il vecchio e il nuovo valore.

  • Riga 13: quando aumentiamo la variabile di conteggio, emettiamo l'evento.

Se ora distribuiamo il contratto e chiamiamo la funzione di incremento, vedremo che Remix lo mostrerà automaticamente se clicchiamo sulla nuova transazione all'interno di un array di registri con nome.

Screenshot di Remix

I registri sono davvero utili per il debug degli Smart Contract ma sono anche importanti se si creano applicazioni usate da persone diverse e facilitano l'analisi per monitorare e comprendere come viene usato lo Smart Contract. I registri generati da transazioni sono mostrati in block explorer popolari e ad esempio si possono usare per creare script esterni alla catena, con lo scopo di attendere eventi specifici ed eseguire determinate azioni quando si verificano.

Ultima modifica: @nhsz(opens in a new tab), 15 agosto 2023

Questo tutorial è stato utile?