İş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_traceyöntemleri (debug_traceTransactiongibi) — 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}/traceveGET /{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:
tracerparametresi yalnızca yerleşik yerel tracer'ları kabul eder —callTracer,flatCallTracer,prestateTracer,4byteTracer,noopTracerveya varsayılan yapı günlükleyicisini kullanmak için atlanabilir. Başka herhangi bir değer-32602 tracer not allowedJSON-RPC hatasıyla reddedilir (faturalandırılmaz). - Trace zaman aşımı:
timeoutparametresi geçerli bir süre ve en fazla 30 saniye olmalıdır; aksi takdirde istek-32602 trace timeout not allowedile reddedilir (faturalandırılmaz). - Düğüm eşitleme koruması: Bir zincirin düğümü eşitlenmemişken,
eth_chainIdhariç her yöntem —debug_traceyöntemleri dahil —-32010döndürür (faturalandırılmaz). - Durum penceresi:
debug_traceCall,debug_traceBlockByNumber,debug_traceTransactionvedebug_traceBlockByHash, zincirin durum penceresi içinde olması gereken bir bloğu hedefler. Pencereden daha eski bir hedef veyasafe,finalizedya daearliestetiketini kullanan bir hedef-32011döndürür (faturalandırılmaz). - Karma ve blok aramaları: Hatalı biçimlendirilmiş veya bilinmeyen bir karma
-32000 transaction not found/block not founddöndürür; geçici bir arıza-32603 upstream unavailabledöndürür (yeniden denenebilir). Faturalandırılmaz. - Zincir başına yöntem politikası: Bir zincirin hangi
debug_traceyöntemlerine izin verdiği, genelGET /v1/chainsyanı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_indexsırasına göre. İşlem içermeyen bir blokdata: []döndürür.
Yanıt zarfı şöyledir:
TxTraceEnvelope:datadoğrudan birCallFrameve buna ek olarakmetaiçerir.BlockTracesEnvelope:data, her biritxHashveresultCallFrameiçeren birBlockTraceItemdizisi ve buna ek olarakmetaiç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 /chainsiçindeki bir kaydınchaindeğ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
tracesyeteneğine aittir. Bu yeteneğe sahip olmayan bir zincir422 no_coveragedö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_blockolarak bildirir; bundan önceki veya izlenemeyen bir aralıktaki bir istek422 no_coveragedöndürür. - İşlem izleri için: karma bulunamazsa
404 not_founddö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); karmaas_of_blockdeğerinden daha yüksek bir bloğa çözümlenirse bunun yerine409 not_indexed_yetdöndürür. - Blok izleri uç noktası bir blok numarası alır.
as_of_blocküzerindeki bir{number},indexed_throughile409 not_indexed_yetdöndürür;as_of_blockhizasındaki veya altındaki bir{number}hemen sunulur. - İşlemleri olan ancak henüz trace verisi olmayan yeni bir blok,
Retry-Afterbaşlığıyla birlikte503 unavailabledö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örev | Daha uygun olan | Nedeni |
|---|---|---|
| Gerçekleştikten hemen sonra tek bir işlemi yeniden yapılandırma | debug_traceTransaction | Düğü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ı okuma | GET /{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 okuma | GET /{chain}/blocks/{number}/traces | Tü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 izleme | debug_trace yöntemleri | Data 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_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 |
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
- Hesabınızın neleri içerdiğini kontrol etmek için ücretsiz planı ve fiyatlandırmayı inceleyin.
- Bir API key oluşturmak için konsolda oturum açın.
Son güncelleme:
Tokenize hisse senetleri
Bir API key ile Robinhood Chain üzerindeki tokenize hisse senedi etkinliğini entegre edin: GET /v1/data/robinhood_mainnet/stocks günlük bir lider tablosu döndürür ve /stocks/{token} son günlük metrikleri döndürür; lider tablosunda imleç sayfalaması yoktur. Bunlar hisse senedi fiyatları değil, zincir üstü etkinlik metrikleridir.
Cüzdan varlıkları sayfası
Sıfır olmayan ERC-20 token bakiyeleri, token transfer geçmişi ve toplu meta verilerle bir cüzdan varlıkları sayfası oluşturun. Zincir kapsamını kontrol edin, sonuçları sayfalandırın ve tam sayı tutarları decimals değerine göre ölçekleyin.