Passer au contenu principal

Consigner les données des contrats intelligents avec des événements

contrats intelligentsremixsolidityévénements
Avancé
jdourlens
EthereumDev(opens in a new tab)
3 avril 2020
2 minutes de lecture minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

Dans Solidity, les événements envoient des signaux que les contrats intelligents peuvent lancer. Les dApps, ou tout autre élément connecté à l'API Ethereum JSON-RPC, peuvent écouter ces événements et agir en conséquence. Un événement peut également être indexé de sorte que son historique soit consultable ultérieurement.

Évènements

L'événement le plus courant sur la blockchain Ethereum au moment de l'écriture de cet article est l'événement de 'Transfer' qui est émis par les jetons ERC20 lorsque quelqu'un transfère des jetons.

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

La signature de l'événement est déclarée à l'intérieur du code du contrat et peut être émise avec le mot clé 'emit'. Par exemple, l'évènement 'transfert' enregistre qui a initié le transfert (à partir de), à qui (à) et combien de jetons ont été transférés (valeur).

Si nous revenons à notre contrat intelligent Counter et décidons de procéder à un enregistrement chaque fois que la valeur est modifiée. Comme il n’est pas destiné à être déployé, ce contrat sert de base à la construction d’un autre contrat en l'étendant : cela s’appelle un contrat abstrait. Dans le cas de notre exemple de compteur, cela ressemblerait à ceci :

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private variable of type unsigned int to keep the number of counts
8 uint256 private count = 0;
9
10 // Function that increments our counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter to get the count value
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Afficher tout
Copier

Notez que :

  • Ligne 5: nous déclarons notre événement et ce qu'il contient, l'ancienne valeur et la nouvelle valeur.

  • Ligne 13 : Lorsque nous incrémentons notre variable de nombre, nous émettons l'événement.

Si nous déployons maintenant le contrat et appelons la fonction d'incrémentation, nous verrons que Remix l'affichera automatiquement si vous cliquez sur la nouvelle transaction dans un tableau nommé logs.

Remixer une capture d'écran

Les journaux sont vraiment utiles pour déboguer vos contrats intelligents, mais ils sont également importants si vous construisez des applications utilisées par différentes personnes et facilitent les analyses du suivi et de la compréhension de l'utilisation de votre contrat intelligent. Les journaux générés par les transactions sont affichés dans les explorateurs de blocs populaires et vous pouvez également les utiliser par exemple pour créer des scripts hors chaîne pour surveiller des événements spécifiques et prendre des mesures lorsqu'ils se produisent.

Dernière modification: @breakthewall(opens in a new tab), 18 janvier 2024

Ce tutoriel vous a été utile ?