Dans la compréhension de l’événement de solidité – Événement

Source: Communauté de Dengchain

Dans l’article d’aujourd’hui, nous examinerons la soliditéévénementIl est appelé dans Ethereum et EVM plus communsBûchesEssenceNous verrons comment les utiliser, leurs définitions, comment utiliser le thème de l’événement et la signature pour filtrer le journal, et quelques suggestions sur quand.

Nous couvrirons également l’inspection-événement-Le mode d’interaction, ce célèbre modèle est traditionnellement appliqué à la réincome des variables d’État, mais nous verrons pourquoi ce modèle devrait également être appliqué pour déclencher des événements et des risques potentiels et des vulnérabilités de sécurité impliquées.

Comment définir des événements dans la solidité?

Être disponibleévénementLe mot-clé définit l’événement dans Solidity, comme indiqué ci-dessous.

     interface ilight {< Br /> Événement SwitSedon ();

Vous pouvez passer le nom du contrat via un accès limité complet, suivi de suiviAlors, alorsPour accéder à l'événement à partir d'un autre contrat avec le nom de l'événement, comme indiqué ci-dessous:

Utilisateur de robe d'événement)

La signature de l'événement est:

Utilisateur de robe d'événement)

Le thème de l'événement est:

bytes32 topIchash = uccessant .Selector;

Veuillez noter qu'après Solidity V0.8.15, l'incident.sélecteurLes membres peuvent l'utiliser.

Si vous vérifiez un journal de blockchain, vous trouverez l'index du thème du journal0(Le premier) Le but correspond au thème de l'événement.Puisque le thème est le contenu qui peut être recherché dans un journal, nous pouvonsFiltre avec le thème de l'événement:

  • Recherchez des événements spécifiques dans le contrat intelligent d'une adresse spécifique.

  • Recherchez des événements spécifiques dans tous les contrats sur la blockchain.

Nous le verrons plus loin ci-dessous,anonymeL'événement anonyme est l'exception de cette règle.anonymeLes mots clés les rendent incapables de rechercher, alors utilisez le terme"anonyme"Essence

Sur la base de ce fait, nous pouvons également en déduire que l'événement le plus simple défini dans la solidité n'a pas de paramètres, comme l'événement défini ci-dessusBulbe.ouCommutateur, Sera utilisé en basLog1Le code de fonctionnement déclenche le thème dans le journal car l'incident lui-même est consultable.

Vous pouvez ajouter plus de thèmes, d'autres thèmes seront utilisésLog2,,Log3,,Log4etLog5Tant que ces paramètres sont marqués commeindexéEssenceJetons un coup d'œil au paramètre d'index dans la section suivante.

Paramètres de l'événement et paramètres d'index

L'événement peut accepter tout type de paramètres, y compris le type de valeur (Uintn,,bytesn,,bool,,adresse...) ,,structure,,énumérerEt le type de valeur défini par l'utilisateur.

Selon mes recherches de cet article, le seul type qui n'est pas autorisé est le type de fonction interne.Le type de fonction externe est autorisé, mais le type de fonction interne n'est pas autorisé.Par exemple, le code suivant ne sera pas compilé.

// spdx- S Licence-Identificateur: non licencié
Pragma Solidity ^ 0.8.0; >

Si la déclaration de l'événement estanonymeDans le contrat ABI, l'incident est disponible"Anonyme"Le champ sera marqué commevraiEssence

img https://github.com/ethereum/solidity/issues/13086

Un avantage anonyme est qu'il rend votre contrat moins cher et moins cher, et le gaz est moins cher lorsqu'il est déclenché.

Un bon cas d'événement anonyme est un contrat avec un seul événement.Tous les événements du contrat de négociation sont significatifs, car seul cet incident apparaîtra dans le journal des événements.L'abonnement à son nom n'est pas pertinent, car un seul événement est défini pour émettre le contrat.Par conséquent, vous pouvez définir des événements anonymes, vous abonner à tous les journaux d'événements du contrat et confirmer qu'ils sont les mêmes événements.

Vérifiez l'utilisation de l'utilisation anonyme dans la bibliothèque de code populaire, comme le contrat DS-note dans Dappphub[7]milieu.

IMGCode source[8]

Nous pouvons voir dans le fragment de code ci-dessus que parce que l'instruction d'événement est anonyme, cela peut définir le quatrième paramètre "indexé".

Veuillez noter que parce que l'événement anonyme n'a pas le thème de BYTES32, l'événement anonyme ne prend pas en charge.sélecteurmembre.

Utilisez le code de fonctionnement du journal pour déclencher des événements dans l'assemblage

img https://docs.soliditylang.org/en/v0.8.19/yul.html#evm-dialect

Il est possible de déclencher un événement dans l'assemblage, utilisezBogueInstruction, l'instruction correspond au code d'opération concentré par l'instruction EVM.

Pour déclencher un événement à l'assemblage, vous devez stocker toutes les données émises par l'incident dansmémoirePosition spécifique.

Une fois que vous stockez des données à partir de l'événement en mémoire, puis vous pouvez spécifier les paramètres suivants à l'instruction LONG:

  • P = obtenir la position de mémoire des données.Fondamentalement, il s'agit d'un pointeur de mémoire, ou d'un "décalage" ou "index de mémoire", selon la façon dont vous l'appelez.

  • S = vous voulez le nombre d'octets émis de P dans l'événement.

  • Tous les autres paramètresT1Ainsi queT2Ainsi queT3etT4Ce sont les paramètres de l'événement que vous souhaitez indexer.Veuillez noter qu'il y a deux choses importantes ici: 1) ces paramètres doivent être les mêmes que les paramètres définis dans le même ordre que la définition de vos événements, 2) ces paramètres doivent être placés en mémoire pour obtenir des données.

Le fragment de code suivant montre comment effectuer cette opération dans l'assemblage.

& lt; -7px; ) Internet {
bytes32 topIchash = exampleEventasm.selector; /> Log2 (
freeMemoryPointer, /// `p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` p` P` P` P` P` P` = Démarrage du décalage en mémoire
64, // `S` = Nombre d'octets en mémoire de« P` à inclure dans les données de l'événement
Événement it self
tokenID // 1er paramètre indexé
)
}
}

Coût du gaz de l'événement

Tous les enregistrements du code de fonctionnement (Log0Ainsi queLog1Ainsi queLog2Ainsi queLog3Ainsi queLog4) Vous devez consommer du gaz.Plus ils ont de paramètres (thèmes), plus ils consomment de gaz.

Image-20240226195203141

De plus, d'autres facteurs tels que des indices ou des données peuvent également amener l'événement à consommer plus de gaz.

Vérifier -event-mode interactif

Mode de contrôle interactif efficace[9]Il convient également aux incidents.

Une méthode pour détecter ces modes consiste à utiliser l'outil d'analyse statique REMIX.

Ce modèle peut également être détecté par Slither.Lorsqu'un contrat exécute un contrat avec un appel externe, vous obtiendrez une découverte pour inviter "l'événement ré-entrée".

Par conséquent, pour DAPP, la commande est très importante, afin que vous puissiez vérifier correctement quel incident d'abord, suivant et finalement émis.Ceci est particulièrement important lorsque les appels récursifs ou ré-entravés.Si l'événement est déclenché après les appels externes, et cet appel externe est fait d'un appel répété, alors:

  1. Le premier incident était la deuxième fois après la fin de l'appel.

  2. Le deuxième événement a été publié après la transaction initiale.

  3. La compréhension de cela permet également un suivi d'audit clair sous la chaîne pour surveiller les appels contractuels.Vous pouvez voir quelles fonctions sont les premières et enfin appelées, et l'ordre de fonctionnement de chaque routine lors de l'exécution de la transaction.

    Documentation du détecteur Slither[10]-Sidité et les analyseurs statiques de Vyper.

    Cette vulnérabilité potentielle est également sur la piste des bits[11]Trouvé et signaler dans l'audit des contrats intelligents.

    IMG

    IMG

    Quand l'incident doit-il être déclenché?

    Il peut y avoir plusieurs cas dans votre contrat qui peuvent être importants et utiles pour déclencher des événements.

    • Lorsque les utilisateurs et l'adresse restreintes exécutent certaines opérations (par exemple, propriétaire ou administrateur contractuel).Cela inclut comme les populairesProfession de transfert (adresse)Fonction, cette fonction ne peut être appelée par le propriétaire que pour modifier le propriétaire du contrat.

    IMG

    • Modifiez certaines variables clés ou paramètres arithmétiques, qui sont responsables de la logique principale du contrat.Il est particulièrement important à l'arrière-plan du protocole Defi.

    IMG

    Documentation du détecteur Slither[12]Décrivez plus d'informations sur ces situations.

    Ceci est également décrit dans le rapport d'audit des sentiers de looksrare.

    IMG

    • Contrats de surveillance déployés en production pour détecter les anomalies.

    IMG

    Afficher 0xprotocol[13]Détails pour comprendre les problèmes liés à la sécurité liés à l'incident.

    se référer à

    1. Le document manquant aux fins de l'utilisation de l'événement anonyme (savoir pourquoi)[14]

    2. [Avantages de l'événement anonyme]

  • Related Posts

    Sans bancle: à quoi sont les plateformes de création de contenu décentralisées qui valent la peine d’être prêts attention?

    Auteur: William M. Peaster, sans banque; Compilé par: Tao Zhu, Vision de Bitchain J’écris dans le domaine de la crypto depuis 2017. Depuis lors, j’ai transformé l’écriture en carrière et…

    Valeur d’investissement du virtual

    Source: Blockchain Daoshuo Les agents de l’IA sont une piste sur laquelle je suis très optimiste dans cette série de marché. Bien que la piste entière soit désormais silencieuse pour…

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    You Missed

    Glassnode: Le sentiment sur le marché de la cryptographie a-t-il complètement changé?Qui réalise un profit?

    • By jakiro
    • avril 25, 2025
    • 0 views
    Glassnode: Le sentiment sur le marché de la cryptographie a-t-il complètement changé?Qui réalise un profit?

    Quel est le bas d’Ethereum?Le marché taureau ETH arrive-t-il bientôt?

    • By jakiro
    • avril 25, 2025
    • 0 views
    Quel est le bas d’Ethereum?Le marché taureau ETH arrive-t-il bientôt?

    Encyclopédie dorée | Qu’est-ce que l’assouplissement quantitatif?Comment ça marche?

    • By jakiro
    • avril 25, 2025
    • 0 views
    Encyclopédie dorée | Qu’est-ce que l’assouplissement quantitatif?Comment ça marche?

    WEB3 Entrepreneuriat New Logic dans le cadre du nouvel ordre commercial mondial

    • By jakiro
    • avril 24, 2025
    • 4 views
    WEB3 Entrepreneuriat New Logic dans le cadre du nouvel ordre commercial mondial

    Le ministère russe des Finances et de la Banque centrale a l’intention de lancer des échanges nationaux de crypto-monnaie

    • By jakiro
    • avril 24, 2025
    • 3 views
    Le ministère russe des Finances et de la Banque centrale a l’intention de lancer des échanges nationaux de crypto-monnaie

    Guide de mise à niveau d’Ethereum Pectra

    • By jakiro
    • avril 24, 2025
    • 3 views
    Guide de mise à niveau d’Ethereum Pectra
    Home
    News
    School
    Search