堅牢性イベントの詳細な理解 – イベント

出典:Dengchainコミュニティ

今日の記事では、堅実さを見ていきますイベントより一般的なイーサリアムとEVMで呼ばれますログエッセンスそれらの使用方法、それらの定義、イベントのテーマと署名を使用してログをフィルタリングする方法、およびいつの提案を確認します。

また、検査をカバーします –イベント– 相互作用モード、この有名なモデルは伝統的に州の変数の再所得に適用されていますが、このモデルをトリガーイベントと潜在的なリスクと関連するセキュリティの脆弱性にも適用する必要がある理由がわかります。

堅実さでイベントを定義する方法は?

利用可能になりますイベントキーワードは、以下に示すように、イベントを堅牢性で定義します。

     interface ilight {<< br/> event switchedon();

完全な制限アクセスを通じて契約の名前を渡すことができます。次に、以下に示すように、イベント名との別の契約からイベントにアクセスするには:

イベントドレスユーザー)

イベントの署名は次のとおりです。

イベントドレスユーザー)

イベントのテーマは次のとおりです。

bytes32 topichash = uccessely .Selector;

Solidity V0.8.15の後にのみ、事件は。セレクタメンバーはそれを使用できます。

ブロックチェーンログを確認すると、ログのテーマのインデックスが見つかります0(最初)目的はイベントのテーマに対応しています。テーマはログを通して検索できるコンテンツであるため、できますイベントをテーマにしたフィルター:

  • 特定のアドレスのスマートコントラクトで特定のイベントを検索します。

  • ブロックチェーン上のすべての契約で特定のイベントを検索します。

以下にさらに表示されます。匿名匿名のイベントは、このルールの例外です。匿名キーワードは検索できないため、用語を使用してください"匿名"エッセンス

この事実に基づいて、Solidityで定義されている最も単純なイベントには、上記のイベントなどのパラメーターがないことも推測できます。bulbreplacedまたはSwitchedon、下部に使用されますlog1インシデント自体が検索可能であるため、操作コードはログ内のテーマをトリガーします。

テーマを追加できます。他のテーマが使用されますlog2、、、、log3、、、、log4そしてlog5これらのパラメーターがとしてマークされている限りインデックス付きエッセンス次のセクションのインデックスパラメーターを見てみましょう。

イベントパラメーターとインデックスパラメーター

イベントは、値タイプを含むあらゆるタイプのパラメーターを受け入れることができます(uintn、、、、bytesn、、、、ブール、、、、住所...),,struct、、、、列挙ユーザーによって定義された値タイプ。

この記事の私の調査によると、許可されていない唯一のタイプは内部関数タイプです。外部関数タイプは許可されていますが、内部関数タイプは許可されていません。たとえば、次のコードはコンパイルされません。

// spdx- sライセンス識別子:免げ切れ
プラグマソリティ ^0.8.0; >

イベントステートメントがある場合匿名契約ABIでは、インシデントが利用可能です"匿名"フィールドにはとしてマークされます真実エッセンス

<フィギュアスタイル= "Text-Align:center;">

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

匿名の利点は、契約をより安く、より安価にし、トリガーするとガスが安くなることです。

匿名イベントの良いケースは、1つのイベントとの契約です。このインシデントのみがイベントログに表示されるため、交渉契約のすべてのイベントは意味があります。契約を発行するために1つのイベントのみが定義されているため、その名前を購読することは無関係です。したがって、イベントを匿名で定義し、契約からのすべてのイベントログを購読し、それらが同じイベントであることを確認できます。

DappphubのDS-Note契約など、人気のあるコードライブラリで匿名使用の使用を確認してください[7]真ん中。

<フィギュアスタイル= "Text-Align:center;">

IMGソースコード[8]

上記のコードフラグメントでは、イベントステートメントが匿名であるため、これにより4番目の「インデックス付き」パラメーターが定義できることがわかります。

匿名イベントにはBYTES32のテーマがないため、匿名イベントはサポートしていないことに注意してください。セレクタメンバー。

ログ操作コードを使用して、アセンブリ内のイベントをトリガーします

<フィギュアスタイル= "Text-Align:center;">

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

アセンブリでイベントをトリガーすることが可能です。logn命令、命令は、EVM命令によって濃縮された操作コードに対応します。

アセンブリでイベントをトリガーするには、インシデントが発行したすべてのデータをで保存する必要がありますメモリ特定の位置。

イベントからデータをメモリに保存してから、次のパラメーターをlogn命令に指定できます。

  • p =データのメモリ位置を取得します。基本的に、これはメモリポインター、または「オフセット」または「メモリインデックス」です。

  • s =イベントでPから発行されたバイト数が必要です。

  • 他のすべてのパラメーターT1同様にT2同様にT3そしてT4これは、インデックスを作成したいイベントパラメーターです。ここには2つの重要なことがあります。1)これらのパラメーターは、イベントの定義と同じ順序で定義されたパラメーターと同じである必要があります。2)これらのパラメーターは、データを取得するためにメモリに配置する必要があります。

次のコードフラグメントは、アセンブリでこの操作を実行する方法を示しています。

&lt; -7px; '&gt; )インターネット{
bytes32 topichash = empleseventasm.selector; mstor br/> mstore(add(freemomorypointer、32)、tokenid)
// `emplereventasm`イベントを排出します
log2(
freememorypointer、/// `p` p` p` p` p`p` p`p `p` p` p` p` p`p` p`p `p` P` P` P` P` P` =メモリでオフセットを開始
64、// `s =メモリからのバイト数` p`にイベントデータに含める
トピックをフィルタリングするためのトピックevent it self
tokenid // 1st Indexedパラメーター

}
}

イベントのガスコスト

<フィギュアスタイル= "Text-Align:center;">

すべてのレコード操作コード(log0同様にlog1同様にlog2同様にlog3同様にlog4)ガスを消費する必要があります。パラメーター(テーマ)が多いほど、消費するガスが増えます。

<フィギュアスタイル= "Text-Align:center;">

Image-20240226195203141

さらに、インデックスやデータなどの他の要因により、イベントがより多くのガスを消費する可能性があります。

-Event -Iteractiveモードをチェックします

チェック効果のあるインタラクティブモード[9]また、インシデントにも適しています。

これらのモードを検出する1つの方法は、Remix Static Analysisツールを使用することです。

このモデルは、Slitherによって検出することもできます。契約が外部呼び出しと契約書を実行している場合、「再入力イベント」を促すために発見されます。

したがって、DAPPの場合、順序は非常に重要であるため、最初、次に、最終的に発行されたインシデントを正しく確認できます。これは、再帰的または再入力された呼び出しの場合に特に重要です。外部呼び出し後にイベントがトリガーされ、この外部呼び出しが繰り返される呼び出しで作成されている場合、次のようになります。

  1. 最初のインシデントは、コールが完了した後の2回目でした。

  2. 2番目のイベントは、最初のトランザクションの後に発行されました。

  3. これを理解することで、チェーンの下での明確な監査追跡も契約通話を監視することができます。最初にどの関数と最終的に呼び出されるか、およびトランザクションの実行中に各ルーチンの実行順序を確認できます。

    Slither Detectorドキュメント[10]– stidityとvyperの静的アナライザー。

    この潜在的な脆弱性もビットの道にあります[11]スマートコントラクトの監査で見つけて報告します。

    <フィギュアスタイル= "Text-Align:center;">

    IMG
    <フィギュアスタイル= "Text-Align:center;">
    IMG

    インシデントはいつトリガーされるべきですか?

    契約には、イベントをトリガーするのに重要で有用な場合があるいくつかのケースがあります。

    • 制限されたユーザーと住所を実行した場合、特定の操作(所有者または契約管理者など)。これには、人気のあるものなどが含まれます転送所有権(住所)関数、この関数は、契約所有者を変更するために所有者によってのみ呼び出されます。

    <フィギュアスタイル= "Text-Align:center;">

    IMG

    • 契約のコアロジックを担当するいくつかの重要な変数または算術パラメーターを変更します。Defiプロトコルの背景で特に重要です。

    <フィギュアスタイル= "Text-Align:center;">

    IMG

    Slither Detectorドキュメント[12]これらの状況に関する詳細情報を説明してください。

    これは、The LookeRareのTrail Auditレポートにも記載されています。

    <フィギュアスタイル= "Text-Align:center;">

    IMG

    • 異常を検出するために生産で展開された監視契約。

    <フィギュアスタイル= "Text-Align:center;">

    IMG

    0xprotocolを表示します[13]事件に関連する安全関連の問題を理解するための詳細。

    参照してください

    1. 匿名イベントの使用を目的とした不足しているドキュメント(理由を知る)[14]

    2. [匿名イベントの利点]

  • Related Posts

    Binanceはアルファポイントを起動し、すべてのルールを理解します

    ジェシー、ビッチンビジョン Binance Wallet T…

    バンクレス:注意を払う価値のある分散型コンテンツ作成プラットフォームは何ですか?

    著者:ウィリアム・M・ピャーター、バンクレス。編集:タオ・Z…

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    You Missed

    モチベーションを超えて:永続的なdefiエコシステムを構築する方法

    • 投稿者 jakiro
    • 4月 25, 2025
    • 0 views
    モチベーションを超えて:永続的なdefiエコシステムを構築する方法

    Binanceはアルファポイントを起動し、すべてのルールを理解します

    • 投稿者 jakiro
    • 4月 25, 2025
    • 0 views
    Binanceはアルファポイントを起動し、すべてのルールを理解します

    lianchuangを利用する:イーサリアムは、複数のL2の拡張を通じて高スループットチェーンをもたらす可能性があります

    • 投稿者 jakiro
    • 4月 25, 2025
    • 2 views
    lianchuangを利用する:イーサリアムは、複数のL2の拡張を通じて高スループットチェーンをもたらす可能性があります

    パラダイムHuang Gongyu:Zhang Yiming、暗号化技術のトレンドへの早期投資の詳細

    • 投稿者 jakiro
    • 4月 25, 2025
    • 0 views
    パラダイムHuang Gongyu:Zhang Yiming、暗号化技術のトレンドへの早期投資の詳細

    GlassNode:暗号市場の感情は完全に変わりましたか?誰が利益を上げていますか?

    • 投稿者 jakiro
    • 4月 25, 2025
    • 3 views
    GlassNode:暗号市場の感情は完全に変わりましたか?誰が利益を上げていますか?

    イーサリアムの底は何ですか?ETHブルマーケットはもうすぐ来ますか?

    • 投稿者 jakiro
    • 4月 25, 2025
    • 1 views
    イーサリアムの底は何ですか?ETHブルマーケットはもうすぐ来ますか?
    Home
    News
    School
    Search