发送前先模拟:用 eth_simulateV1 预演交易
在交易广播上链前使用 eth_simulateV1 预演多笔交易与状态变化。了解各链方法策略、执行层请求结构、CU 权重以及在 AI Agent MCP 工具中的调用方式。
在向区块链网络发送真实交易前,预演交易能够提前检验执行结果、确认合约状态变化与事件日志,避免因执行失败(revert)浪费链上 Gas 费用。
以太坊执行层提供了多种评估交易执行的方法:
eth_call:执行单次只读合约调用,不产生跨调用的状态累积。eth_estimateGas:估算交易执行所需的 Gas 上限,但不提供跨区块或多笔交易的连续状态演进与事件日志详情。eth_simulateV1:以太坊执行层标准规范中定义的模拟方法,允许按顺序预演多笔交易,模拟跨交易状态累积,并支持覆盖区块参数与账户状态。
支持情况与方法策略
BlockVectra 的各网络能力通过公开端点 GET /v1/chains 动态发布。在 Robinhood Chain 上,方法策略(methods.allow)开放了 eth_simulateV1(链标识符为 robinhood_mainnet,EIP-155 链 ID 为 4663)。
未在 methods.allow 中开放该方法的链,调用时将返回 JSON-RPC 错误码 -32601(method not available,不计费)。只读调用 eth_call 与 Gas 估算 eth_estimateGas 则在当前四条网络上均已开放。
以下为依据 GET /v1/chains 策略整理的方法支持情况:
| JSON-RPC 方法 | 允许该方法的链 (chain) | 链名称 | EIP-155 链 ID | 说明 |
|---|---|---|---|---|
eth_simulateV1 | robinhood_mainnet | Robinhood Chain | 4663 | 多交易连续执行与状态覆盖预演 |
eth_call | robinhood_mainneteth_mainnetbsc_mainnethyperevm_mainnet | Robinhood Chain Ethereum BNB Smart Chain HyperEVM | 4663 1 56 999 | 单次只读消息调用 |
eth_estimateGas | robinhood_mainneteth_mainnetbsc_mainnethyperevm_mainnet | Robinhood Chain Ethereum BNB Smart Chain HyperEVM | 4663 1 56 999 | 估算交易所需 Gas 上限 |
节点状态守卫
依据平台公开规范,eth_simulateV1 属于状态查询方法,受以下节点守卫约束:
- 节点同步门(
-32010):当目标链的节点处于同步状态未就绪时,返回-32010(node is syncing),调用不转发且不计费。 - 历史状态窗口(
-32011):在 Robinhood Chain 上,状态窗口为 900 个区块(state_window_blocks: 900)。若目标区块早于保留窗口,或使用safe、finalized、earliest标签,返回-32011,不计费。目标区块标签缺省时默认为latest。
请求结构与基础示例
依据以太坊执行层规范(Ethereum Execution APIs eth_simulateV1 定义),eth_simulateV1 的入参包含两个位置参数:
- Payload 对象:
blockStateCalls(必填数组):模拟区块列表。每个区块包含待执行的交易调用数组calls,以及可选的区块参数覆盖blockOverrides与账户状态覆盖stateOverrides。validation(可选布尔值,默认false):为false时基础费为零且跳过严格账户余额校验;为true时执行完整 EVM 校验(如 nonce 与余额检查)。traceTransfers(可选布尔值):为true时生成原生代币转账事件日志。
- Block tag(可选字符串,默认
'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"
]
}'响应结构说明
依据以太坊执行层规范,响应体中的 result 为区块级预演结果数组,按规范字段定义如下:
区块级字段
number:模拟生成的区块高度(十六进制字符串)。hash:模拟区块哈希(32 字节十六进制字符串)。parentHash:父区块哈希。timestamp:区块时间戳(十六进制字符串)。gasLimit:区块 Gas 上限。gasUsed:该模拟区块内所有调用消耗的总 Gas。baseFeePerGas:该区块的基础费率。feeRecipient:出块费用接收地址。calls:该区块内各笔调用的执行结果数组。
调用级字段(calls 数组项)
status:调用状态,十六进制字符串。0x1表示执行成功,0x0表示执行失败或发生 revert。gasUsed:该笔调用实际消耗的 Gas 数量(十六进制字符串)。maxUsedGas(可选):执行过程中在退款前的 Gas 消耗峰值。returnData:合约返回的十六进制字节串。转账成功时包含标准 ERC-20 返回的布尔值数据;发生 revert 时包含错误信息或自定义错误选择器。logs:执行成功时生成的事件日志数组。每个日志对象包含:address:触发事件的合约地址。topics:主题哈希数组(topics[0]为事件签名哈希,如Transfer事件签名)。data:非索引事件数据(十六进制字节串)。blockNumber、blockHash、transactionHash、transactionIndex、logIndex、removed。
error(调用失败时返回):包含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 Agent 与 MCP 中使用
自主 AI Agent 可通过 BlockVectra 官方 Model Context Protocol(MCP)服务直接调用 eth_simulateV1。
在 MCP 工具集中,带鉴权的 rpc_call 工具支持执行受支持链的 JSON-RPC 方法。API key 通过 MCP 客户端 HTTP 请求头(x-api-key: {api_key} 或 Authorization: Bearer {api_key})安全注入,严禁在工具参数或提示词中明文传入 key。
在 Robinhood Chain 上通过 rpc_call 发起 eth_simulateV1 的入参示例如下:
{
"chain": "robinhood_mainnet",
"method": "eth_simulateV1",
"params": [
{
"blockStateCalls": [
{
"calls": [
{
"from": "0x1111111111111111111111111111111111111111",
"to": "0x2222222222222222222222222222222222222222",
"data": "0xa9059cbb00000000000000000000000033333333333333333333333333333333333333330000000000000000000000000000000000000000000000000de0b6b3a7640000",
"value": "0x0"
}
]
}
]
},
"latest"
]
}Agent 在发起资产转账、合约交互前可先调用此工具,根据返回中的 status 是否为 0x1 验证交易合法性与 Gas 消耗。完整的 MCP 接入流程与鉴权与使用说明,请参阅 AI Agent 集成指南。
下一步
最后更新: