跳转到主要内容
Tenderly 通过 RPCAPI 支持单笔交易模拟。模拟基于所选网络的最新状态执行。 Dapp 和钱包可以使用单笔模拟为其用户提供一种在动用真实资产之前干运行交易的方式。这为用户提供了交易执行的预览,并附带详细的余额和资产变化。交易预览 可以帮助用户建立对 dapp 的信任,仅批准会成功的交易,并防止代价高昂的失败。

通过 RPC 模拟

Node RPC 允许您读取区块链数据并发送交易。但您也可以在 Node 上模拟交易。通过 RPC 进行模拟的优势在于,您可以通过单个 RPC URL 执行所有这些操作。
通过 RPC 或 API 进行的模拟仅在受支持的网络上可用。查看受支持网络列表。
Dashboard 获取您的 RPC URL 和访问密钥。 前往 Node > Copy HTTPS URL 复制所需网络的 URL。
example
https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY
要通过 RPC 模拟一笔单独的交易,请调用 tenderly_simulateTransaction 方法。请参阅 RPC 参考 示例
request
curl https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY \
  -X POST \
  -H "Content-Type: application/json" \
  -d \
  '{
    "id": 0,
    "jsonrpc": "2.0",
    "method": "tenderly_simulateTransaction",
    "params": [
      {
        "from": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
        "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
        "gas": "0x7a1200",
        "value": "0x0",
        "data": "0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b"
      },
      "0xfc497b"
    ]
  }'

通过 API 模拟

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

请求负载

向该 API 端点发送 POST 请求。有关请求负载的完整详情,请参阅 API 参考 模拟负载类似于 eth_call JSON RPC 调用。 以下字段为必填项:
  • network_id(string):您希望在其上运行模拟的网络 ID。
  • block_number(number):用于模拟的区块高度,或 “latest”。
  • to(string):交易的接收方地址。
  • from(string):发起交易的地址。
  • input(string):编码后的合约方法调用数据。
  • gas(number):为模拟提供的 gas 数量。
您可以在 from 字段中指定任意发送方地址。由于 Tenderly 模拟的是未签名的交易,您无需 拥有该账户的私钥即可模拟来自特定发送方的交易。
您还可以指定 simulation_type,可选值为 full、quick 或 ABI。该字段不是必填项,因为默认值为 full。了解更多关于模拟模式的信息。 发起 API 请求时,请添加 X-Access-Key 请求头,其值为访问令牌。 示例 请务必将访问密钥安全地存储在 .env 文件中。
request.ts

dotenv.config();

const simulateTransaction = async () => {
  const { TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG, TENDERLY_ACCESS_KEY } = process.env;

  const simulation = await axios.post(
    `https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate`,
    {
      network_id: '1',
      block_number: 16533883,
      from: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
      to: '0x6b175474e89094c44da98b954eedeac495271d0f',
      gas: 8000000,
      gas_price: 0,
      value: 0,
      input: '0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b',
      simulation_type: 'quick',
    },
    {
      headers: {
        'X-Access-Key': TENDERLY_ACCESS_KEY as string,
      },
    },
  );

  console.log(simulation.data);
};

simulateTransaction();

探索使用场景

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

后续内容

捆绑模拟

通过 SDK 模拟