Simulasi transaksi sebelum dikirim dengan eth_simulateV1

Simulasikan beberapa transaksi dan periksa perubahan state sebelum mengirimnya on-chain menggunakan eth_simulateV1. Pelajari kebijakan metode chain yang didukung, payload permintaan sesuai spesifikasi eksekusi, bobot harga CU, dan integrasi MCP untuk AI Agent.

Sebelum menyiarkan transaksi ke jaringan blockchain, simulasi memungkinkan pengembang memeriksa hasil eksekusi, memverifikasi transisi state kontrak, dan mengamati log peristiwa terlebih dahulu, sehingga menghindari biaya gas yang tidak perlu akibat revert kontrak.

Lapisan eksekusi Ethereum menyediakan beberapa cara untuk mengevaluasi transaksi sebelum dikirim:

  • eth_call: Mengeksekusi satu panggilan pesan hanya-baca tanpa mempertahankan state di antara panggilan berturut-turut.
  • eth_estimateGas: Menghitung batas gas yang diperlukan untuk eksekusi, tetapi tidak menyediakan transisi state berurutan untuk beberapa transaksi atau log peristiwa lengkap.
  • eth_simulateV1: Didefinisikan dalam spesifikasi standar Ethereum Execution APIs, metode ini memungkinkan simulasi berurutan beberapa transaksi lintas blok, mengakumulasi perubahan state antartransaksi, dan mendukung penggantian parameter blok serta state akun.

Chain yang didukung dan kebijakan metode

Kemampuan jaringan dipublikasikan secara dinamis melalui GET /v1/chains. Baca methods.allow dari respons tersebut untuk melihat chain mana yang mengizinkan eth_simulateV1; chain yang tidak mencantumkannya menolak panggilan dengan error JSON-RPC -32601 (method not available, tidak ditagih).

Kondisi state node

eth_simulateV1 adalah metode kueri state:

  • Pemeriksaan sinkronisasi (-32010): Ketika node chain tujuan sedang melakukan sinkronisasi dan belum siap, panggilan mengembalikan -32010 (node is syncing, tidak ditagih).
  • Jendela state (-32011): Pada Robinhood Chain, permintaan yang menargetkan blok lebih lama dari state_window_blocks chain (GET /v1/chains), atau menentukan tag blok safe, finalized, atau earliest, mengembalikan -32011 (tidak ditagih). Tag blok default adalah latest.

Struktur permintaan dan contoh dasar

Menurut spesifikasi lapisan eksekusi (definisi Ethereum Execution APIs eth_simulateV1), eth_simulateV1 menerima dua parameter posisional:

  1. Objek payload:
    • blockStateCalls (array wajib): Array objek blok simulasi. Setiap objek berisi array panggilan transaksi calls, penggantian header blok opsional blockOverrides, dan penggantian state akun opsional stateOverrides.
    • validation (boolean opsional, default false): Saat false, berperilaku seperti eth_call; saat true, menjalankan semua validasi EVM kecuali pemeriksaan tanda tangan.
    • traceTransfers (boolean opsional): Saat true, mengembalikan log peristiwa untuk transfer token native.
  2. Tag blok (string opsional, default 'latest'): Nomor blok, hash blok, atau tag blok.

Contoh dasar: simulasi transfer ERC-20

Contoh berikut menyimulasikan panggilan ERC-20 transfer(address,uint256) pada Robinhood Chain. Ganti $BLOCKVECTRA_API_KEY dengan API key Anda yang sebenarnya:

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

Memeriksa struktur respons

Dalam spesifikasi eksekusi Ethereum, bidang result berisi array hasil blok simulasi dengan skema berikut:

Bidang tingkat blok

  • number: Nomor blok simulasi (string heksadesimal).
  • hash: Hash blok simulasi (string heksadesimal 32 byte).
  • parentHash: Hash blok induk.
  • timestamp: Waktu blok (string heksadesimal).
  • gasLimit: Batas gas blok.
  • gasUsed: Total gas yang digunakan semua panggilan simulasi dalam blok ini.
  • baseFeePerGas: Biaya dasar per gas untuk blok.
  • miner: Alamat coinbase yang menerima biaya blok.
  • calls: Array hasil eksekusi untuk setiap panggilan simulasi.

Bidang tingkat panggilan (elemen array calls)

  • status: Status panggilan sebagai string heksadesimal. 0x1 menunjukkan keberhasilan, sedangkan 0x0 menunjukkan kegagalan atau revert.
  • gasUsed: Gas aktual yang digunakan panggilan ini (string heksadesimal).
  • maxUsedGas (opsional): Penggunaan gas puncak selama eksekusi sebelum pengembalian gas.
  • returnData: Data kembalian berkode heksadesimal. Pada transfer ERC-20 yang berhasil, berisi boolean true; saat revert, berisi selector error atau data revert.
  • logs: Array log peristiwa yang diterbitkan oleh panggilan. Jika berhasil, berisi log peristiwa seperti Transfer:
    • address: Alamat kontrak yang menerbitkan peristiwa.
    • topics: Array hash topic 32 byte (topics[0] adalah hash tanda tangan peristiwa, seperti tanda tangan peristiwa Transfer).
    • data: Data peristiwa yang tidak diindeks, berkode heksadesimal.
    • blockNumber, blockHash, transactionHash, transactionIndex, logIndex, removed.
  • error (ada saat gagal): Objek berisi code (3 untuk revert, -32015 untuk error VM) dan message (seperti execution reverted).

Harga dan bobot CU

BlockVectra mengukur konsumsi dalam Compute Units (CU). Bobot setiap metode JSON-RPC dipublikasikan secara dinamis oleh GET /v1/plans:

Bobot CU per panggilan

MetodeCU per panggilan
eth_simulateV120
eth_call15
eth_estimateGas20

Untuk rumus konversi unit dan detail top up, kunjungi halaman Harga.

Permintaan yang ditolak — termasuk node yang sedang sinkronisasi (-32010), di luar jendela state (-32011), atau metode yang tidak tersedia (-32601) — tidak ditagih. Lihat Permintaan mana yang gratis untuk aturan penagihan lengkap.

Penggunaan dengan AI Agent dan MCP

AI Agent otonom dapat memanggil eth_simulateV1 secara langsung melalui server Model Context Protocol (MCP) BlockVectra.

Alat rpc_call dengan API key memungkinkan eksekusi metode JSON-RPC pada chain yang didukung. API key harus dikonfigurasi dalam header HTTP klien MCP (x-api-key: {api_key} atau Authorization: Bearer {api_key}), jangan pernah dikirim dalam parameter alat atau prompt percakapan.

Contoh payload pemanggilan alat rpc_call pada Robinhood Chain:

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

Agent dapat memeriksa status === "0x1" untuk memverifikasi validitas interaksi kontrak dan menilai konsumsi gas sebelum mengirim transaksi mentah. Untuk petunjuk pengaturan dan penggunaan, lihat panduan integrasi AI Agent.

Langkah berikutnya

Terakhir diperbarui:

Di halaman ini