Registrare i dati dai contratti intelligenti con gli eventi
In Solidity, gli eventi sono segnali inviati che i contratti intelligenti possono attivare. Le dApp, o qualsiasi cosa connessa all'API JSON-RPC di Ethereum, possono ascoltare questi eventi e agire di conseguenza. Un evento può anche essere indicizzato in modo che la cronologia degli eventi sia ricercabile in seguito.
Eventi
L'evento più comune sulla blockchain di Ethereum al momento della stesura di questo articolo è l'evento Transfer che viene emesso dai token ERC20 quando qualcuno trasferisce dei token.
1event Transfer(address indexed from, address indexed to, uint256 value);La firma dell'evento è dichiarata all'interno del codice del contratto e può essere emessa con la parola chiave emit. Ad esempio, l'evento transfer registra chi ha inviato il trasferimento (from), a chi (to) e quanti token sono stati trasferiti (value).
Se torniamo al nostro contratto intelligente Counter e decidiamo di registrare ogni volta che il valore viene modificato. Poiché questo contratto non è destinato a essere distribuito ma a fungere da base per costruire un altro contratto estendendolo: è chiamato contratto astratto. Nel caso del nostro esempio del contatore, apparirebbe così:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Variabile privata di tipo unsigned int per mantenere il numero di conteggi8 uint256 private count = 0;910 // Funzione che incrementa il nostro contatore11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter per ottenere il valore del conteggio17 function getCount() public view returns (uint256) {18 return count;19 }2021}Mostra tuttoNota che:
-
Riga 5: dichiariamo il nostro evento e cosa contiene, il vecchio valore e il nuovo valore.
-
Riga 13: Quando incrementiamo la nostra variabile count, emettiamo l'evento.
Se ora distribuiamo il contratto e chiamiamo la funzione increment, vedremo che Remix lo visualizzerà automaticamente se fai clic sulla nuova transazione all'interno di un array chiamato logs.
I log sono davvero utili per il debug dei tuoi contratti intelligenti, ma sono anche importanti se crei applicazioni utilizzate da persone diverse e semplificano l'esecuzione di analisi per tracciare e comprendere come viene utilizzato il tuo contratto intelligente. I log generati dalle transazioni vengono visualizzati nei popolari esploratori di blocchi e puoi anche, ad esempio, usarli per creare script fuori catena per ascoltare eventi specifici e intraprendere azioni quando si verificano.
Ultimo aggiornamento della pagina: 12 febbraio 2025
