跳转到主要内容
您可以通过特殊的 RPC 方法完全控制您的 Virtual Environment。这些方法通过 Admin RPC 提供,您可以从 Dashboard 中复制。 它们允许您操纵网络状态,例如账户余额、区块号和存储,以满足您的开发需求。 对这些 RPC 方法的调用由对虚拟 TenderlyCheatcodes 合约的调用表示。 此处列出的特殊 RPC 方法仅在通过 Admin RPC 调用时才有效。 网络自定义 发送交易 无限水龙头 存储操纵 状态回滚 Network Mirror Mode 同步控制

evm_increaseTime

将区块链时间按指定数量向前推进,并使用新的时间戳创建一个空区块。 后续对 eth_calleth_sendRawTransaction 的调用会根据它们所针对的 blockNumber 获取不同的 block.timestamp 值:
  • 对于 pending 区块:返回 current_time + time_increase 这表示下一个将被挖掘区块的预期时间戳。
  • 对于 latest 区块:返回 time_of_evm_increaseTimestamp_call + time_increase。这是调用 evm_increaseTimestamp 时创建的空区块的时间戳。
参数
  • QUANTITY - 十六进制编码的 time_increase(要向前跳跃的秒数)
返回值
  • DATA - 新生成区块的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_increaseTime",
  "params": ["0x15180"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0x51e0a03f19e0c154b16363086aa6bbf22ad4582b0515b0a3a00519015f06246f",
  "id": "1234"
}

evm_setNextBlockTimestamp

将当前时间偏移到指定时间戳,并使用给定的时间戳创建一个空区块。 后续对 eth_calleth_sendRawTransaction 的调用将根据它们所针对的 blockNumber 返回不同的 block.timestamp 值:
  • 对于 pending 区块:返回 specified_timestamp + time_since_evmSetNextBlockTimestamp_call。这表示设置的时间戳加上自方法被调用以来经过的任何时间。
  • 对于 latest 区块:返回 specified_timestamp。这是调用 evm_setNextBlockTimestamp 时创建的空区块的时间戳。
参数
  • QUANTITY - 十六进制编码的 specified_timestamp,表示 epoch 时间戳(以秒为单位)
返回值
  • QUANTITY - 为下一个区块设置的整数(epoch 时间戳)
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_setNextBlockTimestamp",
  "params": ["1750074671"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": 1750074671,
  "id": "1234"
}

tenderly_setNextBlockTimestamp

将当前时间偏移到给定的时间戳,而不创建空区块。 后续对 eth_calleth_sendRawTransaction 的调用将根据它们所针对的 blockNumber 返回不同的 block.timestamp 值:
  • 对于 pending 区块:返回 specified_timestamp + time_since_tenderly_setNextBlockTimestamp。这表示设置的时间戳加上自方法被调用以来经过的任何时间。
  • 对于 latest 区块:返回最新创建区块的时间戳。
参数
  • QUANTITY - 十六进制编码的 specified_timestamp,表示 epoch 时间戳(以秒为单位)
返回值
  • QUANTITY - 为下一个区块设置的整数(epoch 时间戳)
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_setNextBlockTimestamp",
  "params": ["1750074671"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": 1750074671,
  "id": "1234"
}

evm_increaseBlocks

跳过若干区块,并使用新的区块号生成一个新区块。 参数
  • QUANTITY - 十六进制编码的要跳过的区块数
返回值
  • DATA - 新生成区块的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_increaseBlocks",
  "params": ["0x20"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0x51e0a03f19e0c154b16363086aa6bbf22ad4582b0515b0a3a00519015f06246f",
  "id": "1234"
}

eth_sendTransaction

提交一笔未签名的交易。 参数
  1. Transaction - 交易对象
  • fromDATA,20 字节 - 交易发送方的地址。
  • toDATA,20 字节 - (可选,创建新合约时省略)交易的目标地址。
  • gasQUANTITY - (可选)为交易执行提供的 gas 整数。将返回未使用的 gas。
  • gasPriceQUANTITY - (可选)每单位已付 gas 使用的 gasPrice 整数。
  • valueQUANTITY - (可选)随此交易发送的 value 整数。
  • dataDATA - (可选)合约的编译代码,或调用方法签名与编码参数的哈希。
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "eth_sendTransaction",
  "params": [
    {
      "from": "0xDC6bDc37B2714eE601734cf55A05625C9e512461",
      "to": "0xff39a3e734fe363e631441f6d24c7539240c2628",
      "value": "0x0",
      "data": "0x2e7700f0"
    }
  ]
}
RESULT:交易哈希 STRING,32 字节十六进制值

eth_createAccessList

返回此交易将访问的访问元组。 参数
  • SendTransactionObject - 交易对象(与提供给 eth_sendTransaction 的对象相同)
  • BlockNumber - 区块号参数
返回值
  • AccessList - 交易访问的访问元组数组
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "eth_getAccessList",
  "params": [
    {
      "from": "0x7ed8dff35e6fef1a6c1f95423cd8a64e22687aac",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "gas": "0x76c00",
      "gasPrice": "0x0",
      "value": "0x0",
      "data": "0xa9059cbb0000000000000000000000005eddecc908575e1adcf857d8be380b9b7e5f658300000000000000000000000000000000000000000000000228813d891ab86000"
    },
    "latest"
  ],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": [
    {
      "address": "0x7ed8dff35e6fef1a6c1f95423cd8a64e22687aac"
    },
    {
      "address": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "storage_keys": [
        "0x5051a693fd89be4fee1466db5a0684c1868dc09405da86e3d13004a803e302ec"
      ]
    },
    {
      "address": "0xc8f595e2084db484f8a80109101d58625223b7c9"
    }
  ],
  "id": 1234
}

evm_getLatest

获取网络 Virtual Environment 上的最新交易 ID。 参数 返回值
  • DATA - 最新 Virtual Environment 交易的 UUID
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_getLatest",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "4a05d7ed-f66c-471a-899d-d6d843b8e790",
  "id": "1234"
}

tenderly_setBalance

修改一个或多个账户的余额。 参数
  • ADDRESS/ADDRESSES - 账户地址字符串或字符串数组
  • AMOUNT - 以 wei 为单位的十六进制编码金额
返回值
  • DATA - 新创建交易的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_setBalance",
  "params": [["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"], "0xDE0B6B3A7640000"],
  "id": "1234"
}
或者
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_setBalance",
  "params": ["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xDE0B6B3A7640000"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}

tenderly_addBalance

向提供的一个或多个账户添加余额。 参数
  • ADDRESS/ADDRESSES - 账户地址字符串或字符串数组
  • AMOUNT - 以 wei 为单位的十六进制编码金额
返回值
  • DATA - 新创建交易的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_addBalance",
  "params": [["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B"], "0xDE0B6B3A7640000"],
  "id": "1234"
}
或者
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_addBalance",
  "params": ["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xDE0B6B3A7640000"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}

tenderly_setErc20Balance

在提供的 erc20 合约上为钱包设置代币余额。
tenderly_setErc20Balance 会将新余额直接写入代币合约的存储中,并不会发出 ERC-20 Transfer 事件。如果您的下游工具(索引器、subgraph、账务系统)依赖 Transfer 事件来追踪余额,请改用 tenderly_addErc20Balance,它会为每个被充值的账户发出一个合成的 Transfer 日志。
参数
  • TOKEN_ADDRESS - ERC20 合约的地址
  • WALLET - 将被充值的钱包地址
  • VALUE - 表示代币 wei 值的 32 字节哈希
返回值 DATA - 新创建交易的 32 字节哈希(存储覆盖通过交易提交) 示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_setErc20Balance",
  "params": [
    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "0x40BdB4497614bAe1A67061EE20AAdE3c2067AC9e",
    "0xDE0B6B3A7640000"
  ],
  "id": 3640
}
示例响应
example.json
{
  "id": 3640,
  "jsonrpc": "2.0",
  "result": "0x8a84686634729c57532b9ffa4e632e241b2de5c880c771c5c214d5e7ec465b1c"
}

tenderly_addErc20Balance

在提供的 ERC-20 合约上向一个或多个钱包添加指定数量的代币。与 tenderly_setErc20Balance 不同,此方法会为每个被充值的账户发出一个合成的 Transfer 事件,因此索引器、subgraph 以及任何从日志中对账余额的工具都会与最终状态保持同步。 发出的日志使用标准的 ERC-20 Transfer(address,address,uint256) topic,将交易发送方作为 from 地址,将被充值的钱包作为 to 地址,并在 data 字段中携带添加的 amount 参数
  • TOKEN_ADDRESS - ERC-20 合约的地址
  • WALLETS - 将接收代币的钱包地址数组
  • VALUE - 32 字节哈希,表示向每个钱包添加的代币的 wei 数量
返回值 DATA - 新创建交易的 32 字节哈希(存储覆盖通过交易提交) 示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_addErc20Balance",
  "params": [
    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    [
      "0x40BdB4497614bAe1A67061EE20AAdE3c2067AC9e",
      "0xBd8DaA414Fda8a8A129F7035e7496759C5aF8570"
    ],
    "0xDE0B6B3A7640000"
  ],
  "id": 3641
}
示例响应
example.json
{
  "id": 3641,
  "jsonrpc": "2.0",
  "result": "0x8a84686634729c57532b9ffa4e632e241b2de5c880c771c5c214d5e7ec465b1d"
}

tenderly_setMaxErc20Balance

在提供的 erc20 合约上,将钱包地址充值至最大可能的代币余额(主要用于没有简单余额映射的代币)。
tenderly_setErc20Balance 类似,此方法直接写入存储,不会发出 ERC-20 Transfer 事件。当您需要索引器或基于日志的工具捕获余额变化时,请使用 tenderly_addErc20Balance
参数
  • YIELD_TOKEN_ADDRESS - ERC20 合约的地址
  • WALLET - 将被充值的钱包地址
返回值 DATA - 新创建交易的 32 字节哈希(存储覆盖通过交易提交) 示例请求
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "tenderly_setMaxErc20Balance",
  "params": [
    "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
    "0xb5f45E52649123117C175B2016Ed3fCd26f9bE06"
  ]
}
示例响应
example.json
{
  "id": 0,
  "jsonrpc": "2.0",
  "result": "0x8fb202d4612be9f6e96b955b4e5bd002cde4d79bec8a6d1b7d35976f124636a4"
}

tenderly_setStorageAt

在提供地址的指定存储槽上设置存储。 参数
  • ADDRESS - 要覆盖存储的地址
  • SLOT - 表示存储槽键的 32 字节哈希
  • VALUE - 表示键 slot 处值的 32 字节哈希
返回值
  • DATA - 新创建交易的 32 字节哈希(存储覆盖通过交易提交)
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_setStorageAt",
  "params": [
    "0x3Df2f692132f55b97cc9DA04A1fFFEA82F5d710b",
    "0x8111de210bcfef10861a4ab6df0f4838296bd61d5a8f02dca283ed3b72a47bba",
    "0x0000000000000000000000000000000000000000000000000000000000000000"
  ],
  "id": "1"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}

evm_snapshot

返回一个快照 ID,让您可以将 Virtual Environment 回退到先前的时间点(与 evm_getLatest 中的区块 hash 相同)。 参数 返回值
  1. DATA - Virtual Environment 生成的最新区块的哈希(快照 ID)
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_snapshot",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0xfdb5a15fe652e0f47e4312df749f8cc1769d5e70f0bf3f26a4e231bb6a550f8d",
  "id": "1234"
}

evm_revert

将 Virtual Environment 的状态回退到先前的快照。 单次 evm_revert 最多可回滚 2000 个区块。如果快照比这更早,调用将失败,并返回 revert operation is limited to maximum 2000 blocks 错误。要回到超过 2000 个区块之前的时间点,请改为在目标历史区块处克隆 Virtual Environment 参数
  • DATA - 快照的 ID
返回值
  • BOOLEAN - 操作成功标志
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "evm_revert",
  "params": ["0xfdb5a15fe652e0f47e4312df749f8cc1769d5e70f0bf3f26a4e231bb6a550f8d"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}

Network Mirror Mode 同步控制

以下方法控制 Network Mirror Mode,它们用于启动、停止、单步执行、回退以及检查 Virtual Environment 与其父网络之间的持续同步。
当 Network Mirror Mode 同步处于活动状态时,其他 Admin RPC 作弊码(例如 tenderly_setBalancetenderly_setStorageAttenderly_sendBlock)会被禁用。如果您需要它们立即生效,请先通过 tenderly_stopSync 暂停同步。

tenderly_startSync

启动 Virtual Environment 与其父网络之间的持续同步。父网络的新区块会在产生时被吸收,Virtual Environment 内存池中的任何交易会以 FIFO 顺序被前置到下一个同步的区块中。 参数 无。 返回值
  • BOOLEAN - 如果同步已启动则为 true
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_startSync",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}

tenderly_stopSync

停止正在进行的任何同步。Virtual Environment 停留在当前区块;您可以使用 tenderly_startSync 恢复,或使用 tenderly_syncNext 手动前进。当 Mirror Mode 处于活动状态时,在调用其他 Admin RPC 作弊码之前请使用此方法。 参数 无。 返回值
  • BOOLEAN - 如果同步已停止(或已经处于停止状态)则为 true
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_stopSync",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}

tenderly_syncNext

将下一个父网络区块同步到 Virtual Environment 上。任何待处理的 Virtual Environment 交易都会以 FIFO 顺序前置到该区块中。适用于逐个区块单步同步。 参数 无。 返回值
  • DATA - 新同步区块的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_syncNext",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0x51e0a03f19e0c154b16363086aa6bbf22ad4582b0515b0a3a00519015f06246f",
  "id": "1234"
}

tenderly_revertSync

将 Virtual Environment 回退 N 个已同步的区块,撤销它们对 Virtual Environment 状态的影响。默认为 10 个区块。使用此方法可将 Mirror-Mode Virtual Environment 步回父网络历史中较早的一个时间点。 参数
  • QUANTITY (可选) - 十六进制编码的要回退的区块数。默认为 0xa(10)。
返回值
  • DATA - Virtual Environment 当前所处区块的 32 字节区块哈希
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_revertSync",
  "params": ["0xa"],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": "0xfdb5a15fe652e0f47e4312df749f8cc1769d5e70f0bf3f26a4e231bb6a550f8d",
  "id": "1234"
}

tenderly_getSyncStatus

返回 Virtual Environment 的当前同步状态,包括同步是否处于活动状态、其落后于父网络的程度以及最新同步的区块。 参数 无。 返回值
  • OBJECT - 具有以下字段的同步状态:
    • active - BOOLEAN,如果同步当前正在运行则为 true
    • lag - QUANTITY,Virtual Environment 落后于父网络的区块数
    • latestSyncedBlock - QUANTITY,同步到 Virtual Environment 上的最新区块的区块号
    • parentLatestBlock - QUANTITY,父网络上最新区块的区块号
示例请求
example.json
{
  "jsonrpc": "2.0",
  "method": "tenderly_getSyncStatus",
  "params": [],
  "id": "1234"
}
示例响应
example.json
{
  "jsonrpc": "2.0",
  "result": {
    "active": true,
    "lag": 0,
    "latestSyncedBlock": 22845130,
    "parentLatestBlock": 22845130
  },
  "id": "1234"
}