Registrare dati dagli Smart Contract con gli eventi
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;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Variabile privata di tipo int senza segno per tenere il numero di conteggi8 uint256 private count = 0;910 // Funzione che incrementa il Counter11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter per ottenere il valore di conteggio17 function getCount() public view returns (uint256) {18 return count;19 }2021}Mostra tuttoCopia
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.
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