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

# Клиенты LaserStream

> Высокопроизводительные SDK для потоковой передачи через gRPC с автоматическим повтором и без потери данных

## Автоматический повтор после отключения

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

## Клиент JavaScript/TypeScript

<Warning>
  **Настоятельно рекомендуем перейти на LaserStream SDK для приложений JavaScript.** Если вы сейчас используете клиенты Yellowstone gRPC, вы столкнетесь с нарастающими задержками потока и узкими местами в производительности, которые со временем усугубляются. Запас производительности клиента LaserStream позволяет приложению масштабироваться вместе с сетью и полностью устраняет эти проблемы.
</Warning>

[Клиент JavaScript](https://github.com/helius-labs/laserstream-sdk/tree/main/javascript) использует нативные привязки Rust и обеспечивает пропускную способность 1,3 ГБ/с — это более чем в 40 раз быстрее клиентов Yellowstone gRPC для JavaScript, максимальная скорость которых составляет 30 МБ/с.

**Обнаружение событий в 4 раза быстрее**: благодаря архитектуре на базе Rust клиент LaserStream для JavaScript получает и обрабатывает события в 4 раза быстрее клиентов Yellowstone. Это дает вашему приложению значительное конкурентное преимущество, позволяя обнаруживать события раньше других.

При подписках с высокой пропускной способностью клиенты Yellowstone сталкиваются с нарастающими задержками, которые со временем усугубляются. LaserStream поддерживает стабильную потоковую передачу с низкой задержкой независимо от объема данных.

### Установка

Используйте `helius-laserstream` версии 0.8.4 или новее. Более ранние выпуски содержат proto, созданный до появления транзакций v1, поэтому транзакции v1 поступают без полей `transactionConfig`. См. раздел [Поддержка транзакций v1](/docs/ru/rpc/transaction-v1).

<CodeGroup>
  ```bash npm theme={"system"}
  npm install helius-laserstream
  ```

  ```bash yarn theme={"system"}
  yarn add helius-laserstream
  ```

  ```bash pnpm theme={"system"}
  pnpm add helius-laserstream
  ```
</CodeGroup>

<Tip>
  Начните работу с LaserStream в [панели управления Helius](https://dashboard.helius.dev/laserstream). Для Mainnet требуется тариф Business или Professional, а Devnet доступен на тарифе Developer и выше. Подробнее см. в разделе [Тарифы и цены](/docs/ru/billing/plans).
</Tip>

### Быстрый старт

```typescript [expandable] theme={"system"}
import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream';

async function streamTransactions() {
  const config: LaserstreamConfig = {
    apiKey: 'YOUR_API_KEY',
    endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com',
  };

  const request: SubscribeRequest = {
    transactions: {
      "jupiter-filter": { // user-defined label for this filter
        accountInclude: ['JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4'], // Jupiter Program
        accountExclude: [],
        accountRequired: [],
        vote: false,
        failed: false
      }
    },
    commitment: CommitmentLevel.CONFIRMED,
    accounts: {},
    slots: {},
    transactionsStatus: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    accountsDataSlice: []
  };

  // The SDK handles reconnection and replay automatically
  await subscribe(config, request, 
    async (data) => {
      console.log('New transaction:', data);
    }, 
    async (error) => {
      console.error('Error:', error);
    }
  );
}

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

Начиная с `helius-laserstream` 0.4.0, клиент JavaScript поддерживает [сжатую фильтрацию учетных записей с помощью фильтров кукушки](/docs/ru/laserstream/cuckoo-filters). Это позволяет отслеживать сотни тысяч учетных записей в одной подписке вместо отправки большого явного списка публичных ключей.

### Сравнение надежности

| Возможность | LaserStream | Yellowstone |
| - | - | - |
| Автоматический повтор | ✅ Встроен | ❌ Требуется ручная реализация |
| Нарастающие задержки | ❌ Отсутствуют | ✅ При высокой пропускной способности |
| Защита от потери данных | ✅ Автоматическая | ❌ Ответственность приложения |
| Повторное подключение | ✅ Бесшовное | ❌ Нет встроенной поддержки |

## Клиент Rust

[Клиент Rust](https://github.com/helius-labs/laserstream-sdk/tree/main/rust) обеспечивает десериализацию без копирования и нативную производительность для приложений, которым требуется максимальный контроль.

Начиная с `helius-laserstream` 0.2.0, клиент Rust поддерживает [сжатую фильтрацию учетных записей с помощью фильтров кукушки](/docs/ru/laserstream/cuckoo-filters), позволяя одной подписке отслеживать сотни тысяч учетных записей. (Эта возможность также доступна в JavaScript SDK 0.4.0 и новее.)

### Установка

Используйте `helius-laserstream` версии 0.6.3 или новее. Более ранние выпуски содержат proto, созданный до появления транзакций v1, поэтому транзакции v1 поступают без полей `transactionConfig`. См. раздел [Поддержка транзакций v1](/docs/ru/rpc/transaction-v1).

```toml theme={"system"}
[dependencies]
helius-laserstream = "0.2"
tokio = { version = "1", features = ["full"] }
```

### Быстрый старт

```rust [expandable] theme={"system"}
use futures::StreamExt;
use helius_laserstream::{
    grpc::{CommitmentLevel, SubscribeRequest, SubscribeRequestFilterTransactions},
    subscribe, LaserstreamConfig,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = LaserstreamConfig {
        api_key: "YOUR_API_KEY".to_string(),
        endpoint: "https://laserstream-mainnet-ewr.helius-rpc.com".to_string(),
        ..Default::default()
    };

    let mut request = SubscribeRequest::default();
    request.transactions.insert(
        "jupiter-filter".to_string(),
        SubscribeRequestFilterTransactions {
            vote: Some(false),
            failed: Some(false),
            account_include: vec!["JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4".to_string()],
            ..Default::default()
        },
    );
    request.commitment = Some(CommitmentLevel::Confirmed as i32);

    let (stream, _handle) = subscribe(config, request);
    tokio::pin!(stream);

    while let Some(result) = stream.next().await {
        match result {
            Ok(data) => println!("New transaction: {:?}", data),
            Err(e) => eprintln!("Error: {:?}", e),
        }
    }

    Ok(())
}
```

## Клиент Go

[Клиент Go](https://github.com/helius-labs/laserstream-sdk/tree/main/go) предоставляет идиоматические интерфейсы Go.

### Установка

Используйте `laserstream-sdk/go` версии 0.2.0 или новее. Более ранние выпуски содержат proto, созданный до появления транзакций v1, поэтому транзакции v1 поступают без полей `transactionConfig`. См. раздел [Поддержка транзакций v1](/docs/ru/rpc/transaction-v1).

```bash theme={"system"}
go get github.com/helius-labs/laserstream-sdk/go
```

### Быстрый старт

```go [expandable] theme={"system"}
package main

import (
    "log"
    "os"
    "os/signal"
    "syscall"

    laserstream "github.com/helius-labs/laserstream-sdk/go"
    pb "github.com/helius-labs/laserstream-sdk/go/proto"
)

func main() {
    clientConfig := laserstream.LaserstreamConfig{
        APIKey:   "YOUR_API_KEY",
        Endpoint: "https://laserstream-mainnet-ewr.helius-rpc.com",
    }

    voteFilter := false
    failedFilter := false
    commitment := pb.CommitmentLevel_CONFIRMED

    subscriptionRequest := &pb.SubscribeRequest{
        Transactions: map[string]*pb.SubscribeRequestFilterTransactions{
            "jupiter-filter": {
                Vote:           &voteFilter,
                Failed:         &failedFilter,
                AccountInclude: []string{"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"},
            },
        },
        Commitment: &commitment,
    }

    client := laserstream.NewClient(clientConfig)

    dataCallback := func(data *pb.SubscribeUpdate) {
        log.Printf("New transaction: %+v\n", data)
    }
    errorCallback := func(err error) {
        log.Printf("Error: %v", err)
    }

    if err := client.Subscribe(subscriptionRequest, dataCallback, errorCallback); err != nil {
        log.Fatalf("Failed to subscribe: %v", err)
    }

    sigChan := make(chan os.Signal, 1)
    signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
    <-sigChan
    client.Close()
}
```

## Почему стоит перейти с Yellowstone на LaserStream

Клиенты Yellowstone имеют критические ограничения, которые будут только усугубляться по мере масштабирования Solana:

1. **Узкое место в производительности**: максимальная скорость клиентов Yellowstone для JavaScript составляет 30 МБ/с, чего недостаточно для приложений с высокой пропускной способностью
2. **Нарастающие задержки**: при подписках с высокой пропускной способностью задержка со временем увеличивается
3. **Ручной повтор**: вам необходимо самостоятельно реализовать логику повторного подключения и повтора
4. **Риск потери данных**: без встроенного повтора сбои сети приводят к пропуску транзакций

**LaserStream решает эти проблемы уже сегодня**. Производительность в 40 раз выше, автоматический повтор и гарантия отсутствия потерь данных обеспечивают конкурентоспособность вашего приложения по мере развития Solana.


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