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 daristate_window_blockschain (GET /v1/chains), atau menentukan tag bloksafe,finalized, atauearliest, mengembalikan-32011(tidak ditagih). Tag blok default adalahlatest.
Struktur permintaan dan contoh dasar
Menurut spesifikasi lapisan eksekusi (definisi Ethereum Execution APIs eth_simulateV1), eth_simulateV1 menerima dua parameter posisional:
- Objek payload:
blockStateCalls(array wajib): Array objek blok simulasi. Setiap objek berisi array panggilan transaksicalls, penggantian header blok opsionalblockOverrides, dan penggantian state akun opsionalstateOverrides.validation(boolean opsional, defaultfalse): Saatfalse, berperilaku sepertieth_call; saattrue, menjalankan semua validasi EVM kecuali pemeriksaan tanda tangan.traceTransfers(boolean opsional): Saattrue, mengembalikan log peristiwa untuk transfer token native.
- 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.0x1menunjukkan keberhasilan, sedangkan0x0menunjukkan 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 booleantrue; saat revert, berisi selector error atau data revert.logs: Array log peristiwa yang diterbitkan oleh panggilan. Jika berhasil, berisi log peristiwa sepertiTransfer:address: Alamat kontrak yang menerbitkan peristiwa.topics: Array hash topic 32 byte (topics[0]adalah hash tanda tangan peristiwa, seperti tanda tangan peristiwaTransfer).data: Data peristiwa yang tidak diindeks, berkode heksadesimal.blockNumber,blockHash,transactionHash,transactionIndex,logIndex,removed.
error(ada saat gagal): Objek berisicode(3untuk revert,-32015untuk error VM) danmessage(sepertiexecution 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
| Metode | CU per panggilan |
|---|---|
eth_simulateV1 | 20 |
eth_call | 15 |
eth_estimateGas | 20 |
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
- Lihat paket gratis dan harga untuk memeriksa apa saja yang tercakup dalam akun Anda.
- Masuk ke konsol untuk membuat API key.
Terakhir diperbarui:
Panduan awal Robinhood Chain Testnet
Mulai menggunakan RPC Robinhood Chain Testnet: URL RPC publik, pembacaan tanpa API key, log WebSocket dengan API key, akses faucet, dan penggunaan API key yang sama di mainnet.
Pembayaran Stablecoin
Bangun penerima pembayaran dan kursor polling. Verifikasi kontrak token, penerima, dan jumlah bilangan bulat, deduplikasi peristiwa, serta rekonsiliasi blok yang hilang atau diganti.