送信前のシミュレーション:eth_simulateV1 によるトランザクションの事前実行
eth_simulateV1 を使用して、オンチェーンに送信する前に複数のトランザクションを事前実行し、状態変更を検査します。サポートされるチェーンのメソッドポリシー、実行仕様のリクエストペイロード、CU 課金重み付け、および AI エージェント MCP 統合について説明します。
ブロックチェーンネットワークにトランザクションをブロードキャストする前に事前実行(ドライラン)を行うことで、開発者は実行結果の検査、コントラクトの状態遷移の検証、イベントログの事前確認が可能になり、コントラクトのリバートによる不要なガス代の発生を防ぐことができます。
Ethereum の実行レイヤーは、送信前にトランザクションを評価するいくつかの方法を提供しています:
eth_call:連続した呼び出し間で状態を永続化することなく、単一の読み取り専用メッセージ呼び出しを実行します。eth_estimateGas:実行に必要なガスリミットを計算しますが、複数トランザクションの順次状態遷移や完全なイベントログは提供しません。eth_simulateV1:Ethereum Execution APIs 標準仕様で定義されているこのメソッドは、ブロックをまたぐ複数トランザクションの順次シミュレーションを可能にし、トランザクション間の状態変化を蓄積し、ブロックパラメータやアカウント状態のオーバーライドをサポートします。
サポートされているチェーンとメソッドポリシー
ネットワーク機能は GET /v1/chains を介して動的に公開されます。その応答の methods.allow を読み取り、どのチェーンが eth_simulateV1 を許可しているかを確認してください。リストに記載されていないチェーンは、JSON-RPC エラー -32601(method not available、課金なし)で呼び出しを拒否します。
ノードの状態条件
eth_simulateV1 は状態クエリメソッドです:
- 同期ゲート(
-32010):対象チェーンのノードが同期中であり、まだ準備が整っていない場合、呼び出しは-32010(node is syncing、課金なし)を返します。 - 状態ウィンドウ(
-32011):Robinhood Chain では、チェーンのstate_window_blocks(GET /v1/chains)より古いブロックを対象とするリクエスト、またはsafe、finalized、earliestブロックタグを指定するリクエストは-32011(課金なし)を返します。デフォルトのブロックタグはlatestです。
リクエスト構造と基本的な例
実行レイヤー仕様(Ethereum Execution APIs eth_simulateV1 の定義)に従い、eth_simulateV1 は 2 つの位置パラメータを受け入れます:
- ペイロードオブジェクト:
blockStateCalls(必須配列):シミュレートされるブロックオブジェクトの配列。各オブジェクトには、トランザクション呼び出しの配列calls、オプションのブロックヘッダーオーバーライドblockOverrides、およびオプションのアカウント状態オーバーライドstateOverridesが含まれます。validation(オプションのブール値、デフォルトはfalse):falseの場合、eth_callと同様に動作します。trueの場合、署名チェックを除くすべての EVM 検証を実行します。traceTransfers(オプションのブール値):trueの場合、ネイティブトークン転送のイベントログを返します。
- ブロックタグ(オプションの文字列、デフォルトは
'latest'):ブロック番号、ブロックハッシュ、またはブロックタグ。
基本的な例:ERC-20 転送の事前実行
以下の例は、Robinhood Chain で ERC-20 の transfer(address,uint256) 呼び出しを事前実行します。$BLOCKVECTRA_API_KEY を実際の API key に置き換えてください:
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"
]
}'レスポンス構造の検査
Ethereum の実行仕様に基づき、result フィールドには以下のスキーマを持つシミュレートされたブロック結果の配列が含まれます:
ブロックレベルのフィールド
number:シミュレートされたブロックのブロック番号(16 進文字列)。hash:シミュレートされたブロックハッシュ(32 バイトの 16 進文字列)。parentHash:親ブロックのハッシュ。timestamp:ブロックのタイムスタンプ(16 進文字列)。gasLimit:ブロックのガスリミット。gasUsed:このブロック内のすべてのシミュレートされた呼び出しで消費された合計ガス量。baseFeePerGas:ブロックの gas あたりの基本手数料。miner:ブロック手数料を受け取る Coinbase アドレス。calls:シミュレートされた各呼び出しの実行結果の配列。
呼び出しレベルのフィールド(calls 配列項目)
status:16 進文字列としての呼び出しステータス。0x1は成功を示し、0x0は失敗またはリバートを示します。gasUsed:この呼び出しで実際に消費されたガス量(16 進文字列)。maxUsedGas(オプション):払い戻し前に実行中に使用されたピークガス量。returnData:16 進エンコードされた戻りデータ。成功した ERC-20 転送の場合、ブール値のtrueが含まれます。リバート時はエラーセレクターまたはリバートデータが含まれます。logs:呼び出しによって発行されたイベントログの配列。成功した場合、Transferなどのイベントログが含まれます:address:イベントを発行したコントラクトアドレス。topics:32 バイトのトピックハッシュの配列(topics[0]はTransferイベントシグネチャなどのイベントシグネチャハッシュ)。data:16 進エンコードされたインデックスなしのイベントデータ。blockNumber、blockHash、transactionHash、transactionIndex、logIndex、removed。
error(失敗時に存在):code(リバートの場合は3、VM エラーの場合は-32015)およびmessage(execution revertedなど)を含むオブジェクト。
価格と CU 重み付け
BlockVectra は消費量を Compute Unit(CU)で計測します。各 JSON-RPC メソッドの重み付けは GET /v1/plans によって動的に公開されます:
呼び出しあたりの CU 重み付け
| メソッド | 呼び出しあたりの CU |
|---|---|
eth_simulateV1 | 20 |
eth_call | 15 |
eth_estimateGas | 20 |
単位換算式やチャージの詳細については、料金ページ をご覧ください。
ノード同期中(-32010)、状態ウィンドウ外(-32011)、メソッド利用不可(-32601)など、拒否されたリクエストは課金されません。完全な課金ルールについては、課金されないリクエスト:エラーコードと課金ルール を参照してください。
AI エージェントおよび MCP での使用
自律型 AI エージェントは、BlockVectra の Model Context Protocol(MCP)サーバーを介して eth_simulateV1 を直接呼び出すことができます。
キー付きの rpc_call ツールを使用すると、サポートされているチェーンで JSON-RPC メソッドを実行できます。API key は MCP クライアントの HTTP ヘッダー(x-api-key: {api_key} または Authorization: Bearer {api_key})で設定する必要があり、ツールのパラメータや会話プロンプトの中に渡してはなりません。
Robinhood Chain での rpc_call ツール呼び出しペイロードの例:
{
"chain": "robinhood_mainnet",
"method": "eth_simulateV1",
"params": [
{
"blockStateCalls": [
{
"calls": [
{
"from": "0x1111111111111111111111111111111111111111",
"to": "0x2222222222222222222222222222222222222222",
"data": "0xa9059cbb00000000000000000000000033333333333333333333333333333333333333330000000000000000000000000000000000000000000000000de0b6b3a7640000",
"value": "0x0"
}
]
}
]
},
"latest"
]
}エージェントは、未加工のトランザクションを送信する前に status === "0x1" を確認してコントラクト操作の有効性を検証し、ガス消費量を評価できます。セットアップと使用方法の手順については、AI エージェント統合ガイド を参照してください。
次のステップ
- 無料プランと料金 で、アカウントに含まれる内容を確認できます。
- コンソールにログイン して、API key を作成してください。
最終更新: