Vai al contenuto principale

Registrare i dati dai contratti intelligenti con gli eventi

contratti intelligenti
Remix
Solidity
eventi
Intermedio
jdourlens
3 aprile 2020
2 minuti di lettura

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;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Variabile privata di tipo unsigned int per mantenere il numero di conteggi
8 uint256 private count = 0;
9
10 // Funzione che incrementa il nostro contatore
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter per ottenere il valore del conteggio
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Mostra tutto

Nota 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.

Screenshot di Remix

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

Questo tutorial è stato utile?