イベントログとは
イベントログは、EVM コントラクトが LOG0–LOG4 オペコード(Solidity の emit)を実行したときに書き込む記録です。各エントリには、イベントを発行したコントラクトのアドレス、最大 4 つの 32 バイトの topics、そして任意長の data フィールドが含まれます。ログのデコードとは、topics[0] をイベントシグネチャに照合し、残りの topics から indexed パラメーターを読み取り、data から非 indexed パラメーターを ABI デコードすることです。エクスプローラーは検証済みソースを使ってこれを行いますが、このページはシグネチャだけを頼りに 40 種類以上の一般的なイベントを、あるいは貼り付けた任意の ABI を使ってデコードします。
ログのエンコード方法
| フィールド | 内容 | 例(ERC-20 Transfer) |
|---|---|---|
| address | イベントを発行したコントラクト | 0xdAC17F958D2ee523a2206206994597C13D831ec7(USDT) |
| topics[0] | 正規化シグネチャの keccak256 | 0xddf252ad… = keccak256("Transfer(address,address,uint256)") |
| topics[1] | 1 番目の indexed パラメーター、32 バイトに左パディング | from アドレス |
| topics[2] | 2 番目の indexed パラメーター | to アドレス |
| data | すべての非 indexed パラメーターの ABI エンコード | 32 バイトの value |
静的型(address、整数、bool、bytes1–32)の indexed パラメーターは topic にそのまま格納されます。動的型(string、bytes、配列、構造体)の indexed パラメーターは、Solidity ABI 仕様のイベントの節にあるとおり、そのエンコードの Keccak-256 ハッシュに置き換えられます。デコーダーはこれらをハッシュ済みとして表示します。
実例: USDT の転送
上の「ERC-20 Transfer」をクリックしてください。topics[0] は Transfer のシグネチャに一致し、topics がちょうど 3 つあるため、ERC-721 のレイアウト(indexed が 3 つ)ではなく ERC-20 のレイアウト(indexed なアドレスが 2 つ)が選ばれます。topics[1] は from = 0xd8dA6BF2…96045、topics[2] は to = 0x1111…1111 にデコードされ、data の唯一のワード 0x17d7840 は value = 25000000、USDT の小数点以下 6 桁で換算すると 25 USDT です。同じ仕組みで Uniswap V2 の Swap(indexed なアドレス 2 つと data 内の 4 つの金額)や、data フィールドにオフセットと長さ付きの動的配列を 2 つ持つ ERC-1155 の TransferBatch もデコードできます。
ABI なしで認識できるイベント
下の表はデコーダーが使うのと同じシグネチャリストからページ上で生成されるため、各 topics[0] の値は Keccak 実装のセルフテストにもなっています。対象は、ERC-20 と ERC-721 の Transfer と Approval、ApprovalForAll、ERC-1155 の TransferSingle、TransferBatch、URI、WETH の Deposit と Withdrawal、Uniswap V2 の Swap、Sync、Mint、Burn、PairCreated、Uniswap V3 の Swap、Mint、Burn、Collect、PoolCreated、OwnershipTransferred、EIP-1967 の Upgraded、AdminChanged、BeaconUpgraded、Initializable、Pausable、AccessControl のイベント、Permit2 の Approval、Permit、NonceInvalidation、Lockdown、ERC-4626 の Deposit と Withdraw、そして Safe の ExecutionSuccess、ExecutionFailure、SafeMultiSigTransaction、オーナーとしきい値の変更、SafeSetup、ProxyCreation です。
受け付ける入力
- エクスプローラー、viem、ethers、web3.py からコピーした単一のログオブジェクト
{"address","topics","data"}。 - ログの配列、
eth_getLogsのresult、または JSON-RPC レスポンス全体。 - トランザクションレシート:
logs配列の各エントリを順番にデコードし、ブロック番号、ログインデックス、トランザクションハッシュを表示します。 - 1 行に 1 つ貼り付けた topics と data の hex。トレースやデバッガーからコピーしたログ向けで、「topics[1]:」のようなラベルは無視されます。
- 任意の ABI: フラグメントの JSON 配列、
abiキーを持つオブジェクト(Hardhat や Foundry のアーティファクト)、または人間が読めるevent …行。ABI のイベントは組み込みテーブルより優先されます。
関連: セレクター・topic 計算ツールで任意のシグネチャから topic ハッシュを計算する、ABI デコーダーでトランザクションの calldata をデコードする、Ethereum トランザクションデコーダーで生のトランザクションを調べる。