eth_getLogs vs. Token Transfers API: ERC-20-Transferverlauf

Wählen Sie eth_getLogs für Contract-Event-Logs oder die Token Transfers API für indexierten ERC-20-Transferverlauf. Vergleichen Sie Blockbereiche, Paginierung, Abdeckung und Finalität.

Für den Wallet-Verlauf oder den Abgleich von ERC-20-Transfers beginnen Sie mit der Token Transfers API. Verwenden Sie eth_getLogs, wenn Sie Contract-Event-Logs benötigen. Entwickler und KI-Agenten können indexierte Adresstransfers über dieselbe Blockchain-Data-API abfragen. Der Leitfaden zu Wallet-Assets kombiniert Token-Guthaben, Transferverlauf und Metadaten; die Data-API-Referenz definiert Anfrageparameter und Antwortschemas.

Aufgaben, die dieser Leitfaden abdeckt

Zwei Wege zum Auslesen von Logs und Transfers

eth_getLogs ist eine JSON-RPC-Methode: Sie gibt Block-Logs über den JSON-RPC-Endpunkt zurück. Die Data API stellt den Token-Transferverlauf über zwei chainbezogene Endpunkte bereit:

  • GET /{chain}/addresses/{address}/transfers — Transfers, die eine Adresse betreffen.
  • GET /{chain}/tokens/{token}/transfers — Transfers für einen einzelnen Token-Contract.

Beide verwenden denselben API key und werden in CU nach Methodengewicht abgerechnet (siehe Gewichte unten). Welche Methode am besten passt, hängt davon ab, wie aktuell die Daten sind, ob Sie ein Blockfenster benötigen und wie Sie paginieren.

Limits, die für eth_getLogs gelten

eth_getLogs wird durch Limits pro Chain begrenzt, die in der öffentlichen Antwort von GET /v1/chains veröffentlicht werden:

  • Blockspanne: max_logs_block_range ist die maximale Anzahl von Blöcken, die eine einzelne eth_getLogs-Anfrage umfassen darf. Sie unterscheidet sich je nach Chain — lesen Sie sie aus GET /v1/chains aus (Chains sind unter Unterstützte Chains aufgeführt), anstatt sie fest zu codieren. Ein breiterer Bereich wird mit dem JSON-RPC-Fehler -32602 eth_getLogs block range too large abgelehnt (nicht abgerechnet).
  • Node-Synchronisation: Solange der Node einer Chain nicht synchronisiert ist, gibt eth_getLogs -32010 zurück (nicht abgerechnet).
  • State-Fenster: Das State-Fenster, das GET /v1/chains als state_window_blocks ausweist, gilt für State-Leseoperationen wie eth_call und eth_getBalance, nicht für eth_getLogs.
  • Node-Pruning: Block- und Log-Leseoperationen werden nicht durch das State-Fenster beschränkt, wohl aber durch den vom Node vorgehaltenen Verlauf. Bereinigte Daten (pruned) geben 4444 pruned history unavailable zurück (nicht abgerechnet).

Wenn die Filterfelder fromBlock und toBlock weggelassen werden oder null sind, fallen sie standardmäßig auf latest zurück.

Der Aufruf von eth_subscribe über HTTP gibt -32601 method not available zurück. Auf Chains, bei denen ws in /v1/chains true ist, steht eth_subscribe über WebSocket zur Verfügung (siehe Unterstützte Chains); andernfalls pollen Sie eth_getLogs über die neuesten Blöcke.

Was die Transfers-Endpunkte der Data API bieten

Die beiden Endpunkte erfordern unterschiedliche Parameter:

EndpunktstandardBlockfenster
GET /{chain}/addresses/{address}/transfersErforderlich: erc20 oder erc721. erc1155 gibt 422 no_coverage zurückfrom_block und to_block sind beide erforderlich. Ergebnisse sind absteigend nach (block_number, log_index) sortiert. direction (in, out oder any; Standard any) filtert nach Richtung, und token beschränkt die Ergebnisse optional auf einen Contract.
GET /{chain}/tokens/{token}/transfersErforderlich: erc20, erc721 oder erc1155from_block und to_block sind optional. Ein fehlendes to_block fällt standardmäßig auf as_of_block zurück; ein explizites to_block oder from_block darüber führt zu einem harten 409 not_indexed_yet ohne clamp-Ausweichmöglichkeit.

Paginierung

Beide Endpunkte sind keyset-paginiert:

  • limit beträgt standardmäßig 50; Werte über 500 werden auf 500 begrenzt, und 0 oder ein Nicht-Ganzzahl-Wert gibt 400 bad_request zurück.
  • next_cursor erscheint nur, wenn eine weitere Seite vorhanden ist. Auf der letzten Seite fehlt der Schlüssel vollständig, niemals null.
  • Übergeben Sie den zurückgegebenen Wert unverändert als cursor, um die nächste Seite abzurufen. Ein Cursor ist nur für die Chain, den Endpunkt und die Abfrageparameter gültig, die ihn ausgegeben haben.

Abdeckung und Finalität

Data-API-Transfers indexieren historische Token-Transfers von coverage.from_block der jeweiligen Chain bis hin zu meta.as_of_block. Unter Unterstützte Chains sehen Sie, welche Chains dies bereitstellen.

Jeder Transfer-Eintrag enthält token, standard, from, to, block_number, block_timestamp, tx_hash, tx_index und log_index. ERC-20-Einträge enthalten zusätzlich amount; ERC-721-Einträge token_id; ERC-1155-Einträge operator, token_id, value und batch_index.

Wann welche Option zu nutzen ist

Typische AufgabeBessere WahlWarum
Events in den letzten paar hundert Blöckeneth_getLogsEine Anfrage kann einen aktuellen Bereich abdecken, solange sie max_logs_block_range dieser Chain nicht überschreitet.
Historische Transfers einer AdresseGET /{chain}/addresses/{address}/transfersAdressbezogene Abfrage mit einem from_block/to_block-Fenster, direction- und token-Filtern sowie Cursor-Paginierung; liefert Ergebnisse bis as_of_block.
Alle Transfers eines TokensGET /{chain}/tokens/{token}/transfersToken-Contract-bezogene Abfrage für erc20, erc721 und erc1155 mit optionalem Fenster und Cursor-Paginierung für die gesamte Ergebnismenge.
Live-Monitoring neuer Eventseth_subscribe (WebSocket-Chains) / eth_getLogs (Polling)Neue Heads oder Logs über WebSocket abonnieren, wo unterstützt, oder aktuelle Blockbereiche pollen.

Logs mit eth_getLogs abfragen

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"
    }]
  }'

Transfers mit der Data API abfragen

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"

Um stattdessen nach Adresse abzufragen, sind from_block und to_block erforderlich:

# 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"

CU pro Aufruf

Jede Methode wird nach ihrem CU-Gewicht abgerechnet. Die folgenden Gewichte werden aus der Plans-API der Plattform ausgelesen:

CU-Gewichtung pro Aufruf

MethodeCU pro Aufruf
eth_getLogs30
data.address_transfers25
data.token_transfers25

Aktuelle Preise und Aufladeoptionen finden Sie auf der Preisseite.

Nächste Schritte

Zuletzt aktualisiert:

Auf dieser Seite