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

# Klien LaserStream

> SDK berperforma tinggi untuk streaming gRPC dengan pemutaran ulang otomatis dan tanpa kehilangan data

## Pemutaran Ulang Otomatis saat Koneksi Terputus

Klien LaserStream terus melacak posisi streaming Anda berdasarkan nomor slot. Jika koneksi terputus—akibat masalah jaringan, pemeliharaan server, atau penyebab lainnya—klien akan otomatis terhubung kembali dan melanjutkan streaming dari slot terakhir yang Anda proses. Anda tidak akan kehilangan data atau melewatkan transaksi, dan tidak perlu menulis logika untuk menghubungkan kembali.

## Klien JavaScript/TypeScript

<Warning>
  **Kami sangat menyarankan Anda beralih ke LaserStream SDK untuk aplikasi JavaScript.** Jika saat ini menggunakan klien gRPC Yellowstone, Anda akan mengalami penundaan streaming progresif dan hambatan performa yang terus menumpuk seiring waktu. Kapasitas performa tambahan klien LaserStream memastikan aplikasi Anda dapat berkembang bersama jaringan dan sepenuhnya mengatasi masalah ini.
</Warning>

[Klien JavaScript](https://github.com/helius-labs/laserstream-sdk/tree/main/javascript) menggunakan binding Rust native untuk mencapai throughput 1,3 GB/dtk—lebih dari 40 kali lebih cepat daripada klien JavaScript gRPC Yellowstone yang memiliki batas maksimum 30 MB/dtk.

**Deteksi peristiwa 4 kali lebih cepat**: Berkat arsitektur berbasis Rust, klien JavaScript LaserStream menerima dan memproses peristiwa 4 kali lebih cepat daripada klien Yellowstone. Aplikasi Anda pun mendapatkan keunggulan kompetitif yang signifikan karena dapat melihat peristiwa lebih dahulu.

Pada langganan dengan bandwidth tinggi, klien Yellowstone mengalami penundaan progresif yang terus menumpuk seiring waktu. LaserStream mempertahankan streaming yang konsisten dan berlatensi rendah berapa pun volume datanya.

### Instalasi

Gunakan `helius-laserstream` 0.8.4 atau yang lebih baru. Rilis sebelumnya menyertakan proto yang dibuat sebelum transaction v1, sehingga transaksi v1 diterima tanpa kolom `transactionConfig`. Lihat [Dukungan transaction v1](/docs/id/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>
  Mulai gunakan LaserStream dari [Dasbor Helius](https://dashboard.helius.dev/laserstream) Anda. Mainnet memerlukan paket Business atau Professional; Devnet tersedia pada paket Developer dan yang lebih tinggi. Lihat [Paket & Harga](/docs/id/billing/plans) untuk detailnya.
</Tip>

### Mulai Cepat

```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);
```

Mulai `helius-laserstream` 0.4.0, klien JavaScript mendukung [pemfilteran akun terkompresi melalui cuckoo filter](/docs/id/laserstream/cuckoo-filters)—lacak ratusan ribu akun dalam satu langganan, tanpa perlu mengirim daftar pubkey eksplisit yang besar.

### Perbandingan Keandalan

| Fitur                             | LaserStream      | Yellowstone                      |
| --------------------------------- | ---------------- | -------------------------------- |
| Pemutaran Ulang Otomatis          | ✅ Bawaan         | ❌ Memerlukan implementasi manual |
| Penundaan Progresif               | ❌ Tidak ada      | ✅ Pada bandwidth tinggi          |
| Perlindungan dari Kehilangan Data | ✅ Otomatis       | ❌ Tanggung jawab aplikasi        |
| Koneksi Ulang                     | ✅ Tanpa gangguan | ❌ Tidak ada dukungan bawaan      |

## Klien Rust

[Klien Rust](https://github.com/helius-labs/laserstream-sdk/tree/main/rust) menyediakan deserialisasi zero-copy dan performa native untuk aplikasi yang memerlukan kontrol maksimal.

Mulai `helius-laserstream` 0.2.0, klien Rust mendukung [pemfilteran akun terkompresi melalui cuckoo filter](/docs/id/laserstream/cuckoo-filters), sehingga satu langganan dapat melacak ratusan ribu akun. (Juga tersedia di JavaScript SDK 0.4.0+.)

### Instalasi

Gunakan `helius-laserstream` 0.6.3 atau yang lebih baru. Rilis sebelumnya menyertakan proto yang dibuat sebelum transaction v1, sehingga transaksi v1 diterima tanpa kolom `transactionConfig`. Lihat [Dukungan transaction v1](/docs/id/rpc/transaction-v1).

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

### Mulai Cepat

```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(())
}
```

## Klien Go

[Klien Go](https://github.com/helius-labs/laserstream-sdk/tree/main/go) menyediakan antarmuka Go yang idiomatis.

### Instalasi

Gunakan `laserstream-sdk/go` 0.2.0 atau yang lebih baru. Rilis sebelumnya menyertakan proto yang dibuat sebelum transaction v1, sehingga transaksi v1 diterima tanpa kolom `transactionConfig`. Lihat [Dukungan transaction v1](/docs/id/rpc/transaction-v1).

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

### Mulai Cepat

```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()
}
```

## Alasan Bermigrasi dari Yellowstone ke LaserStream

Klien Yellowstone menghadapi keterbatasan penting yang akan makin memburuk seiring perkembangan skala Solana:

1. **Hambatan Performa**: Klien JavaScript Yellowstone memiliki batas maksimum 30 MB/dtk—tidak memadai untuk aplikasi dengan throughput tinggi
2. **Penundaan Progresif**: Latensi terus menumpuk seiring waktu pada langganan dengan bandwidth tinggi
3. **Pemutaran Ulang Manual**: Anda harus menerapkan sendiri logika koneksi ulang dan pemutaran ulang
4. **Risiko Kehilangan Data**: Tanpa pemutaran ulang bawaan, gangguan jaringan menyebabkan transaksi terlewat

**LaserStream mengatasi masalah ini sekarang juga**. Dengan performa 40 kali lebih baik, pemutaran ulang otomatis, dan jaminan tanpa kehilangan data, migrasi ke LaserStream memastikan aplikasi Anda tetap kompetitif seiring perkembangan Solana.
