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

# Rust SDK

> Продакшен-агенты и индексеры на Rust: типобезопасные клиенты для RPC, WebSocket, Yellowstone gRPC и Jetstream с retry, failover и переподключением из коробки.

На этапе после прототипа — демон, индексер, торговый бот или долгоживущий worker агента — берите Rust SDK. Вместо сырых HTTP, gRPC-каналов и WebSocket SDK сам управляет жизненным циклом, аутентификацией, повторами, failover и переподключением за простым API.

<Tip>
  Для интерактивных агентов в Claude Code или Cursor лучше [MCP-сервер](/ru/agents/mcp). Для скриптов и CI — [CLI](/ru/agents/cli). SDK — для кода, который агенты *пишут*: продакшен-сервисы, работающие сами по себе.
</Tip>

## Установка

```bash theme={null}
cargo add orbitflare-sdk                          # RPC only
cargo add orbitflare-sdk --features ws            # + WebSocket
cargo add orbitflare-sdk --features grpc          # + Yellowstone gRPC
cargo add orbitflare-sdk --features jetstream     # + Jetstream
```

Комбинируйте фичи: например `--features "ws grpc"` для индексера с двумя поверхностями.

## Что входит

| Service                | What it does                                                                                                    |
| ---------------------- | --------------------------------------------------------------------------------------------------------------- |
| **RPC**                | JSON-RPC client with typed helpers for common Solana methods, plus raw escape hatches                           |
| **WebSocket**          | Subscriptions for accounts, logs, slots, signatures with auto-resubscribe on reconnect                          |
| **gRPC (Yellowstone)** | Yellowstone Geyser streaming for transactions, accounts, slots, and blocks. YAML config or programmatic filters |
| **JetStream**          | OrbitFlare's decoded shreds delivered as gRPC streams. Same client pattern as Yellowstone, different proto      |

## Переменные окружения

SDK подхватывает эндпоинты из окружения, если вы не задаёте их явно. Рекомендуемый паттерн для кода от агента: без хардкода URL и ключей — один и тот же бинарь для регионов и сетей.

| Variable                   | Used by        | Purpose                                    |
| -------------------------- | -------------- | ------------------------------------------ |
| `ORBITFLARE_LICENSE_KEY`   | RPC, WebSocket | API key appended to endpoint URLs          |
| `ORBITFLARE_RPC_URL`       | RPC            | Default endpoint if `.url()` is not called |
| `ORBITFLARE_WS_URL`        | WebSocket      | Default endpoint if `.url()` is not called |
| `ORBITFLARE_GRPC_URL`      | gRPC           | Default endpoint if `.url()` is not called |
| `ORBITFLARE_JETSTREAM_URL` | JetStream      | Default endpoint if `.url()` is not called |

## Быстрый пример

Минимальный RPC-агент: эндпоинт из окружения, баланс с автоматическим retry/failover:

```rust theme={null}
use orbitflare_sdk::{RpcClientBuilder, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let client = RpcClientBuilder::new().build()?;     // reads ORBITFLARE_RPC_URL + LICENSE_KEY
    let lamports = client.get_balance("Gh9ZwEm...").await?;
    println!("{} SOL", lamports as f64 / 1e9);
    Ok(())
}
```

С явными резервными регионами:

```rust theme={null}
let client = RpcClientBuilder::new()
    .urls(&[
        "http://ny.rpc.orbitflare.com",
        "http://fra.rpc.orbitflare.com",
        "http://ams.rpc.orbitflare.com",
    ])
    .build()?;
```

Первый URL — основной, остальные — failover по порядку при ошибке.

## Стриминг через Yellowstone gRPC

```rust theme={null}
use orbitflare_sdk::{GeyserClientBuilder, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let client = GeyserClientBuilder::new()
        .url("http://fra.rpc.orbitflare.com:10000")
        .build()
        .await?;

    let mut stream = client.subscribe_yaml("stream.yml")?;
    while let Some(update) = stream.next().await {
        // process update
    }
    Ok(())
}
```

`subscribe_yaml` читает фильтры из YAML; для программных фильтров — `client.subscribe(SubscribeRequest { .. })`. Клиент Jetstream зеркалит этот паттерн: замените `GeyserClientBuilder` на `JetstreamClientBuilder`.

## Зачем SDK вместо сырого HTTP

Для продакшен-кода от агента SDK закрывает типичные ошибки:

* **Retries with exponential backoff**, настраивается на клиент
* **Multi-region failover**: основной упал — перебор резервов по порядку
* **Auth injection**: лицензионный ключ добавляется к каждому запросу, не хранится в строке эндпоинта
* **WebSocket reconnect**: подписки автоматически восстанавливаются после разрыва
* **gRPC channel management**: keepalive, reconnect, backoff
* **Typed responses**: распространённые методы десериализуются в структуры Rust, с сырыми обходными путями для остального

Попросив агента интеграцию OrbitFlare через SDK, вы получите компактный и устойчивый код.

## Источники

* SDK: [github.com/orbitflare/orbitflare-sdk-rs](https://github.com/orbitflare/orbitflare-sdk-rs)
* Полная справка: [SDK overview](/ru/sdk/overview), [RPC](/ru/sdk/rust-rpc), [WebSocket](/ru/sdk/rust-websocket), [gRPC](/ru/sdk/rust-grpc), [Jetstream](/ru/sdk/rust-jetstream)
