Tek anahtar, çok zincir: bir örneği başka bir zincire geçirme
Aynı API anahtarı desteklenen her zincirde çalışır. URL'lerin nasıl yapılandırıldığını, zincirlerin programatik olarak nasıl keşfedildiğini ve bakiyeler ile limitlerin nasıl havuzlandığını öğrenin.
1. Desteklenen tüm zincirlerde tek anahtar
Aynı API anahtarı, JSON-RPC için desteklenen tüm zincirlerde ve mevcut olduğu zincirlerde Data API için çalışır. Anahtarlar hesabınıza aittir ve belirli bir zincire bağlı değildir; her ağ için ayrı API anahtarları oluşturmanıza gerek yoktur.
Krediler ve hız sınırları, tüm ağlar genelinde ve JSON-RPC API ile Data API arasında paylaşılır; ağa göre bölünmez. Ayrıntılı faturalandırma kuralları için Fiyatlandırma sayfasına bakın.
- Havuzlanmış bakiye: Ücretli bakiye yüklemeleri ve ücretsiz krediler tüm zincirlerde geçerlidir. Herhangi bir zincirdeki çağrılar aynı hesap bakiyesinden düşülür.
- Havuzlanmış hız sınırları: Belirli bir anahtar için Compute Unit (CU) yenilenme hızları ve burst kapasiteleri tüm zincirlerde geçerlidir. Ücretsiz Plan saniye başına çağrı sınırları, zincir başına bölünmek yerine desteklenen tüm zincirler genelinde havuzlanır.
- Yükseltme yolu: Bakiye yüklemesi yaptıktan sonra artık Ücretsiz Plan'ın saniye başına çağrı sınırıyla kısıtlanmazsınız; her anahtar, JSON-RPC dokümantasyonunda açıklandığı gibi CU hız ve burst sınırlarına tabi kalmaya devam eder.
2. URL yapısı ve {chain} parametresi
Zincir kapsamındaki her istek, URL yolunda {chain} kullanarak hedef ağını belirtir. {chain} parametresi, zincirin küçük harfli slug tanımlayıcısıdır (örneğin robinhood_mainnet).
| Hizmet | Kimlik Doğrulama | URL şablonu | Açıklama |
|---|---|---|---|
| JSON-RPC | URL yolunda anahtar | POST /v1/{chain}/{api_key} | En basit biçim, curl ve HTTP istemcileri için uygundur |
| JSON-RPC | İstek başlığında anahtar | POST /v1/{chain} | Anahtarı x-api-key: {api_key} istek başlığıyla iletin |
| Data API | REST rotaları | GET /v1/data/{chain}/… | Anahtarı x-api-key: {api_key} istek başlığıyla iletin |
| Genel zincir listesi | Kimlik doğrulamasız | GET /v1/chains | Genel zincir listesi ve statik parametreler (faturalandırılmaz) |
| Genel durum | Kimlik doğrulamasız | GET /v1/status | Mevcut hizmet durumu ve zincir tepe blokları (faturalandırılmaz) |
GET /v1/chains, her zincir için bir jsonrpc ve bir data bayrağı bildirir. Bir zincire JSON-RPC sunduğunda JSON-RPC URL'leri ile, data bayrağı true olduğunda ise GET /v1/data/{chain}/… ile erişin (Data API yalnızca bu zincirlere hizmet verir).
İpucu: Anahtarınızı istek başlıkları aracılığıyla iletirken, URL'yi sonunda eğik çizgi olmadan zincir adıyla bitecek şekilde biçimlendirin. JSON-RPC yalnızca
/v1/{chain}ve/v1/{chain}/{api_key}adreslerinde sunulur. Sonunda eğik çizgi olan (örneğin/v1/{chain}/) veya zincir segmenti eksik olan istekler, boş bir gövde ile HTTP 404 döndürür. Bilinmeyen bir{chain}için yapılan isteklererror.data.reason: "unknown_chain"ile HTTP 404 döndürür (faturalandırılmaz).
3. Programatik zincir keşfi ve yetenekler
Desteklenen zincirler ve yetenekleri dinamik olarak sunulur. Uygulamanızda statik bir zincir listesini sabit kodlamayın. Bunun yerine, çalışma zamanında mevcut ağları ve yeteneklerini keşfedin:
GET /v1/chains ile statik parametreleri keşfedin
Bu genel uç nokta kimlik doğrulaması gerektirmez ve faturalandırılmaz; herkese açık tüm zincirleri döndürür:
GET /v1/chainsÖrnek yanıt:
{
"chains": [
{
"chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
"jsonrpc": true,
"data": true,
"methods": {
"allow": ["eth_blockNumber", "eth_call", "eth_chainId", "debug_traceTransaction"],
"deny": ["eth_newFilter", "eth_newBlockFilter", "eth_newPendingTransactionFilter", "eth_getFilterLogs", "eth_getFilterChanges", "eth_uninstallFilter", "eth_subscribe", "eth_unsubscribe"]
},
"max_logs_block_range": 1000,
"state_window_blocks": 900
}
]
}Alan referansı:
chain: Zincir tanımlayıcı slug'ı (URL'lerde{chain}için kullanılır)name: İnsan tarafından okunabilir görünen adchain_id: EIP-155 zincir kimliği (ondalık tamsayı)jsonrpc: JSON-RPC'nin etkin olup olmadığıdata: Data API'nin etkin olup olmadığımethods:allow(izin verilen yöntemler) vedeny(açıkça reddedilen yöntemler) dahil olmak üzere zincir için JSON-RPC yöntem politikasımax_logs_block_range: Tek bireth_getLogsisteğinde izin verilen maksimum blok aralığıstate_window_blocks: Blok cinsinden geçmiş durum penceresi boyutu; kısıtlama olmadığındanull
GET /v1/status ile operasyonel durumu kontrol edin
Bu genel uç nokta kimlik doğrulaması gerektirmez ve faturalandırılmaz; hizmet hazırlığını ve zincir ucu bilgilerini döndürür:
GET /v1/statusÖrnek yanıt:
{
"checked_at": "2026-09-28T12:00:00Z",
"gateway": {
"status": "ok"
},
"chains": [
{
"chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
"jsonrpc": true,
"data": true,
"data_features": ["blocks", "transactions", "address_transactions", "transfers", "token_metadata", "freshness"],
"status": "ok",
"head": {
"block": 73017329,
"time": "2026-09-28T11:59:58Z",
"lag_seconds": 2
}
}
]
}Alan referansı:
gateway.status: Hizmet durumu (okveyadegraded)chains[].data_features: Bu zincir için Data API tarafından sağlanan yeteneklerchains[].status: Düğüm operasyonel durumu (okveyaunavailable)chains[].head: En son blok ucu (block,time,lag_seconds)
4. Akılda tutulması gereken zincir bazlı farklılıklar
Zincirler arasında geçiş yaparken GET /v1/chains tarafından sağlanan alanları inceleyin:
- Yöntem izni ve politikası (
methods.allow/methods.deny): Kullanılabilir JSON-RPC yöntemleri, yöntem politikalarına göre ağa bağlı olarak değişir. İzin verilmeyen bir yöntemin istenmesi, JSON-RPC hata kodu-32601(method not available, faturalandırılmaz) ile HTTP 200 döndürür. - Log blok aralığı (
max_logs_block_range):eth_getLogssorguları için maksimum blok aralıkları zincire göre farklılık gösterir. Zincirin sınırını aşmak, JSON-RPC hata kodu-32602(eth_getLogs block range too large, faturalandırılmaz) ile HTTP 200 döndürür. - Durum saklama penceresi (
state_window_blocks): Tam geçmişe sahip zincirlernulldöndürür. Durum budaması olan zincirlerde, pencerenin dışındaki geçmiş durum sorguları JSON-RPC hata kodu-32011(historical state is not available beyond the most recent <N> blocks, faturalandırılmaz) ile HTTP 200 döndürür. - Data API özellikleri ve kapsamı (
data/data_features): Bir veri kümesi sağlayan zincirler Desteklenen Zincirler sayfasında listelenmiştir. Bir zincirin desteklemediği bir veri kümesini veya indekslenmiş kapsamından önceki bir bloğu sorgulamak, HTTP422(error.codeno_coverage, faturalandırılmaz) döndürür. Hizmet geçici olarak kullanılamadığında (örneğin bir zincir meşgul olduğunda), istekler birRetry-Afterbaşlığı ile HTTP503döndürür (faturalandırılmaz).
5. Kod örnekleri
Eksiksiz başlangıç şablonu: blockvectra/multichain-viem
Zincir değişkenini güncelleyerek (veya GET /v1/chains üzerinden okuyarak), JSON-RPC aracılığıyla eth_blockNumber ve Data API aracılığıyla veri kümesi güncelliğini sorgulayarak tamamen aynı kod farklı zincirlerde çalışır:
export BLOCKVECTRA_API_KEY="rgw_your_api_key"
# Desteklenen Zincirler arasından başka bir zinciri hedeflemek için chain değişkenini değiştirin
CHAIN="robinhood_mainnet"
# 1. JSON-RPC: eth_blockNumber sorgulayın (POST /v1/{chain}, anahtar x-api-key başlığında).
RPC_URL="https://api.blockvectra.com/v1/$CHAIN"
curl -s "$RPC_URL" \
-H "Content-Type: application/json" \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
# 2. Data API: Veri kümesi güncelliğini sorgulayın (GET /v1/data/{chain}/status/freshness)
curl -s "https://api.blockvectra.com/v1/data/$CHAIN/status/freshness" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Örnek yanıtlar
JSON-RPC eth_blockNumber başarılı yanıtı (yöntemin CU ağırlığından faturalandırılır):
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x45a27f1"
}Data API GET /v1/data/{chain}/status/freshness başarılı yanıtı (CU cinsinden faturalandırılır, yalnızca 2xx başarılı yanıtlar faturalandırılır):
{
"data": [
{
"dataset": "blocks",
"category": "raw",
"max_block_number": 72313256,
"max_day": null,
"max_time": "2026-09-28T03:41:07Z",
"seconds_behind": 0,
"blocks_behind": null,
"days_behind": null,
"checked_at": "2026-09-28T03:41:10Z"
},
{
"dataset": "traces",
"category": "raw",
"max_block_number": 72313256,
"max_day": null,
"max_time": "2026-09-28T03:41:07Z",
"seconds_behind": 0,
"blocks_behind": null,
"days_behind": null,
"coverage_from_block": 72050949,
"coverage_to_block": 72313256,
"coverage_complete": true,
"checked_at": "2026-09-28T03:41:10Z"
},
{
"dataset": "dex_prices",
"category": "derived",
"max_block_number": null,
"max_day": "2026-09-27",
"max_time": "2026-09-27T00:00:00Z",
"seconds_behind": 99667,
"blocks_behind": null,
"days_behind": 1,
"checked_at": "2026-09-28T03:41:10Z"
}
],
"meta": {
"chain": "robinhood_mainnet",
"chain_slug": "ROBINHOOD_MAINNET",
"chain_external_id": "eip155:4663",
"as_of_block": 72313256,
"safe_block": 72313100,
"finalized_block": 72313000,
"coverage": "full",
"refreshed_at": "2026-09-28T03:41:10Z"
}
}Sonraki adımlar
Son güncelleme:
Logs ile Transfers API karşılaştırması
Sözleşme olay logları için eth_getLogs'u veya indekslenmiş ERC-20 transfer geçmişi için Token Transfers API'yi seçin. Blok aralıklarını, sayfalamayı, kapsamı ve kesinliği karşılaştırın.
Programatik kayıt
AI Agent'lar, betikler ve CI iş akışları için bir tarayıcı olmadan Ethereum cüzdan imzası (EIP-191) kullanarak programatik olarak kaydolun ve bir API anahtarı oluşturun.