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).

HizmetKimlik DoğrulamaURL şablonuAçıklama
JSON-RPCURL yolunda anahtarPOST /v1/{chain}/{api_key}En basit biçim, curl ve HTTP istemcileri için uygundur
JSON-RPCİstek başlığında anahtarPOST /v1/{chain}Anahtarı x-api-key: {api_key} istek başlığıyla iletin
Data APIREST rotalarıGET /v1/data/{chain}/…Anahtarı x-api-key: {api_key} istek başlığıyla iletin
Genel zincir listesiKimlik doğrulamasızGET /v1/chainsGenel zincir listesi ve statik parametreler (faturalandırılmaz)
Genel durumKimlik doğrulamasızGET /v1/statusMevcut 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 istekler error.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 ad
  • chain_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) ve deny (açıkça reddedilen yöntemler) dahil olmak üzere zincir için JSON-RPC yöntem politikası
  • max_logs_block_range: Tek bir eth_getLogs isteğinde izin verilen maksimum blok aralığı
  • state_window_blocks: Blok cinsinden geçmiş durum penceresi boyutu; kısıtlama olmadığında null

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 (ok veya degraded)
  • chains[].data_features: Bu zincir için Data API tarafından sağlanan yetenekler
  • chains[].status: Düğüm operasyonel durumu (ok veya unavailable)
  • 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:

  1. 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.
  2. Log blok aralığı (max_logs_block_range): eth_getLogs sorguları 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.
  3. Durum saklama penceresi (state_window_blocks): Tam geçmişe sahip zincirler null dö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.
  4. 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, HTTP 422 (error.code no_coverage, faturalandırılmaz) döndürür. Hizmet geçici olarak kullanılamadığında (örneğin bir zincir meşgul olduğunda), istekler bir Retry-After başlığı ile HTTP 503 dö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:

Bu sayfada