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

> Доступ к 80+ EVM-сетям через JSON-RPC и WebSocket с Tenderly Node RPC. Отправляйте, симулируйте и трассируйте транзакции, читайте данные сети — без запуска собственного узла.

Node RPC — это быстрый и надёжный production-узел, обеспечивающий доступ к более чем 80 блокчейн-сетям через RPC. Он позволяет отправлять транзакции, разворачивать смарт-контракты, запрашивать данные блокчейна и выполнять другие операции без необходимости запускать собственный узел или управлять инфраструктурой.

<Note>
  Node RPC доступен на платном плане. Чтобы включить его для вашей учётной записи, [свяжитесь с нашим отделом продаж](https://tenderly.co/contact-us).
</Note>

Node RPC поддерживает:

* Мультирегиональную инфраструктуру (EU и US), обеспечивающую низкую задержку независимо от местоположения
* Доступ по протоколам `http` и [WebSocket](#websockets)
* [Пакетирование запросов](#batching-json-rpc-requests)
* Создание пользовательских RPC-методов через [Node Extensions](#node-extensions)
* Доступ к инструментам разработки 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 предоставляет пользовательские RPC-методы Tenderly в пространстве имён `tenderly_`.

Методы симуляции, оценки газа и трассировки описаны на отдельных страницах:

* [`tenderly_simulateTransaction`](/node-rpc/guides/simulate-json-rpc) — симуляция исхода транзакции до её подписания.
* [`tenderly_estimateGas`](/node-rpc/guides/simulate-json-rpc#tenderly_estimategas) — получение точной оценки газа для транзакции.
* [`tenderly_simulateBundle`](/node-rpc/guides/simulate-bundle-json-rpc) — симуляция нескольких транзакций в одном запросе.
* [`tenderly_estimateGasBundle`](/node-rpc/guides/simulate-bundle-json-rpc#tenderly_estimategasbundle) — получение точных оценок газа для бандла транзакций.
* [`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, выполните следующие шаги:

* Нажмите кнопку **Create Node**
* Выберите сеть, к которой хотите получить доступ
* Укажите имя узла
* Нажмите **Create**

<Note>
  У каждого создаваемого узла будет уникальный 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**. Оттуда вы можете:

* Сбросить URL Node RPC
* Изменить имя узла
* Удалить узел

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

Нажмите **Approve** в MetaMask, чтобы добавить 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" />

## WebSocket

Node RPC доступен через WebSocket (`wss://`) в дополнение к HTTPS. Соединение WebSocket является постоянным и двунаправленным и необходимо для методов подписки `eth_subscribe` и `eth_unsubscribe`.

Чтобы получить эндпоинт WebSocket, откройте страницу **Overview** узла в [Dashboard](https://dashboard.tenderly.co/?redirectTo=gateways) и скопируйте URL **WSS**.

<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-запросов позволяет отправлять несколько вызовов JSON-RPC-методов в одном HTTPS-запросе. Пакетный запрос состоит из массива отдельных JSON-RPC-запросов, а ответ представляет собой массив результатов в порядке, соответствующем каждому запросу в пакете.

Пакетирование можно использовать:

* **напрямую**, отправив HTTPS-запрос, содержащий массив отдельных JSON-RPC-вызовов,
* **[с помощью Ethers](/node-rpc/libraries/ethers)**, создав экземпляр **`JsonRpcBatchProvider`**,
* **[с помощью Viem](/node-rpc/libraries/viem)**, настроив параметр **`batch`** при создании клиента через **`createPublicClient`**.

Если конкретный запрос завершается ошибкой, пакетный запрос всё равно возвращает HTTP-статус `200 OK`, а объект ответа, соответствующий неудавшемуся 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-методов в [справочнике RPC](/node-rpc/rpc-reference).

<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 позволяют расширить функциональность Node RPC пользовательскими RPC-методами, адаптированными под ваш dapp, протокол или конкретные задачи, используя JavaScript или TypeScript. RPC-методы, реализованные как Node Extensions, имеют префикс **`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" />

Создать Node Extension можно несколькими способами со вкладки **Node Extensions** в [Dashboard](https://dashboard.tenderly.co/register?redirectTo=node-extensions):

* **Создание с нуля**: нажмите **Create Custom Extension**, задайте имя RPC-метода и напишите функцию на JavaScript/TypeScript, которая будет выполняться при каждом вызове.
* **Переиспользование Web3 Action**: используйте исходный код существующего [Web3 Action](/monitoring/web3-actions/introduction) с неаутентифицированным webhook-триггером в качестве функции расширения.
* **Развёртывание из библиотеки**: нажмите **Add From Library**, чтобы активировать готовое расширение из [публичной библиотеки Node Extensions](https://github.com/Tenderly/node-extensions-library). Расширения из библиотеки нельзя редактировать.
* **Развёртывание через CLI**: опишите расширения в `tenderly.yaml` с помощью `tenderly node-extensions init` и разверните их командой `tenderly node-extensions deploy`, используя [Tenderly CLI](https://github.com/Tenderly/tenderly-cli).

Если расширение использует API-ключи или другие чувствительные значения, храните их как [Web3 Action Secrets](/monitoring/web3-actions/references/context#secrets) и читайте в коде с помощью `await context.secrets.get('API_KEY')`. Используйте кнопку **Test** у расширения, чтобы отправить в него JSON-RPC-payload и посмотреть предпросмотр запроса и ответа.

## Ресурсы

Начните работу с Node RPC или продолжайте изучать, как он работает, с помощью этих ресурсов.

<CardGroup cols={2}>
  <Card title="Симуляции и оценка газа" href="/node-rpc/guides/simulate-json-rpc">
    Симулируйте транзакции и получайте точные оценки газа через JSON-RPC.
  </Card>

  <Card title="Справочник RPC" href="/node-rpc/rpc-reference">
    Подробный список поддерживаемых RPC-методов в Node RPC.
  </Card>

  <Card title="Поддерживаемые сети" href="/platform/supported-networks">
    Полный список сетей, поддерживаемых в Node RPC.
  </Card>

  <Card title="Тарификация" href="/node-rpc/pricing">
    Разберитесь в тарификации, основанной на вычислительной мощности, затрачиваемой на выполнение RPC-методов.
  </Card>
</CardGroup>
