Göndermeden önce simüle edin: eth_simulateV1 ile işlemleri test çalıştırması (dry-run)

eth_simulateV1 kullanarak zincir üzerinde göndermeden önce birden fazla işlemi test edin ve durum değişikliklerini inceleyin. Desteklenen zincir yöntemi politikalarını, yürütme belirtimi istek yüklerini, CU fiyatlandırma ağırlıklarını ve AI Agent MCP entegrasyonunu öğrenin.

İşlemleri bir blokzincir ağına yayınlamadan önce test çalıştırması (dry-run) yapmak, geliştiricilerin yürütme sonuçlarını incelemesine, sözleşme durum geçişlerini doğrulamasına ve olay log'larını önceden gözlemlemesine olanak tanıyarak sözleşme iptallerinin (revert) neden olduğu gereksiz gas ücretlerini önler.

Ethereum yürütme katmanı, işlemleri göndermeden önce değerlendirmek için çeşitli yollar sunar:

  • eth_call: Ardışık çağrılar arasında durum kalıcılığı olmadan tek bir salt okunur mesaj çağrısı yürütür.
  • eth_estimateGas: Yürütme için gereken gas limitini hesaplar, ancak çoklu işlem sıralı durum geçişleri veya tam olay log'ları sağlamaz.
  • eth_simulateV1: Ethereum Execution APIs standart belirtiminde tanımlanan bu yöntem, bloklar arasında birden fazla işlemin sıralı simülasyonuna izin verir, işlemler arasındaki durum değişikliklerini biriktirir ve blok parametreleri ile hesap durumunun geçersiz kılınmasını destekler.

Desteklenen zincirler ve yöntem politikası

Ağ yetenekleri GET /v1/chains aracılığıyla dinamik olarak yayınlanır. Hangi zincirlerin eth_simulateV1 yöntemine izin verdiğini görmek için bu yanıttan methods.allow alanını okuyun; bu yöntemin listelenmediği bir zincir, çağrıyı -32601 JSON-RPC hatasıyla (method not available, faturalandırılmaz) reddeder.

Düğüm durumu koşulları

eth_simulateV1 bir durum sorgulama yöntemidir:

  • Eşitleme geçidi (-32010): Hedef zincirin düğümü eşitleniyorsa ve henüz hazır değilse, çağrı -32010 (node is syncing, faturalandırılmaz) döndürür.
  • Durum penceresi (-32011): Robinhood Chain'de, zincirin state_window_blocks (GET /v1/chains) değerinden daha eski blokları hedefleyen veya safe, finalized ya da earliest blok etiketlerini belirten istekler -32011 döndürür (faturalandırılmaz). Varsayılan blok etiketi latest değeridir.

İstek yapısı ve temel örnek

Yürütme katmanı belirtimine göre (Ethereum Execution APIs eth_simulateV1 tanımı), eth_simulateV1 iki konumsal parametre kabul eder:

  1. Yük (payload) nesnesi:
    • blockStateCalls (zorunlu dizi): Simüle edilen blok nesnelerinden oluşan bir dizi. Her nesne bir işlem çağrıları dizisi calls, isteğe bağlı blok başlığı geçersiz kılmaları blockOverrides ve isteğe bağlı hesap durumu geçersiz kılmaları stateOverrides içerir.
    • validation (isteğe bağlı boolean, varsayılan false): false olduğunda eth_call gibi davranır; true olduğunda imza kontrolleri hariç tüm EVM doğrulamasını çalıştırır.
    • traceTransfers (isteğe bağlı boolean): true olduğunda yerel token transferleri için olay log'larını döndürür.
  2. Blok etiketi (isteğe bağlı dize, varsayılan 'latest'): Blok numarası, blok karması veya blok etiketi.

Temel örnek: bir ERC-20 transferini test çalıştırma

Aşağıdaki örnek, Robinhood Chain üzerinde bir ERC-20 transfer(address,uint256) çağrısını test amaçlı simüle eder. $BLOCKVECTRA_API_KEY değerini gerçek API key'inizle değiştirin:

export BLOCKVECTRA_API_KEY=rgw_your_api_key

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": "eth_simulateV1",
    "params": [
      {
        "blockStateCalls": [
          {
            "calls": [
              {
                "from": "0x1111111111111111111111111111111111111111",
                "to": "0x2222222222222222222222222222222222222222",
                "data": "0xa9059cbb00000000000000000000000033333333333333333333333333333333333333330000000000000000000000000000000000000000000000000de0b6b3a7640000",
                "value": "0x0"
              }
            ]
          }
        ]
      },
      "latest"
    ]
  }'

Yanıt yapısını inceleme

Ethereum yürütme belirtimi uyarınca, result alanı aşağıdaki şemaya sahip simüle edilmiş blok sonuçları dizisi içerir:

Blok düzeyindeki alanlar

  • number: Simüle edilen bloğun blok numarası (onaltılık dize).
  • hash: Simüle edilen blok karması (32 baytlık onaltılık dize).
  • parentHash: Üst bloğun karması.
  • timestamp: Blok zaman damgası (onaltılık dize).
  • gasLimit: Blok gas limiti.
  • gasUsed: Bu bloktaki tüm simüle edilmiş çağrılarda tüketilen toplam gas.
  • baseFeePerGas: Blok için gas başına taban ücret.
  • miner: Blok ücretlerini alan coinbase adresi.
  • calls: Simüle edilen her çağrı için yürütme sonuçları dizisi.

Çağrı düzeyindeki alanlar (calls dizi öğeleri)

  • status: Onaltılık dize olarak çağrı durumu. 0x1 başarıyı, 0x0 ise başarısızlığı veya iptali gösterir.
  • gasUsed: Bu çağrı tarafından fiilen tüketilen gas (onaltılık dize).
  • maxUsedGas (isteğe bağlı): İadelerden önce yürütme sırasında kullanılan en yüksek gas miktarı.
  • returnData: Onaltılık kodlanmış dönüş verisi. Başarılı bir ERC-20 transferinde bu alan boolean true içerir; iptal durumunda hata seçicisini veya revert verisini içerir.
  • logs: Çağrı tarafından yayımlanan olay log'ları dizisi. Başarılı olduğunda Transfer gibi olay log'larını içerir:
    • address: Olayı yayımlayan sözleşme adresi.
    • topics: 32 baytlık topic karmaları dizisi (topics[0], Transfer olay imzası gibi olay imzasının karmasıdır).
    • data: Onaltılık kodlanmış indekslenmemiş olay verisi.
    • blockNumber, blockHash, transactionHash, transactionIndex, logIndex, removed.
  • error (başarısızlık durumunda bulunur): code (revert için 3, bir VM hatası için -32015) ve message (örneğin execution reverted) içeren bir nesne.

Fiyatlandırma ve CU ağırlıkları

BlockVectra, tüketimi Compute Unit (CU) cinsinden ölçer. Her JSON-RPC yönteminin ağırlığı GET /v1/plans tarafından dinamik olarak yayınlanır:

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

YöntemÇağrı başına CU
eth_simulateV120
eth_call15
eth_estimateGas20

Birim dönüştürme formülleri ve bakiye yükleme ayrıntıları için Fiyatlandırma sayfasını ziyaret edin.

Düğüm eşitlemesi (-32010), durum penceresi dışı (-32011) veya yöntemin kullanılamaması (-32601) dahil olmak üzere reddedilen istekler faturalandırılmaz. Eksiksiz faturalandırma kuralları için Hangi istekler ücretsizdir sayfasına bakın.

Yapay zeka ajanları (AI Agent) ve MCP ile kullanma

Otonom Yapay Zeka Ajanları (AI Agent), BlockVectra'nın Model Context Protocol (MCP) sunucusu aracılığıyla eth_simulateV1 yöntemini doğrudan çağırabilir.

Kimlik doğrulamalı rpc_call aracı, desteklenen zincirlerde JSON-RPC yöntemlerinin yürütülmesine olanak tanır. API key, MCP istemcisi HTTP başlıklarında (x-api-key: {api_key} veya Authorization: Bearer {api_key}) yapılandırılmalıdır; araç parametreleri veya konuşma istemleri içinde asla iletilmemelidir.

Robinhood Chain üzerinde örnek rpc_call aracı çağırma yükü:

{
  "chain": "robinhood_mainnet",
  "method": "eth_simulateV1",
  "params": [
    {
      "blockStateCalls": [
        {
          "calls": [
            {
              "from": "0x1111111111111111111111111111111111111111",
              "to": "0x2222222222222222222222222222222222222222",
              "data": "0xa9059cbb00000000000000000000000033333333333333333333333333333333333333330000000000000000000000000000000000000000000000000de0b6b3a7640000",
              "value": "0x0"
            }
          ]
        }
      ]
    },
    "latest"
  ]
}

Ajanlar, ham işlemleri göndermeden önce sözleşme etkileşiminin geçerliliğini doğrulamak ve gas tüketimini değerlendirmek için status === "0x1" kontrolü yapabilir. Kurulum ve kullanım talimatları için AI Agent entegrasyon rehberi sayfasına bakın.

Sonraki adımlar

Son güncelleme:

Bu sayfada