İşlem izleri (traces): debug_traceTransaction ve Data API trace uç noktaları

Bir işlem için yürütme çağrı ağaçlarını yeniden yapılandırın: İzin verilen tracer'ları ve korumalarıyla JSON-RPC debug_traceTransaction yöntemi ile kapsam sınırlarıyla Data API getTransactionTrace ve getBlockTraces uç noktaları.

Bir çağrı ağacını yeniden yapılandırmanın iki yolu

Bir işlem izi (transaction trace), bir yürütmenin yeniden yapılandırılmış çağrı ağacıdır: hangi sözleşmenin hangi girdiyle çağrıldığı, ne kadar gas tükettiği ve hangi alt çağrıları yaptığı. BlockVectra bunu iki arayüz üzerinden sunar:

  • JSON-RPC debug_trace yöntemleri (debug_traceTransaction gibi) — zincirin düğümüne karşı JSON-RPC uç noktası üzerinden çalışır, böylece düğümün hala sahip olduğu güncel durumu izleyebilirler.
  • Data API izleri — GET /{chain}/transactions/{hash}/trace ve GET /{chain}/blocks/{number}/traces, REST üzerinden saklanan, indekslenmiş çağrı ağaçlarını döndürür.

Her ikisi de aynı API key'i kullanır ve yöntem ağırlığına göre CU cinsinden ölçülür (aşağıdaki ağırlıklara bakın). Hangisinin uygun olduğu; tek bir işleme mi yoksa bir bloğun tamamına mı ihtiyacınız olduğuna, hedefin ne kadar güncel olduğuna ve tam bir bloğu sayfalama olmadan taramak isteyip istemediğinize bağlıdır.

debug_trace yöntemleri için geçerli limitler

debug_trace istekleri yalnızca zincirin yöntem politikasının izin verdiği yöntemler ve tracer'lar için kabul edilir:

  • İzin verilen tracer'lar: tracer parametresi yalnızca yerleşik yerel tracer'ları kabul eder — callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer veya varsayılan yapı günlükleyicisini kullanmak için atlanabilir. Başka herhangi bir değer -32602 tracer not allowed JSON-RPC hatasıyla reddedilir (faturalandırılmaz).
  • Trace zaman aşımı: timeout parametresi geçerli bir süre ve en fazla 30 saniye olmalıdır; aksi takdirde istek -32602 trace timeout not allowed ile reddedilir (faturalandırılmaz).
  • Düğüm eşitleme koruması: Bir zincirin düğümü eşitlenmemişken, eth_chainId hariç her yöntem — debug_trace yöntemleri dahil — -32010 döndürür (faturalandırılmaz).
  • Durum penceresi: debug_traceCall, debug_traceBlockByNumber, debug_traceTransaction ve debug_traceBlockByHash, zincirin durum penceresi içinde olması gereken bir bloğu hedefler. Pencereden daha eski bir hedef veya safe, finalized ya da earliest etiketini kullanan bir hedef -32011 döndürür (faturalandırılmaz).
  • Karma ve blok aramaları: Hatalı biçimlendirilmiş veya bilinmeyen bir karma -32000 transaction not found / block not found döndürür; geçici bir arıza -32603 upstream unavailable döndürür (yeniden denenebilir). Faturalandırılmaz.
  • Zincir başına yöntem politikası: Bir zincirin hangi debug_trace yöntemlerine izin verdiği, genel GET /v1/chains yanıtı tarafından yayınlanır. Bir yöntem listesini koda sabitlemek yerine çalışma zamanında okuyun; zincirler Desteklenen Zincirler sayfasında listelenmiştir ve yöntem referansı JSON-RPC yöntemleri sayfasındadır.

callTracer ile debug_traceTransaction isteme

Aşağıdaki çağrı, bir çağrı ağacı istemek için tracer parametresini ekler:

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

Data API trace uç noktalarının sağladıkları

Data API, iki kapsam için saklanan çağrı ağaçlarını döndürür. Hiçbiri sayfalanmaz: next_cursor hiçbir zaman mevcut değildir.

  • GET /{chain}/transactions/{hash}/trace — işlem karmasına göre aranan tek bir işlemin çağrı çerçevesi.
  • GET /{chain}/blocks/{number}/traces — bir bloktaki işlem başına bir çağrı ağacı, tx_index sırasına göre. İşlem içermeyen bir blok data: [] döndürür.

Yanıt zarfı şöyledir:

  • TxTraceEnvelope: data doğrudan bir CallFrame ve buna ek olarak meta içerir.
  • BlockTracesEnvelope: data, her biri txHash ve result CallFrame içeren bir BlockTraceItem dizisi ve buna ek olarak meta içerir.

Her iki trace uç noktası da standart Ethereum callTracer biçimini döndürür. Bu, Data API'nin parasal güvenlik kodlamasının bir istisnasıdır: başka yerlerde 2^53 değerini aşabilecek bir değer ondalık dize olarak serileştirilir; bu iki uç noktada value, gas ve gasUsed ondalık dizeler değil, 0x ön ekli onaltılık miktarlardır. Her CallFrame; type, from, gas, gasUsed ve input taşır; type, CALL, DELEGATECALL, STATICCALL, CREATE, CREATE2 veya SELFDESTRUCT değerlerinden biridir. Bir CREATE/CREATE2 çerçevesinin hedefi için to yoktur ve bir STATICCALL çerçevesi için value yoktur. İsteğe bağlı üyeler output (çağrı veri döndürmediğinde yoktur), error (başarılı olduğunda yoktur), revertReason (yalnızca bir Error(string) revert durumunda bulunur) ve calls (çağrı sırasına göre iç içe geçmiş alt çağrılar) şeklindedir. Çerçevenin ek üyeleri korunur.

Şekli somutlaştırmak için CallFrame alan iskeleti aşağıda verilmiştir:

{
  "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
}

Parametreler

  • {chain} (yol parametresi, zorunlu): zincir tanımlayıcısı, GET /chains içindeki bir kaydın chain değeri. Eşleştirme tamdır ve büyük/küçük harfe duyarlıdır; takma adlar ve sayısal zincir kimlikleri kabul edilmez.
  • {hash} (yol parametresi, işlem izi için zorunlu): 32 baytlık işlem karması, 0x ön eki isteğe bağlıdır, her iki basamak harf durumu da kabul edilir.
  • {number} (yol parametresi, blok izleri için zorunlu): negatif olmayan blok yüksekliği.

Kapsam ve kesinlik

  • Her iki uç nokta da traces yeteneğine aittir. Bu yeteneğe sahip olmayan bir zincir 422 no_coverage döndürür. Bu veri kümesini sağlayan zincirler Desteklenen Zincirler sayfasına ve veri kümesi dizinine tabidir.
  • Trace verileri, bir zincirin indekslenmiş geçmişinin geri kalanından daha sonra başlayabilir. GET /chains, bu sınırı coverage.traces_from_block olarak bildirir; bundan önceki veya izlenemeyen bir aralıktaki bir istek 422 no_coverage döndürür.
  • İşlem izleri için: karma bulunamazsa 404 not_found döndürür (yeni gönderilen veya çıkarılan bir işlem için bunu kalıcı olarak değerlendirmeden önce birkaç saniye sonra yeniden deneyin); karma as_of_block değerinden daha yüksek bir bloğa çözümlenirse bunun yerine 409 not_indexed_yet döndürür.
  • Blok izleri uç noktası bir blok numarası alır. as_of_block üzerindeki bir {number}, indexed_through ile 409 not_indexed_yet döndürür; as_of_block hizasındaki veya altındaki bir {number} hemen sunulur.
  • İşlemleri olan ancak henüz trace verisi olmayan yeni bir blok, Retry-After başlığıyla birlikte 503 unavailable döndürür.

Data API'den bir trace isteme

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"

Hangisi kullanılmalı

Tipik görevDaha uygun olanNedeni
Gerçekleştikten hemen sonra tek bir işlemi yeniden yapılandırmadebug_traceTransactionDüğümün mevcut durumuna karşı çalışır; kullanılabilirlik zincirin yöntem politikasını takip eder.
Tek bir işlemin saklanan çağrı ağacını okumaGET /{chain}/transactions/{hash}/traceİşlemin CallFrame değerini REST üzerinden doğrudan döndürür; as_of_block seviyesine kadar sunulur.
Bir bloktaki her çağrı ağacını tek bir istekte okumaGET /{chain}/blocks/{number}/tracesTüm bloğu sayfalanmamış olarak, tx_index sırasına göre döndürür; as_of_block seviyesine kadar sunulur.
Düğümün hala sahip olduğu ancak veri kümesinin henüz saklamadığı durumu izlemedebug_trace yöntemleriData API, saklanan verileri as_of_block seviyesine kadar sunar; düğüm henüz yazılmamış bloklar için yanıt verebilir.

Çağrı başına CU

Her yöntem kendi CU ağırlığına göre faturalandırılır. Aşağıdaki ağırlıklar platform planları API'sinden okunur:

Çağrı başına CU ağırlığı

YöntemÇağrı başına CU
debug_traceBlockByHash100
debug_traceBlockByNumber100
debug_traceCall100
debug_traceTransaction100
trace_block100
trace_call100
trace_get100
trace_replayTransaction100
trace_transaction100
data.block_traces200
data.transaction_trace200

Reddedilen istekler faturalandırılmaz. Faturalandırma kurallarının tamamı için Neler faturalandırılmaz: hata kodları ve faturalandırma kuralları sayfasına bakın.

Sonraki adımlar

Son güncelleme:

Bu sayfada