Vai al contenuto principale

Aiuta ad aggiornare questa pagina

🌏

C'è una nuova versione di questa pagina, ma al momento è solo in inglese. Aiutaci a tradurre l'ultima versione.

Traduci la pagina
Visualizza in inglese

Nessun bug qui!🐛

Questa pagina non è stata tradotta. Per il momento, è stata intenzionalmente lasciata in inglese.

Registrare dati dagli Smart Contract con gli eventi

Smart Contract
remix
Solidity
eventi
Intermedio
✍jdourlens
📚EthereumDev
📆3 aprile 2020
⏱️2 minuti letti
Autore suggerimento 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

In Solidity, gli eventi sono segnali inviati che possono essere attivati dagli Smart Contract. Le dapp, o altri elementi connessi all'API JSON-RPC di Ethereum, possono attendere 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);
2
📋 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}
22
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: , Invalid DateTime
Modifica la pagina

Questa pagina è stata utile?