Passer au contenu principal

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

contrats intelligents
Remix
Solidity
événements
Intermédiaire
jdourlens
3 avril 2020
2 minutes de lecture

En Solidity, les événements sont des signaux que les contrats intelligents peuvent émettre. Les dapps, ou tout ce qui est connecté à l'API JSON-RPC d'Ethereum, 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 la rédaction de cet article est l'événement 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);

La signature de l'événement est déclarée dans le code du contrat et peut être émise avec le mot-clé « emit ». Par exemple, l'événement de transfert enregistre qui a envoyé le transfert (from), à qui (to) et combien de jetons ont été transférés (value).

Si nous revenons à notre contrat intelligent Counter et décidons de consigner chaque fois que la valeur est modifiée. Comme ce contrat n'est pas destiné à être déployé mais à servir de base à la construction d'un autre contrat en l'étendant : on l'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 // Variable privée de type entier non signé pour conserver le nombre de comptages
8 uint256 private count = 0;
9
10 // Fonction qui incrémente notre compteur
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter pour obtenir la valeur du compteur
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Afficher tout

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 comptage, 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 ».

Capture d'écran de Remix

Les journaux sont très utiles pour déboguer vos contrats intelligents, mais ils sont aussi importants si vous créez des applications utilisées par différentes personnes, car ils facilitent l'analyse pour suivre et comprendre comment votre contrat intelligent est utilisé. Les journaux générés par les transactions sont affichés dans les explorateurs de blocs populaires et vous pouvez également, par exemple, les utiliser 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 mise à jour de la page : 12 février 2025

Ce tutoriel vous a été utile ?