> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# 自定义 RPC 方法

> 用于 Virtual Environments 的网络自定义 RPC 方法（作弊码），可操纵状态、余额、nonce 和区块历史。

您可以通过特殊的 RPC 方法完全控制您的 Virtual Environment。这些方法通过 **Admin RPC** 提供，您可以从 Dashboard 中复制。

它们允许您操纵网络状态，例如账户余额、区块号和存储，以满足您的开发需求。

对这些 RPC 方法的调用由对虚拟 `TenderlyCheatcodes` 合约的调用表示。

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/testnets/tenderly-cheatcodes-tx.png?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=2291489d20ca410e70d1f20fc804b867" alt="" width="2728" height="630" data-path="images/testnets/tenderly-cheatcodes-tx.png" />

此处列出的特殊 RPC 方法仅在通过 Admin RPC 调用时才有效。

**网络自定义**

* [evm\_increaseTime](#evm_increasetime)
* [evm\_setNextBlockTimestamp](#evm_setnextblocktimestamp)
* [tenderly\_setNextBlockTimestamp](#tenderly_setNextBlockTimestamp)
* [evm\_increaseBlocks](#evm_increaseblocks)
* [evm\_mine](#evm-mine)

**发送交易**

* [eth\_sendTransaction](#eth_sendtransaction)
* [eth\_createAccessList](#eth_createaccesslist)
* [evm\_getLatest](#evm_getlatest)

**无限水龙头**

* [tenderly\_setBalance](#tenderly_setbalance)
* [tenderly\_addBalance](#tenderly_addbalance)
* [tenderly\_setErc20Balance](#tenderly_seterc20balance)
* [tenderly\_addErc20Balance](#tenderly_adderc20balance)
* [tenderly\_setMaxErc20Balance](#tenderly_setmaxerc20balance)

**存储操纵**

* [tenderly\_setStorageAt](#tenderly_setstorageat)

**状态回滚**

* [evm\_snapshot](#evm_snapshot)
* [evm\_revert](#evm_revert)

**Network Mirror Mode 同步控制**

* [tenderly\_startSync](#tenderly_startsync)
* [tenderly\_stopSync](#tenderly_stopsync)
* [tenderly\_syncNext](#tenderly_syncnext)
* [tenderly\_revertSync](#tenderly_revertsync)
* [tenderly\_getSyncStatus](#tenderly_getsyncstatus)

### `evm_increaseTime`

将区块链时间按指定数量向前推进，并使用新的时间戳创建一个空区块。

后续对 `eth_call` 和 `eth_sendRawTransaction` 的调用会根据它们所针对的 `blockNumber` 获取不同的 `block.timestamp` 值：

* 对于 `pending` 区块：返回 `current_time + time_increase`
  这表示下一个将被挖掘区块的预期时间戳。
* 对于 `latest` 区块：返回 `time_of_evm_increaseTimestamp_call + time_increase`。这是调用 `evm_increaseTimestamp` 时创建的空区块的时间戳。

**参数**

* `QUANTITY` - 十六进制编码的 `time_increase`（要向前跳跃的秒数）

**返回值**

* `DATA` - 新生成区块的 32 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_increaseTime",
  "params": ["0x15180"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "0x51e0a03f19e0c154b16363086aa6bbf22ad4582b0515b0a3a00519015f06246f",
  "id": "1234"
}
```

### `evm_setNextBlockTimestamp`

将当前时间偏移到指定时间戳，并使用给定的时间戳创建一个空区块。

后续对 `eth_call` 和 `eth_sendRawTransaction` 的调用将根据它们所针对的 `blockNumber` 返回不同的 `block.timestamp` 值：

* 对于 `pending` 区块：返回 `specified_timestamp + time_since_evmSetNextBlockTimestamp_call`。这表示设置的时间戳加上自方法被调用以来经过的任何时间。
* 对于 `latest` 区块：返回 `specified_timestamp`。这是调用 `evm_setNextBlockTimestamp` 时创建的空区块的时间戳。

**参数**

* `QUANTITY` - 十六进制编码的 `specified_timestamp`，表示 epoch 时间戳（以秒为单位）

**返回值**

* `QUANTITY` - 为下一个区块设置的整数（epoch 时间戳）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_setNextBlockTimestamp",
  "params": ["1750074671"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": 1750074671,
  "id": "1234"
}
```

### `tenderly_setNextBlockTimestamp`

将当前时间偏移到给定的时间戳，而不创建空区块。

后续对 `eth_call` 和 `eth_sendRawTransaction` 的调用将根据它们所针对的 `blockNumber` 返回不同的 `block.timestamp` 值：

* 对于 `pending` 区块：返回 `specified_timestamp + time_since_tenderly_setNextBlockTimestamp`。这表示设置的时间戳加上自方法被调用以来经过的任何时间。
* 对于 `latest` 区块：返回最新创建区块的时间戳。

**参数**

* `QUANTITY` - 十六进制编码的 `specified_timestamp`，表示 epoch 时间戳（以秒为单位）

**返回值**

* `QUANTITY` - 为下一个区块设置的整数（epoch 时间戳）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_setNextBlockTimestamp",
  "params": ["1750074671"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": 1750074671,
  "id": "1234"
}
```

### `evm_increaseBlocks`

跳过若干区块，并使用新的区块号生成一个新区块。

**参数**

* `QUANTITY` - 十六进制编码的要跳过的区块数

**返回值**

* `DATA` - 新生成区块的 32 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_increaseBlocks",
  "params": ["0x20"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "0x51e0a03f19e0c154b16363086aa6bbf22ad4582b0515b0a3a00519015f06246f",
  "id": "1234"
}
```

### `eth_sendTransaction`

提交一笔未签名的交易。

**参数**

1. **Transaction** - 交易对象

* `from`：`DATA`，20 字节 - 交易发送方的地址。
* `to`：`DATA`，20 字节 - （可选，创建新合约时省略）交易的目标地址。
* `gas`：`QUANTITY` - （可选）为交易执行提供的 gas 整数。将返回未使用的 gas。
* `gasPrice`：`QUANTITY` - （可选）每单位已付 gas 使用的 `gasPrice` 整数。
* `value`：`QUANTITY` - （可选）随此交易发送的 value 整数。
* `data`：`DATA` - （可选）合约的编译代码，或调用方法签名与编码参数的哈希。

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "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` - 交易访问的访问元组数组

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "eth_getAccessList",
  "params": [
    {
      "from": "0x7ed8dff35e6fef1a6c1f95423cd8a64e22687aac",
      "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "gas": "0x76c00",
      "gasPrice": "0x0",
      "value": "0x0",
      "data": "0xa9059cbb0000000000000000000000005eddecc908575e1adcf857d8be380b9b7e5f658300000000000000000000000000000000000000000000000228813d891ab86000"
    },
    "latest"
  ],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": [
    {
      "address": "0x7ed8dff35e6fef1a6c1f95423cd8a64e22687aac"
    },
    {
      "address": "0x6b175474e89094c44da98b954eedeac495271d0f",
      "storage_keys": [
        "0x5051a693fd89be4fee1466db5a0684c1868dc09405da86e3d13004a803e302ec"
      ]
    },
    {
      "address": "0xc8f595e2084db484f8a80109101d58625223b7c9"
    }
  ],
  "id": 1234
}
```

### `evm_getLatest`

获取网络 Virtual Environment 上的最新交易 ID。

**参数**

**返回值**

* `DATA` - 最新 Virtual Environment 交易的 UUID

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_getLatest",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "4a05d7ed-f66c-471a-899d-d6d843b8e790",
  "id": "1234"
}
```

### `tenderly_setBalance`

修改一个或多个账户的余额。

**参数**

* `ADDRESS/ADDRESSES` - 账户地址字符串或字符串数组
* `AMOUNT` - 以 wei 为单位的十六进制编码金额

**返回值**

* `DATA` - 新创建交易的 32 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_setBalance",
  "params": [["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"], "0xDE0B6B3A7640000"],
  "id": "1234"
}
```

或者

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_setBalance",
  "params": ["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xDE0B6B3A7640000"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}
```

### `tenderly_addBalance`

向提供的一个或多个账户添加余额。

**参数**

* `ADDRESS/ADDRESSES` - 账户地址字符串或字符串数组
* `AMOUNT` - 以 wei 为单位的十六进制编码金额

**返回值**

* `DATA` - 新创建交易的 32 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_addBalance",
  "params": [["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B"], "0xDE0B6B3A7640000"],
  "id": "1234"
}
```

或者

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_addBalance",
  "params": ["0x0d2026b3EE6eC71FC6746ADb6311F6d3Ba1C000B", "0xDE0B6B3A7640000"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}
```

### `tenderly_setErc20Balance`

在提供的 erc20 合约上为钱包设置代币余额。

<Note>
  `tenderly_setErc20Balance` 会将新余额直接写入代币合约的存储中，**并不会发出 ERC-20 `Transfer` 事件**。如果您的下游工具（索引器、subgraph、账务系统）依赖 `Transfer` 事件来追踪余额，请改用 [`tenderly_addErc20Balance`](#tenderly_adderc20balance)，它会为每个被充值的账户发出一个合成的 `Transfer` 日志。
</Note>

**参数**

* `TOKEN_ADDRESS` - ERC20 合约的地址
* `WALLET` - 将被充值的钱包地址
* `VALUE` - 表示代币 **wei** 值的 32 字节哈希

**返回值**

`DATA` - 新创建交易的 32 字节哈希（存储覆盖通过交易提交）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_setErc20Balance",
  "params": [
    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "0x40BdB4497614bAe1A67061EE20AAdE3c2067AC9e",
    "0xDE0B6B3A7640000"
  ],
  "id": 3640
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "id": 3640,
  "jsonrpc": "2.0",
  "result": "0x8a84686634729c57532b9ffa4e632e241b2de5c880c771c5c214d5e7ec465b1c"
}
```

### `tenderly_addErc20Balance`

在提供的 ERC-20 合约上向一个或多个钱包添加指定数量的代币。与 [`tenderly_setErc20Balance`](#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 字节哈希（存储覆盖通过交易提交）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_addErc20Balance",
  "params": [
    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    [
      "0x40BdB4497614bAe1A67061EE20AAdE3c2067AC9e",
      "0xBd8DaA414Fda8a8A129F7035e7496759C5aF8570"
    ],
    "0xDE0B6B3A7640000"
  ],
  "id": 3641
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "id": 3641,
  "jsonrpc": "2.0",
  "result": "0x8a84686634729c57532b9ffa4e632e241b2de5c880c771c5c214d5e7ec465b1d"
}
```

### `tenderly_setMaxErc20Balance`

在提供的 erc20 合约上，将钱包地址充值至最大可能的代币余额（主要用于没有简单余额映射的代币）。

<Note>
  与 `tenderly_setErc20Balance` 类似，此方法直接写入存储，**不会发出 ERC-20 `Transfer` 事件**。当您需要索引器或基于日志的工具捕获余额变化时，请使用 [`tenderly_addErc20Balance`](#tenderly_adderc20balance)。
</Note>

**参数**

* `YIELD_TOKEN_ADDRESS` - ERC20 合约的地址
* `WALLET` - 将被充值的钱包地址

**返回值**

`DATA` - 新创建交易的 32 字节哈希（存储覆盖通过交易提交）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "id": 0,
  "jsonrpc": "2.0",
  "method": "tenderly_setMaxErc20Balance",
  "params": [
    "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
    "0xb5f45E52649123117C175B2016Ed3fCd26f9bE06"
  ]
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "id": 0,
  "jsonrpc": "2.0",
  "result": "0x8fb202d4612be9f6e96b955b4e5bd002cde4d79bec8a6d1b7d35976f124636a4"
}
```

### `tenderly_setStorageAt`

在提供地址的指定存储槽上设置存储。

**参数**

* `ADDRESS` - 要覆盖存储的地址
* `SLOT` - 表示存储槽键的 32 字节哈希
* `VALUE` - 表示键 `slot` 处值的 32 字节哈希

**返回值**

* `DATA` - 新创建交易的 32 字节哈希（存储覆盖通过交易提交）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_setStorageAt",
  "params": [
    "0x3Df2f692132f55b97cc9DA04A1fFFEA82F5d710b",
    "0x8111de210bcfef10861a4ab6df0f4838296bd61d5a8f02dca283ed3b72a47bba",
    "0x0000000000000000000000000000000000000000000000000000000000000000"
  ],
  "id": "1"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": "0xc5b2c658f5fa236c598a6e7fbf7f21413dc42e2a41dd982eb772b30707cba2eb",
  "id": "1234"
}
```

### `evm_snapshot`

返回一个快照 ID，让您可以将 Virtual Environment 回退到先前的时间点（与 `evm_getLatest` 中的区块 `hash` 相同）。

**参数**

**返回值**

1. `DATA` - Virtual Environment 生成的最新区块的哈希（快照 ID）

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_snapshot",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "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](/virtual-environments/develop/revert-state#clone-at-a-historical-block)。

**参数**

* `DATA` - 快照的 ID

**返回值**

* `BOOLEAN` - 操作成功标志

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "evm_revert",
  "params": ["0xfdb5a15fe652e0f47e4312df749f8cc1769d5e70f0bf3f26a4e231bb6a550f8d"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}
```

## Network Mirror Mode 同步控制

以下方法控制 [Network Mirror Mode](/virtual-environments/network-mirror-mode)，它们用于启动、停止、单步执行、回退以及检查 Virtual Environment 与其父网络之间的持续同步。

<Note>
  当 Network Mirror Mode 同步处于**活动**状态时，其他 Admin RPC 作弊码（例如 `tenderly_setBalance`、`tenderly_setStorageAt`、`tenderly_sendBlock`）会被禁用。如果您需要它们立即生效，请先通过 [`tenderly_stopSync`](#tenderly_stopsync) 暂停同步。
</Note>

### `tenderly_startSync`

启动 Virtual Environment 与其父网络之间的持续同步。父网络的新区块会在产生时被吸收，Virtual Environment 内存池中的任何交易会以 FIFO 顺序被前置到下一个同步的区块中。

**参数**

无。

**返回值**

* `BOOLEAN` - 如果同步已启动则为 `true`

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_startSync",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}
```

### `tenderly_stopSync`

停止正在进行的任何同步。Virtual Environment 停留在当前区块；您可以使用 `tenderly_startSync` 恢复，或使用 `tenderly_syncNext` 手动前进。当 Mirror Mode 处于活动状态时，在调用其他 Admin RPC 作弊码之前请使用此方法。

**参数**

无。

**返回值**

* `BOOLEAN` - 如果同步已停止（或已经处于停止状态）则为 `true`

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_stopSync",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": true,
  "id": "1234"
}
```

### `tenderly_syncNext`

将下一个父网络区块同步到 Virtual Environment 上。任何待处理的 Virtual Environment 交易都会以 FIFO 顺序前置到该区块中。适用于逐个区块单步同步。

**参数**

无。

**返回值**

* `DATA` - 新同步区块的 32 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_syncNext",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "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 字节区块哈希

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_revertSync",
  "params": ["0xa"],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "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`，父网络上最新区块的区块号

**示例请求**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "method": "tenderly_getSyncStatus",
  "params": [],
  "id": "1234"
}
```

**示例响应**

```json title="example.json" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
  "jsonrpc": "2.0",
  "result": {
    "active": true,
    "lag": 0,
    "latestSyncedBlock": 22845130,
    "parentLatestBlock": 22845130
  },
  "id": "1234"
}
```
