> ## 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.

# Node RPC

> 使用 Tenderly Node RPC 通过 JSON-RPC 和 WebSocket 访问 80 多个 EVM 网络。发送、模拟和跟踪交易，读取链数据，无需运行节点。

Node RPC 是一个快速可靠的生产节点，让您能够通过 RPC 访问超过 80 个区块链网络。它允许您发送交易、部署智能合约、查询区块链数据或执行其他操作，无需自行运行节点或管理基础设施。

<Note>
  Node RPC 在付费计划中可用。要为您的账户启用它，请[联系我们的销售团队](https://tenderly.co/contact-us)。
</Note>

Node RPC 支持：

* 多区域基础设施（欧盟与美国），确保与位置无关的低延迟
* 通过 `http` 和 [WebSocket](#websockets) 协议访问
* [请求批处理](#batching-json-rpc-requests)
* 通过 [Node Extensions](#node-extensions) 构建自定义 RPC 方法
* 访问 Tenderly 的开发工具

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/list.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=6a24f4cd601b49400657e42decd307c7" alt="" width="1600" height="585" data-path="images/node/list.webp" />

## 自定义 RPC 方法

除了支持标准 EVM 方法外，Node RPC 还在 `tenderly_` 命名空间下暴露 Tenderly 的自定义 RPC 方法。

模拟、gas 估算和跟踪方法在专门的页面上有详细文档：

* [`tenderly_simulateTransaction`](/node-rpc/guides/simulate-json-rpc)：在签名之前模拟交易结果。
* [`tenderly_estimateGas`](/node-rpc/guides/simulate-json-rpc#tenderly_estimategas)：获取交易的精确 gas 估算。
* [`tenderly_simulateBundle`](/node-rpc/guides/simulate-bundle-json-rpc)：在单个请求中模拟多笔交易。
* [`tenderly_estimateGasBundle`](/node-rpc/guides/simulate-bundle-json-rpc#tenderly_estimategasbundle)：获取一批交易的精确 gas 估算。
* [`tenderly_traceTransaction`](/node-rpc/guides/trace-json-rpc)：获取现有交易的已解码跟踪。

解码和签名查找方法可在 [RPC 参考](/node-rpc/rpc-reference) 中找到：

* [`tenderly_decodeInput`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_decodeInput)：启发式解码外部函数调用。
* [`tenderly_decodeError`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_decodeError)：启发式解码自定义错误。
* [`tenderly_decodeEvent`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_decodeEvent)：启发式解码已发出的事件。
* [`tenderly_functionSignatures`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_functionSignatures)：基于 4 字节函数选择器检索函数接口。
* [`tenderly_errorSignatures`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_errorSignatures)：基于 4 字节选择器检索事件接口。
* [`tenderly_eventSignature`](/node-rpc/rpc-reference?network=ethereum-mainnet\&method=tenderly_eventSignature)：基于 32 字节事件签名检索事件接口。

## 管理 Node RPC

登录 Dashboard 并[前往 Node RPCs 页面](https://dashboard.tenderly.co/register?redirectTo=gateways)，在那里您可以创建新的 Node RPC 并管理现有的 Node RPC。

### 创建 Node RPC

要创建新的 Node RPC，请按以下步骤操作：

* 点击 **Create Node** 按钮
* 选择您想访问的网络
* 为该 Node 提供一个名称
* 点击 **Create**

<Note>
  您创建的每个 Node 都将拥有唯一的 URL。
</Note>

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/create.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=0029808adcd1ce23a034f9ec5f517ea5" alt="" width="1600" height="800" data-path="images/node/create.webp" />

### 配置 Node RPC

创建 Node RPC 后，您可以在 **Settings** 中进行配置。您可以：

* 重置 Node RPC URL
* 更改 Node 名称
* 删除该 Node

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/settings.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=5db0db3b1d26bcf89fdca2cab1ad45ec" alt="" width="1600" height="875" data-path="images/node/settings.webp" />

### 将 Node RPC 添加到 MetaMask

一键将 Node RPC 添加到您的 MetaMask 钱包。打开该节点的 **Overview** 页面，点击 **Add to Wallet** 按钮，并在 MetaMask 中确认操作。

在 MetaMask 中点击 **Approve** 以添加 Node RPC。

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/add-to-wallet.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=4da4ccd4520739b23ceb0093cb1787c8" alt="Node RPC" width="1600" height="264" data-path="images/node/add-to-wallet.webp" />

## WebSockets

除 HTTPS 外，Node RPC 也可通过 WebSocket（`wss://`）访问。WebSocket 连接是持久的、双向的，并且是订阅方法 `eth_subscribe` 和 `eth_unsubscribe` 所必需的。

要获取 WebSocket 端点，请在 [Dashboard](https://dashboard.tenderly.co/?redirectTo=gateways) 中打开节点的 **Overview** 页面并复制 **WSS** URL。

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/websockets-1.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=f7c990000fec802c3d6b9a67bab86e4f" alt="" width="626" height="86" data-path="images/node/websockets-1.webp" />

您可以使用命令行工具 `wscat` 测试连接：

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
wscat -c wss://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY
```

连接后，通过套接字发送 JSON-RPC 请求并实时接收响应：

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

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

## 批量 JSON-RPC 请求

JSON-RPC 请求批处理允许您在单次 HTTPS 调用中发送多个 JSON-RPC 方法调用。批处理请求由一组单独的 JSON-RPC 请求构成，响应是一个按对应顺序返回批处理中每个请求结果的数组。

您可以通过以下方式使用批处理：

* **直接使用**，通过发送包含单独 JSON-RPC 调用数组的 HTTPS 请求，
* **[使用 Ethers](/node-rpc/libraries/ethers)**，实例化 **`JsonRpcBatchProvider`**，
* **[使用 Viem](/node-rpc/libraries/viem)**，在通过 **`createPublicClient`** 创建客户端时配置 **`batch`** 参数。

如果某个特定请求失败，批处理请求仍会返回 `200 OK` HTTP 状态，并且对应失败的 JSON-RPC 调用的响应对象中会携带错误信息。

<Note>
  请求批处理仅在 `HTTPS` 上支持。`WSS` 上不支持批处理。批处理中的每个请求都会被单独计数与计费；请参阅 [Node RPC 定价](/node-rpc/pricing)。
</Note>

```bash title="batch-call.sh" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
curl https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY \
-X POST \
-H "Content-Type: application/json" \
-d '[
  {"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []},
  {"jsonrpc": "2.0", "id": 2, "method": "eth_gasPrice", "params": []},
  {"jsonrpc": "2.0", "id": 3, "method": "eth_getBalance", "params": ["0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "latest"]}
]'
```

在 Viem 中，批处理在客户端层面进行配置：

```js title="batch-calls.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const client = createPublicClient({
  chain: mainnet,
  transport: http(
    `https://mainnet.gateway.tenderly.co/${process.env.TENDERLY_NODE_ACCESS_KEY}`,
    {
      batch: true,
    }
  ),
});

const [blockNumber, balance, ensName] = await Promise.all([
  client.getBlockNumber(),
  client.getBalance({ address: "0xd2135CfB216b74109775236E36d4b433F1DF507B" }),
  client.getEnsName({ address: "0xd2135CfB216b74109775236E36d4b433F1DF507B" }),
]);
```

## RPC Request Builder

RPC Request Builder 让您能够从浏览器中执行任何受支持的 RPC 方法。每个请求都会直接发送到 Node RPC。Builder 还允许您使用现有集合或创建自己的请求。

请查看 [RPC 参考](/node-rpc/rpc-reference) 中所有受支持的 RPC 方法列表。

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/request-builder.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=17d59340fe914e0f588460ac0f92e2b6" alt="" width="1600" height="745" data-path="images/node/request-builder.webp" />

## Node Extensions

Node Extensions 允许您使用 JavaScript 或 TypeScript 通过自定义 RPC 方法扩展 Node RPC 的功能，以满足您 dapp、协议或特定的需求。作为 Node Extensions 构建的 RPC 方法具有 **`extension_`** 前缀，并通过 Node RPC 执行。

<img src="https://mintcdn.com/tenderly/UcIYT1E5TsGcI0yz/images/node/extensions/node-ex-1.webp?fit=max&auto=format&n=UcIYT1E5TsGcI0yz&q=85&s=570531d5b0ad53c61669e319b5c64c0a" alt="Node Extensions" width="1600" height="890" data-path="images/node/extensions/node-ex-1.webp" />

您可以从 [Dashboard](https://dashboard.tenderly.co/register?redirectTo=node-extensions) 的 **Node Extensions** 选项卡以多种方式创建 Node Extension：

* **从零构建**：点击 **Create Custom Extension**，为 RPC 方法命名，并编写每次调用时执行的 JavaScript/TypeScript 函数。
* **复用 Web3 Action**：复用带有非鉴权 webhook 触发器的现有 [Web3 Action](/monitoring/web3-actions/introduction) 的源代码作为扩展的函数。
* **从库中部署**：点击 **Add From Library**，从[公共 Node Extensions 库](https://github.com/Tenderly/node-extensions-library) 中启用一个预构建的扩展。库扩展不可编辑。
* **通过 CLI 部署**：使用 [Tenderly CLI](https://github.com/Tenderly/tenderly-cli)，通过 `tenderly node-extensions init` 在 `tenderly.yaml` 中定义扩展，并通过 `tenderly node-extensions deploy` 发布。

如果您的扩展使用 API 密钥或其他敏感值，请将它们存储为 [Web3 Action Secrets](/monitoring/web3-actions/references/context#secrets)，并在代码中通过 `await context.secrets.get('API_KEY')` 读取它们。使用扩展上的 **Test** 按钮向其发送 JSON-RPC 负载，并预览请求和响应。

## 资源

通过以下资源开始使用 Node RPC 或继续了解其工作原理。

<CardGroup cols={2}>
  <Card title="模拟与 Gas 估算" href="/node-rpc/guides/simulate-json-rpc">
    通过 JSON-RPC 模拟交易并获得精确的 gas 估算。
  </Card>

  <Card title="RPC 参考" href="/node-rpc/rpc-reference">
    查看 Node RPC 上受支持的 RPC 方法详细列表。
  </Card>

  <Card title="受支持的网络" href="/platform/supported-networks">
    查看 Node RPC 上支持的完整网络列表。
  </Card>

  <Card title="定价" href="/node-rpc/pricing">
    了解基于执行 RPC 方法所用算力的计费方式。
  </Card>
</CardGroup>
