Skip to main content
Tenderly 通过 RPC 和 API 支持单笔交易模拟。默认情况下,模拟基于所选网络的最新状态执行。Simulation API 也可以固定到某个历史区块及其中的位置(参见区块号与交易索引)。 Dapp 和钱包可以使用单笔模拟为其用户提供一种在动用真实资产之前干运行交易的方式。这为用户提供了交易执行的预览,并附带详细的余额和资产变化。交易预览 可以帮助用户建立对 dapp 的信任,仅批准会成功的交易,并防止代价高昂的失败。

通过 RPC 模拟

Node RPC 允许您读取区块链数据并发送交易。但您也可以在 Node 上模拟交易。通过 RPC 进行模拟的优势在于,您可以通过单个 RPC URL 执行所有这些操作。
通过 RPC 或 API 进行的模拟仅在受支持的网络上可用。查看受支持网络列表。
从 Dashboard 获取您的 RPC URL 和访问密钥。 前往 Node > Copy HTTPS URL 复制所需网络的 URL。
example
要通过 RPC 模拟一笔单独的交易,请调用 tenderly_simulateTransaction 方法。请参阅 RPC 参考。 示例
request

通过 API 模拟

使用 simulate API 端点以不同参数模拟一笔交易。
若要在 Virtual Environments 上使用模拟,我们推荐使用 Simulate RPC 和 Bundle Simulate RPC。 否则,您可以使用 Virtual Environments Simulation API。
URL 必须包含您的 account slug 和 project slug。请参照这份快速指南查找 slug。
Simulation API endpoint on public network
Simulation API endpoint on a Virtual Environment
您还需要获取 API 访问令牌,并将其随请求头一起发送。了解如何在此生成 API 访问密钥。

请求负载

向该 API 端点发送 POST 请求。有关请求负载的完整详情,请参阅 API 参考。 模拟负载类似于 eth_call JSON RPC 调用。 以下字段为必填项:
  • network_id(string):您希望在其上运行模拟的网络 ID。
  • to(string):交易的接收方地址。
  • from(string):发起交易的地址。
  • input(string):编码后的合约方法调用数据。
  • gas(number):为模拟提供的 gas 数量。
您可以在 from 字段中指定任意发送方地址。由于 Tenderly 模拟的是未签名的交易,您无需 拥有该账户的私钥即可模拟来自特定发送方的交易。
您还可以指定 simulation_type,可选值为 full、quick 或 ABI。该字段不是必填项,因为默认值为 full。了解更多关于模拟模式的信息。

区块号与交易索引

block_number 和 transaction_index 决定交易在哪个状态上执行。两者均为可选的整数。 校验规则:
  • block_number 必须是整数。"latest"、"pending" 等区块标签会被拒绝,返回 400 Bad request input parameters。
  • transaction_index 需要显式指定 block_number。省略区块时,非零索引会被拒绝,返回 400 Transaction index is not allowed when block number is pending。
  • 索引大于区块交易数量时失败,错误为 transaction index too high: invalid transaction simulation。索引不会被自动截断,也没有表示区块末尾的关键字。
要在最新区块执行后的状态上进行模拟,请先读取该区块,并将其交易数量作为索引传入:
最新区块执行后的状态
Simulator UI 中的 Tx Index 控件使用同样的字段:At start of block 对应索引 0,At tx 对应所选索引,At end of block 对应区块的交易数量。 发起 API 请求时,请添加 X-Access-Key 请求头,其值为访问令牌。 示例 请务必将访问密钥安全地存储在 .env 文件中。
request.ts

探索使用场景

  • 预览交易结果:识别并修复可能导致交易失败的问题。
  • 资产与余额变化:获取即将发生的所有余额与资产变化的确切美元价值。
  • Gas 估算:在发送交易之前准确预测 gas 费用。
  • 状态覆盖:修改时间戳、合约数据等区块链状态,以测试不同的场景。

后续内容

捆绑模拟

通过 SDK 模拟