eth_getLogs とトークン送金 API の使い分け:ERC-20 送金履歴

コントラクトイベントログには eth_getLogs を、インデックス済み ERC-20 送金履歴にはトークン送金 API を選択。ブロック範囲、ページネーション、対応範囲、およびファイナリティを比較します。

ウォレット履歴や ERC-20 送金の照合には、トークン送金 API から始めることを推奨します。コントラクトイベントログが必要な場合は eth_getLogs を使用してください。開発者と AI エージェントは、同一のブロックチェーンデータ API を介してインデックス済みのアドレス送金を照会できます。ウォレット資産ガイド ではトークン残高、送金履歴、メタデータを組み合わせて解説しており、Data API リファレンス ではリクエストパラメータとレスポンススキーマを定義しています。

このガイドで達成できること

ログと送金を読み取る 2 つの方法

eth_getLogs は JSON-RPC メソッドであり、JSON-RPC エンドポイントを介してブロックログを返します。Data API は、チェーンスコープの 2 つのエンドポイントを通じてトークン送金履歴を公開しています:

  • GET /{chain}/addresses/{address}/transfers — アドレスに関連する送金。
  • GET /{chain}/tokens/{token}/transfers — 単一のトークンコントラクトの送金。

どちらも同一の API key を使用し、メソッドの重み付けに応じて CU で計測されます(以下の重み付けを参照)。どちらが適しているかは、データの鮮度、ブロックウィンドウが必要かどうか、およびどのようにページネーションを行うかによって決まります。

eth_getLogs に適用される制限

eth_getLogs は、公開されている GET /v1/chains レスポンスで示されるチェーンごとの制限によって制限されます:

  • ブロック範囲:max_logs_block_range は、単一の eth_getLogs リクエストがカバーできる最大ブロック数です。これはチェーンによって異なります。固定値としてハードコーディングするのではなく、GET /v1/chains(チェーンは対応チェーン一覧に記載)から読み取ってください。より広い範囲は、JSON-RPC エラー -32602 eth_getLogs block range too large で拒否されます(課金対象外)。
  • ノードの同期状態:チェーンのノードが同期されていない間、eth_getLogs は -32010 を返します(課金対象外)。
  • ステートウィンドウ:GET /v1/chains が state_window_blocks として報告するステートウィンドウは、eth_call や eth_getBalance などの状態読み取りメソッドに適用され、eth_getLogs には適用されません。
  • ノードのプルーニング:ブロックとログの読み取りはステートウィンドウによる制限は受けませんが、ノードが保持する履歴によって制限されます。プルーニングされたデータは 4444 pruned history unavailable を返します(課金対象外)。

fromBlock および toBlock フィルタフィールドが省略されているか null の場合、デフォルトで latest になります。

HTTP 経由で eth_subscribe を呼び出すと、-32601 method not available が返されます。/v1/chains で ws が true になっているチェーンでは、WebSocket 経由で eth_subscribe を利用できます(対応チェーン一覧を参照)。それ以外の場合は、最新のブロックに対して eth_getLogs をポーリングしてください。

Data API 送金エンドポイントが提供するもの

2 つのエンドポイントでは異なるパラメータが必要です:

エンドポイントstandardブロックウィンドウ
GET /{chain}/addresses/{address}/transfers必須:erc20 または erc721。erc1155 は 422 no_coverage を返しますfrom_block と to_block は両方とも必須です。結果は (block_number, log_index) の降順でソートされます。direction(in、out、または any、デフォルトは any)で方向をフィルタリングし、token で結果を 1 つのコントラクトに絞り込むことができます。
GET /{chain}/tokens/{token}/transfers必須:erc20、erc721、または erc1155from_block と to_block はオプションです。to_block を省略した場合はデフォルトで as_of_block になります。明示的に to_block または from_block をそれより上に設定すると、clamp による回避策はなく、厳格に 409 not_indexed_yet となります。

ページネーション

両方のエンドポイントは keyset ページネーションを採用しています:

  • limit はデフォルトで 50 です。500 を超える値は 500 に制限され、0 または非整数の場合は 400 bad_request が返されます。
  • next_cursor は次のページが存在する場合にのみ表示されます。最後のページでは、このキー自体が存在せず、null になることもありません。
  • 返された値をそのまま cursor として再送することで、次のページを取得します。カーソルは、それを発行したチェーン、エンドポイント、およびクエリパラメータに対してのみ有効です。

対応範囲とファイナリティ

Data API 送金は、各チェーンの coverage.from_block から meta.as_of_block までの過去のトークン送金をインデックス化しています。どのチェーンがこれを提供しているかは、対応チェーン一覧を参照してください。

各送金項目には、token、standard、from、to、block_number、block_timestamp、tx_hash、tx_index、および log_index が含まれます。ERC-20 項目には amount が追加されます。ERC-721 項目には token_id が追加されます。ERC-1155 項目には operator、token_id、value、および batch_index が追加されます。

どちらを使用すべきか

代表的なタスクより適した方法理由
直近数百ブロックのイベントeth_getLogsそのチェーンの max_logs_block_range を超えない限り、1 回のリクエストで直近の範囲をカバーできます。
特定アドレスの過去の送金履歴GET /{chain}/addresses/{address}/transfersfrom_block/to_block ウィンドウ、direction および token フィルタ、カーソルページネーションを備えたアドレススコープのクエリ。結果は as_of_block まで提供されます。
特定トークンのすべての送金GET /{chain}/tokens/{token}/transferserc20、erc721、および erc1155 をカバーするトークンコントラクトスコープのクエリ。任意のウィンドウと、完全な結果セットのためのカーソルページネーションを備えています。
新しいイベントのリアルタイム監視eth_subscribe(WebSocket 対応チェーン) / eth_getLogs(ポーリング)サポートされている環境では WebSocket 経由で新しいヘッドやログを購読するか、直近のブロック範囲をポーリングします。

eth_getLogs によるログのクエリ

export BLOCKVECTRA_API_KEY=rgw_your_api_key

# fromBlock / toBlock default to latest. Set an explicit recent range to follow
# new events, and keep its span within the chain's max_logs_block_range.
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "eth_getLogs",
    "params": [{
      "address": "0x1111111111111111111111111111111111111111",
      "fromBlock": "latest",
      "toBlock": "latest"
    }]
  }'

Data API による送金のクエリ

export BLOCKVECTRA_API_KEY=rgw_your_api_key

# from_block / to_block are optional here; omitting to_block defaults to as_of_block.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/tokens/0x1111111111111111111111111111111111111111/transfers?standard=erc20" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

アドレスを基準に照会する場合は、from_block と to_block が必須です:

# clamp=true truncates a too-wide window, or a to_block above as_of_block,
# instead of returning 409.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/transfers?standard=erc20&from_block=0&to_block=73000000&direction=any&clamp=true" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

1 回の呼び出しあたりの CU

すべてのメソッドは CU 重み付けに基づいて課金されます。以下の重み付けはプラットフォームのプラン API から読み取られます:

呼び出しあたりの CU 重み付け

メソッド呼び出しあたりの CU
eth_getLogs30
data.address_transfers25
data.token_transfers25

現在の価格とチャージオプションについては、料金ページを参照してください。

次のステップ

最終更新:

このページの目次