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

# Настройка выделенных узлов Solana: полное руководство по началу работы

> Полное руководство по настройке выделенного узла Solana с потоковой передачей через gRPC, плагином Yellowstone и оптимальной конфигурацией для данных блокчейна.

## Как заказать выделенные узлы

Выделенные узлы можно заказать непосредственно на вкладке Dedicated Nodes в [портале разработчика](https://dashboard.helius.dev/dedicated-nodes).

<Frame caption="Order a dedicated node from your Helius dashboard">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-order.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=eadf4de4e3908e93fd59aa289cab4fca" alt="Order a dedicated node from your Helius dashboard" width="1914" height="954" data-path="images/dedicated-nodes-order.png" />
</Frame>

### Тип узла

Выбор типа узла зависит от ваших требований. Поскольку мы не устанавливаем ограничений частоты запросов, производительность узла будет полностью зависеть от его характеристик.

**Для приложений с потоковой передачей через gRPC** (основной сценарий использования) подойдет любой тип узла.

<Warning>
  **Важно**: хотя [`getProgramAccounts`](/docs/ru/api-reference/rpc/http/getprogramaccounts) поддерживается, выделенные узлы не оптимизированы для таких вызовов. Интенсивное использование может снизить производительность узла или даже привести к его отказу. Для запросов `getProgramAccounts` используйте общий тарифный план: в нем есть специальный индексатор, благодаря которому такие вызовы выполняются гораздо быстрее и надежнее.
</Warning>

<Frame caption="Choose your dedicated node's type and location">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-type-and-location.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=3405ddb182f616be9e50c6d7acb43299" alt="Choose your dedicated node's type and location" width="2812" height="1274" data-path="images/dedicated-nodes-type-and-location.png" />
</Frame>

### Расположение узла

Мы предлагаем узлы в нескольких регионах: в Северной Америке (Питтсбург, Ньюарк, Солт-Лейк-Сити, Лос-Анджелес, Ванкувер), Европе (Дублин, Лондон, Амстердам, Франкфурт) и Азии (Токио, Сингапур), чтобы обеспечить максимальный географический охват глобальной инфраструктуры Solana.

Для минимальной задержки выберите узел, расположенный ближе всего к вашему серверу. Узел будет развернут в течение трех часов после оплаты.

### Клиент узла

Вы можете настроить узел, выбрав тип клиента: Agave или Jito Labs (форк Agave с дополнительным методом `simulateBundle`).

<Frame caption="Select your dedicated node's client type">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-client-type.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=351033efab719a4f3ce647468ccad8e6" alt="Select your dedicated node's client type" width="1468" height="484" data-path="images/dedicated-nodes-client-type.png" />
</Frame>

<Note>
  Выделенные узлы **не могут** самостоятельно отправлять пакеты Jito. Для отправки пакетов Jito необходимо использовать Jito API, который упаковывает и отправляет их через систему Jito.
</Note>

### Плагин Geyser (рекомендуется)

**Мы настоятельно рекомендуем добавить плагин Geyser [Yellowstone](https://github.com/helius-labs/yellowstone-grpc)** — это основной сценарий использования выделенных узлов. Он обеспечивает высокопроизводительную [потоковую передачу через gRPC](/docs/ru/grpc) слотов, блоков, транзакций и обновлений учетных записей.

<Frame caption="Select the Yellowstone gRPC Geyser Plugin (Recommended)">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-geyser-plugin.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=dcc31d0cb8f15a5246818c47411f6cc6" alt="Select the Yellowstone gRPC Geyser Plugin (Recommended)" width="1450" height="492" data-path="images/dedicated-nodes-geyser-plugin.png" />
</Frame>

<Note>
  **Рекомендуемый подход**: выделенные узлы оптимизированы для потоковой передачи через gRPC. Для отправки транзакций, архивных запросов и сложных операций RPC используйте общий тарифный план.
</Note>

### Способы оплаты

Оплатить можно фиатной валютой или криптовалютой (USDC). После успешной оплаты узел будет развернут в течение 3 часов.

При оплате фиатной валютой вы получите скидку на счет за следующий месяц с учетом количества дней, потребовавшихся для подготовки узла. При оплате криптовалютой расчетный период начинается после предоставления узла.

### Демонстрация

<iframe width="560" height="315" src="https://www.youtube.com/embed/KjgUzY_3dsQ?si=r3aKXpc_H6b7hnqE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />

## Начало работы

После настройки и подготовки выделенного узла (статус: **Succeeded**) можно начать работу с ним.

## Подключение к выделенному узлу

### Потоковая передача через gRPC (основной сценарий использования)

**Выделенные узлы оптимизированы для потоковой передачи через gRPC с помощью плагина Yellowstone Geyser.** Это основной и рекомендуемый способ использования выделенного узла.

<Info>
  **Рассмотрите LaserStream для потоковой передачи через gRPC**: LaserStream обеспечивает более высокую производительность и надежность, а также предлагает расширенные возможности, включая воспроизведение исторических данных за 48 часов через gRPC. Он рекомендуется для 99% сценариев потоковой передачи. [Сравните LaserStream и выделенные узлы](/docs/ru/laserstream/laserstream-vs-dedicated-nodes), чтобы выбрать оптимальное решение, или [начните работу с LaserStream](https://dashboard.helius.dev/laserstream) на панели управления Helius.
</Info>

### Базовые RPC и WebSocket (ограниченная функциональность)

Каждый выделенный узел также предоставляет базовую функциональность RPC, но с ограничениями. **В рабочих приложениях используйте выделенные узлы вместе с общим тарифным планом.**

В этом примере мы используем Solana web3.js, чтобы вызвать [`getSlot`](/docs/ru/api-reference/rpc/http/getslot) через выделенный узел:

```javascript theme={"system"}
// Using @solana/web3.js
const { Connection } = require('@solana/web3.js');

const connection = new Connection('https://liveried-grazings-gxzjabdgqa-dedicated.helius-rpc.com?api-key=465964ff-f718-47d2-a51c-66ddcce332d7');

// Get the current slot
const getSlot = async () => {
    const slot = await connection.getSlot();
    console.log('Current slot:', slot);
};

getSlot();
```

Вот как настроить нативное соединение WebSocket для потоковой передачи новых слотов:

```javascript theme={"system"}
const Websocket = require('ws');
const ws = new Websocket('wss://liveried-grazings-gxzjabdgqa-dedicated.helius-rpc.com?api-key=465964ff-f718-47d2-a51c-66ddcce332d7	');

ws.onopen = () => {
    ws.send(JSON.stringify({
        jsonrpc: '2.0',
        id: 1,
        method: 'slotSubscribe'
    }));
};

ws.onmessage = (event) => {
    console.log(JSON.parse(event.data));
};
```

<Warning>
  **Помните**: приведенные выше примеры RPC предназначены только для базовых операций. Ограничения выделенных узлов:

  * [`sendTransaction`](/docs/ru/api-reference/rpc/http/sendtransaction) поддерживается, но не оптимизирован — большинство транзакций не попадет в блокчейн (для надежной отправки транзакций используйте общий тарифный план)
  * Запросы архивных данных не поддерживаются (используйте общий тарифный план)
  * [`getProgramAccounts`](/docs/ru/api-reference/rpc/http/getprogramaccounts) поддерживается, но не оптимизирован — интенсивное использование может снизить производительность или привести к отказу узла (для надежной работы используйте общий тарифный план)

  **Основной сценарий использования**: для оптимальной производительности настройте потоковую передачу через gRPC, как описано ниже.
</Warning>

### Настройка плагина Geyser

Чтобы начать использовать плагин Geyser, клонируйте репозиторий Yellowstone:

```shell theme={"system"}
git clone https://github.com/helius-labs/yellowstone-grpc.git
```

#### Использование CLI

```sh theme={"system"}
cd yellowstone-grpc/examples/rust/
cargo run --bin client -- -e "https://liveried-grazings-gxzjabdgqa-dedicated-lb.helius-rpc.com:2053" --x-token 42f03938-1daa-4162-a457-bb551ecaf590 subscribe --slots
```

После завершения в терминале должны появиться новые слоты. Не забудьте заменить URL и токен на собственные значения.

<Frame caption="Terminal output of new slots">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/slots.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=370b4cbd02fd7ff8811bd9d63ed4976c" alt="Terminal log output from the Yellowstone gRPC client showing a stream of slot updates with processed, confirmed, and finalized statuses" width="667" height="288" data-path="images/slots.png" />
</Frame>

### Пример на TypeScript

Этот пример транслирует все транзакции Raydium в реальном времени в формате JSON:

```typescript theme={"system"}
import Client, { CommitmentLevel, SubscribeRequest } from "@triton-one/yellowstone-grpc";
import * as bs58 from 'bs58';

const processBuffers = (obj: any): any =>
  !obj ? obj :
  Buffer.isBuffer(obj) || obj instanceof Uint8Array ? bs58.encode(obj) :
  Array.isArray(obj) ? obj.map(processBuffers) :
  typeof obj === 'object' ? Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, processBuffers(v)])) :
  obj;

const main = async () => {
  const client = new Client("grpc_url", 
    "x_token", 
    { "grpc.max_receive_message_length": 64 * 1024 * 1024 });

  const stream = await client.subscribe();
  const write = (req: SubscribeRequest) => new Promise<void>((resolve, reject) => 
    stream.write(req, (err) => err ? reject(err) : resolve()));

  stream.on("data", (data) => {
    try { console.log(JSON.stringify(processBuffers(data), null, 2)); }
    catch (e) { console.error('Error:', e); }
  });

  await write({
    slots: {},
    accounts: {},
    accountsDataSlice: [],
    transactions: {
      allRaydiumTxs: {
        accountInclude: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"],
        accountExclude: [],
        accountRequired: [],
      }
    },
    blocks: {},
    blocksMeta: {},
    entry: {},
    commitment: CommitmentLevel.PROCESSED,
  });

  setInterval(() => write({
    ping: { id: 1 },
    accounts: {},
    accountsDataSlice: [],
    transactions: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    slots: {},
  }).catch(console.error), 30000);

  await new Promise<void>((resolve, reject) => {
    stream.on("error", (e) => { console.error("Stream error:", e); reject(e); stream.end(); });
    stream.on("end", resolve);
    stream.on("close", resolve);
  });
};

main().catch(console.error);
```

<Frame caption="Example output of a partial Raydium transaction">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/raydium-tx.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=e11b512cd7851eb33be9e425eaf1a0c8" alt="JSON output of a Raydium transaction streamed over gRPC, showing the allRaydiumTxs filter, signature, account keys, and instructions" width="1778" height="1147" data-path="images/raydium-tx.png" />
</Frame>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.