> ## 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 クライアント

> 自動リプレイとゼロデータ損失を備えた高性能なgRPCストリーミング用SDK

## 切断時の自動リプレイ

LaserStream クライアントは、スロット番号でストリーミングの位置を継続的に追跡します。ネットワークの問題やサーバーメンテナンス、その他の原因で切断が発生した場合、クライアントは自動的に再接続し、最後に処理されたスロットからストリーミングを再開します。データを失うことはなく、トランザクションを見逃すことも再接続ロジックを書く必要もありません。

## JavaScript/TypeScript クライアント

<Warning>
  **JavaScriptアプリにはLaserStream SDKへの切り替えを強くお勧めします。** 現在Yellowstone gRPCクライアントを使用している場合、時間とともに蓄積するストリーム遅延とパフォーマンスボトルネックを経験することになります。LaserStream クライアントのパフォーマンス余裕は、アプリがネットワークと共にスケールし、これらの問題を完全に排除します。
</Warning>

[JavaScript クライアント](https://github.com/helius-labs/laserstream-sdk/tree/main/javascript)は、ネイティブのRust バインディングを使用して1.3GB/sのスループットを達成します。これは、最大30MB/sのYellowstone gRPC JavaScriptクライアントの40倍以上です。

**4倍速いイベント検出**: Rustベースのアーキテクチャのおかげで、LaserStream JavaScriptクライアントはYellowstoneクライアントよりも4倍速くイベントを受信および処理し、イベントを最初に見るための競争優位性をアプリケーションに提供します。

高帯域幅のサブスクリプションでは、Yellowstoneクライアントは時間とともに蓄積する遅延を経験します。LaserStreamは、データ量に関係なく一貫した低遅延ストリーミングを維持します。

### インストール

<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>
  [Heliusダッシュボード](https://dashboard.helius.dev/laserstream)からLaserStreamを始めましょう。Mainnetにはビジネスまたはプロフェッショナルプランが必要です。Devnetはデベロッパー以上で利用可能です。詳細は[プランと価格](/ja/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);
```

inline JavaScript SDK 0.4.0 時点で、[ククフィルターによる圧縮アカウントフィルタリング](/ja/laserstream/cuckoo-filters)をサポートしており、大量の公開鍵リストを送信する代わりに、単一のサブスクリプションで数十万のアカウントを追跡できます。

### 信頼性の比較

| 機能      | LaserStream | Yellowstone   |
| ------- | ----------- | ------------- |
| 自動リプレイ  | ✅ 内蔵        | ❌ 手動実装が必要     |
| 進行性遅延   | ❌ なし        | ✅ 高帯域幅で発生     |
| データ損失保護 | ✅ 自動        | ❌ アプリケーションの責任 |
| 再接続     | ✅ シームレス     | ❌ 内蔵サポートなし    |

## Rust クライアント

[Rust クライアント](https://github.com/helius-labs/laserstream-sdk/tree/main/rust)は、ゼロコピーの逆シリアル化と、高度なコントロールを必要とするアプリケーションに向けたネイティブ性能を提供します。

inline JavaScript SDK 0.2.0 時点で、[ククフィルターによる圧縮アカウントフィルタリング](/ja/laserstream/cuckoo-filters)をサポートしており、単一のサブスクリプションで数十万のアカウントを追跡できます。（JavaScript SDK 0.4.0+でも利用可能です。）

### インストール

```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インターフェースを提供します。

### インストール

```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クライアントは30MB/sで限界 - 高スループットアプリケーションには不十分
2. **進行性遅延**: 高帯域幅サブスクリプションで遅延が蓄積
3. **手動リプレイ**: 再接続とリプレイロジックを自分で実装する必要があります
4. **データ損失リスク**: 組み込みリプレイがないため、ネットワーク障害時にトランザクションが失われる可能性があります

**LaserStreamはこれらの問題を今日解決します**。40倍のパフォーマンス、自動リプレイ、ゼロデータ損失保証を持ち、LaserStreamへの移行でSolanaが進化してもアプリケーションの競争力を維持できます。
