按月自动发放重置机会,余额用完可一键补回到 3,000 万 CU。了解详情 →

发送前先模拟:用 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_simulateV1robinhood_mainnetRobinhood Chain4663多交易连续执行与状态覆盖预演
eth_callrobinhood_mainnet
eth_mainnet
bsc_mainnet
hyperevm_mainnet
Robinhood Chain
Ethereum
BNB Smart Chain
HyperEVM
4663
1
56
999
单次只读消息调用
eth_estimateGasrobinhood_mainnet
eth_mainnet
bsc_mainnet
hyperevm_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 的入参包含两个位置参数:

  1. Payload 对象:
    • blockStateCalls(必填数组):模拟区块列表。每个区块包含待执行的交易调用数组 calls,以及可选的区块参数覆盖 blockOverrides 与账户状态覆盖 stateOverrides。
    • validation(可选布尔值,默认 false):为 false 时基础费为零且跳过严格账户余额校验;为 true 时执行完整 EVM 校验(如 nonce 与余额检查)。
    • traceTransfers(可选布尔值):为 true 时生成原生代币转账事件日志。
  2. 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_simulateV120
eth_call15
eth_estimateGas20

以上权重在构建时从平台计划接口读取。

有关计费单位换算公式与账户充值说明,请参阅官网定价页面。

因节点未就绪返回 -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 集成指南。

下一步

最后更新:

本页目录