Transaktions-Traces: debug_traceTransaction und die Trace-Endpunkte der Data API
Rekonstruieren Sie Aufrufstrukturen (Call Trees) für eine Transaktion: die JSON-RPC-Methode debug_traceTransaction mit ihren zulässigen Tracern und Schutzmechanismen sowie die Data API-Endpunkte getTransactionTrace und getBlockTraces mit ihren Abdeckungsgrenzen.
Zwei Wege zur Rekonstruktion einer Aufrufstruktur
Ein Transaktions-Trace ist die rekonstruierte Aufrufstruktur (Call Tree) einer Ausführung: Welcher Vertrag wurde aufgerufen, mit welcher Eingabe, wie viel Gas wurde verbraucht und welche Unteraufrufe wurden getätigt. BlockVectra stellt diese Informationen über zwei Schnittstellen bereit:
- JSON-RPC
debug_trace-Methoden (wiedebug_traceTransaction) — werden über den JSON-RPC-Endpunkt direkt gegen den Node der Chain ausgeführt und können daher aktuelle Zustände tracen, die der Node noch vorhält. - Data API-Traces —
GET /{chain}/transactions/{hash}/traceundGET /{chain}/blocks/{number}/tracesgeben gespeicherte, indexierte Call Trees über REST zurück.
Beide nutzen denselben API-Schlüssel und werden in CU anhand des Methodengewichts abgerechnet (siehe Gewichtungen unten). Welche Variante sich eignet, hängt davon ab, ob Sie eine einzelne Transaktion oder einen ganzen Block benötigen, wie aktuell das Ziel ist und ob Sie einen vollständigen Block ohne Paginierung durchlaufen möchten.
Limits für debug_trace-Methoden
debug_trace-Anfragen werden nur für Methoden und Tracer akzeptiert, die die Methodenrichtlinie der Chain zulässt:
- Zulässige Tracer: Der Parameter
tracerakzeptiert ausschließlich die integrierten nativen Tracer —callTracer,flatCallTracer,prestateTracer,4byteTracer,noopTraceroder das Weglassen des Parameters, um den standardmäßigen Struct-Logger zu verwenden. Jeder andere Wert wird mit dem JSON-RPC-Fehler-32602 tracer not allowedabgewiesen (wird nicht berechnet). - Trace-Timeout: Der Parameter
timeoutmuss eine gültige Zeitdauer und maximal 30s sein; andernfalls wird die Anfrage mit-32602 trace timeout not allowedabgewiesen (wird nicht berechnet). - Node-Sync-Schranke: Solange der Node einer Chain nicht synchronisiert ist, gibt jede Methode außer
eth_chainId— einschließlichdebug_trace-Methoden —-32010zurück (wird nicht berechnet). - State-Fenster:
debug_traceCall,debug_traceBlockByNumber,debug_traceTransactionunddebug_traceBlockByHashzielen auf einen Block ab, der innerhalb des State-Fensters der Chain liegen muss. Ein Ziel, das älter als dieses Fenster ist oder das Tagsafe,finalizedoderearliestverwendet, gibt-32011zurück (wird nicht berechnet). - Hash- und Blockabfragen: Ein fehlerhafter oder unbekannter Hash gibt
-32000 transaction not found/block not foundzurück; ein vorübergehender Fehler gibt-32603 upstream unavailablezurück (wiederholbar). Wird nicht berechnet. - Methodenrichtlinie pro Chain: Welche
debug_trace-Methoden eine Chain erlaubt, wird über die öffentliche Antwort vonGET /v1/chainsbereitgestellt. Lesen Sie diese zur Laufzeit aus, anstatt eine Methodenliste fest im Code zu hinterlegen; Chains sind unter Unterstützte Chains aufgeführt und die Methodenreferenz befindet sich auf der Seite JSON-RPC-Methoden.
debug_traceTransaction mit callTracer anfordern
Der folgende Aufruf fügt den Parameter tracer hinzu, um einen Call Tree anzufordern:
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# Add "tracer" to request a call tree with one of the allowed native tracers.
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": "debug_traceTransaction",
"params": [
"0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
{ "tracer": "callTracer" }
]
}'Was die Trace-Endpunkte der Data API bieten
Die Data API gibt gespeicherte Call Trees für zwei Bereiche zurück. Keiner von beiden ist paginiert: next_cursor ist niemals vorhanden.
GET /{chain}/transactions/{hash}/trace— der Call Frame einer einzelnen Transaktion, abgefragt über den Transaktions-Hash.GET /{chain}/blocks/{number}/traces— ein Call Tree pro Transaktion in einem Block, in Reihenfolge destx_index. Ein Block ohne Transaktionen gibtdata: []zurück.
Die Antwortstruktur ist:
TxTraceEnvelope:dataist direkt einCallFrame, zuzüglichmeta.BlockTracesEnvelope:dataist ein Array vonBlockTraceItem, jeweils mittxHashund demresult-CallFrame, zuzüglichmeta.
Beide Trace-Endpunkte geben das standardmäßige Ethereum-callTracer-Format zurück. Dies ist eine Ausnahme von der finanzsicheren Codierung (Money-Safety) der Data API: An anderer Stelle werden Werte, die 2^53 überschreiten können, als Dezimal-String serialisiert; an diesen beiden Endpunkten sind value, gas und gasUsed Hex-Werte mit 0x-Präfix, keine Dezimal-Strings. Jeder CallFrame enthält type, from, gas, gasUsed und input; type ist eines von CALL, DELEGATECALL, STATICCALL, CREATE, CREATE2 oder SELFDESTRUCT. to fehlt beim Ziel eines CREATE/CREATE2-Frames, und value fehlt bei einem STATICCALL-Frame. Optionale Felder sind output (fehlt, wenn der Aufruf keine Daten zurückgegeben hat), error (fehlt bei Erfolg), revertReason (nur bei einem Revert mit Error(string) vorhanden) und calls (verschachtelte Unteraufrufe in Aufrufreihenfolge). Zusätzliche Felder des Frames bleiben erhalten.
Zur Veranschaulichung der Struktur dient dieses Felderskelett von CallFrame:
{
"type": "CALL | DELEGATECALL | STATICCALL | CREATE | CREATE2 | SELFDESTRUCT",
"from": "0x…", // 20-byte address
"to": "0x…", // absent for a CREATE/CREATE2 target
"value": "0x…", // 0x-prefixed hex quantity; absent for STATICCALL
"gas": "0x…", // 0x-prefixed hex quantity
"gasUsed": "0x…", // 0x-prefixed hex quantity
"input": "0x…",
"output": "0x…", // absent when the call returned no data
"error": "…", // absent on success
"revertReason": "…", // absent unless the call reverted with Error(string)
"calls": [] // nested sub-calls in call order; absent for a leaf frame
}Parameter
{chain}(Pfadparameter, erforderlich): Chain-Kennung, derchain-Wert eines Eintrags inGET /chains. Der Abgleich erfolgt exakt und case-sensitiv; Aliase und numerische Chain-IDs werden nicht akzeptiert.{hash}(Pfadparameter, für Transaktions-Trace erforderlich): 32-Byte-Transaktions-Hash,0x-Präfix optional, Groß-/Kleinschreibung wird akzeptiert.{number}(Pfadparameter, für Block-Traces erforderlich): nicht-negative Blockhöhe.
Abdeckung und Finalität
- Beide Endpunkte gehören zur Funktion
traces. Eine Chain ohne diese Funktion gibt422 no_coveragezurück. Chains, die diesen Datensatz bereitstellen, unterliegen der Seite Unterstützte Chains und dem Datensatzverzeichnis. - Trace-Daten können später beginnen als der Rest der indexierten Historie einer Chain.
GET /chainsmeldet die Grenze alscoverage.traces_from_block; eine Anfrage vor dieser Grenze oder in einem Bereich, der nicht getracet werden konnte, gibt422 no_coveragezurück. - Für Transaktions-Traces: Wird der Hash nicht gefunden, wird
404 not_foundzurückgegeben (wiederholen Sie die Anfrage bei einer gerade übermittelten oder geminten Transaktion nach wenigen Sekunden, bevor Sie dies als dauerhaft betrachten); löst der Hash zu einem Block auf, der höher alsas_of_blockist, wird stattdessen409 not_indexed_yetzurückgegeben. - Der Endpunkt für Block-Traces nimmt eine Blocknummer entgegen. Ein
{number}überas_of_blockgibt409 not_indexed_yetmitindexed_throughzurück; ein{number}bei oder unteras_of_blockwird sofort beantwortet. - Ein kürzlich erzeugter Block mit Transaktionen, für den jedoch noch keine Trace-Daten vorliegen, gibt
503 unavailablemit einemRetry-After-Header zurück.
Einen Trace über die Data API anfordern
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# One transaction's call frame.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/transactions/0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd/trace" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"
# One call tree per transaction in a block.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/79900000/traces" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Welche Variante gewählt werden sollte
| Typische Aufgabe | Bessere Wahl | Grund |
|---|---|---|
| Eine einzelne Transaktion direkt nach Aufnahme in die Chain rekonstruieren | debug_traceTransaction | Läuft gegen den aktuellen Zustand des Nodes; Verfügbarkeit folgt der Methodenrichtlinie der Chain. |
| Den gespeicherten Call Tree einer einzelnen Transaktion auslesen | GET /{chain}/transactions/{hash}/trace | Gibt den CallFrame der Transaktion direkt über REST zurück; wird bis zu as_of_block bedient. |
| Alle Call Trees in einem Block mit einer einzigen Anfrage auslesen | GET /{chain}/blocks/{number}/traces | Gibt den gesamten Block unpaginiert in Reihenfolge des tx_index zurück; wird bis zu as_of_block bedient. |
| Zustände tracen, die der Node noch vorhält, der Datensatz aber noch nicht gespeichert hat | debug_trace-Methoden | Die Data API bedient gespeicherte Daten bis zu as_of_block; der Node kann für noch nicht geschriebene Blöcke antworten. |
CU pro Aufruf
Jede Methode wird nach ihrem CU-Gewicht abgerechnet. Die folgenden Gewichtungen werden aus der Plans-API der Plattform ausgelesen:
CU-Gewichtung pro Aufruf
| Methode | CU pro Aufruf |
|---|---|
debug_traceBlockByHash | 100 |
debug_traceBlockByNumber | 100 |
debug_traceCall | 100 |
debug_traceTransaction | 100 |
trace_block | 100 |
trace_call | 100 |
trace_get | 100 |
trace_replayTransaction | 100 |
trace_transaction | 100 |
data.block_traces | 200 |
data.transaction_trace | 200 |
Abgelehnte Anfragen werden nicht berechnet. Die vollständigen Abrechnungsregeln finden Sie unter Was nicht berechnet wird: Fehlercodes und Abrechnungsregeln.
Nächste Schritte
- Kostenlosen Plan und Preise ansehen, um den Leistungsumfang Ihres Kontos zu prüfen.
- In der Konsole anmelden, um einen API-Schlüssel zu erstellen.
Zuletzt aktualisiert:
Tokenisierte Aktien
Integrieren Sie Aktivitäten tokenisierter Aktien auf Robinhood Chain mit einem API-Schlüssel: GET /v1/data/robinhood_mainnet/stocks liefert eine tägliche Bestenliste und /stocks/{token} liefert aktuelle tägliche Metriken; die Bestenliste bietet keine Cursor-Paginierung. Dies sind On-Chain-Aktivitätsmetriken, keine Börsenkurse.
Wallet-Assets-Seite
Erstellen Sie eine Wallet-Assets-Seite mit ERC-20-Token-Guthaben ungleich null, Token-Transferverlauf und Batch-Metadaten. Prüfen Sie die Chain-Abdeckung, paginieren Sie Ergebnisse und skalieren Sie ganzzahlige Beträge anhand der Dezimalstellen.