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

# Client LaserStream

> Các SDK hiệu năng cao để truyền phát gRPC với tính năng tự động phát lại và không làm mất dữ liệu

## Tự động phát lại khi mất kết nối

Các client LaserStream liên tục theo dõi vị trí truyền phát theo số slot. Nếu xảy ra mất kết nối — do sự cố mạng, bảo trì máy chủ hoặc bất kỳ nguyên nhân nào khác — client sẽ tự động kết nối lại và tiếp tục truyền phát từ slot được xử lý gần nhất. Bạn không bao giờ mất dữ liệu, bỏ lỡ giao dịch hoặc phải tự viết logic kết nối lại.

## Client JavaScript/TypeScript

<Warning>
  **Bạn nên chuyển sang LaserStream SDK cho các ứng dụng JavaScript.** Nếu hiện đang sử dụng các client Yellowstone gRPC, bạn sẽ gặp tình trạng luồng ngày càng trễ và các nút thắt hiệu năng tích lũy theo thời gian. Dư địa hiệu năng của client LaserStream đảm bảo ứng dụng có thể mở rộng theo mạng và loại bỏ hoàn toàn các vấn đề này.
</Warning>

[Client JavaScript](https://github.com/helius-labs/laserstream-sdk/tree/main/javascript) sử dụng các liên kết Rust gốc để đạt thông lượng 1,3 GB/s – nhanh hơn gấp 40 lần so với các client JavaScript Yellowstone gRPC có thông lượng tối đa 30 MB/s.

**Phát hiện sự kiện nhanh hơn gấp 4 lần**: Nhờ kiến trúc dựa trên Rust, client JavaScript của LaserStream nhận và xử lý sự kiện nhanh hơn gấp 4 lần so với các client Yellowstone, mang lại cho ứng dụng của bạn lợi thế cạnh tranh đáng kể trong việc phát hiện sự kiện trước tiên.

Với các gói đăng ký băng thông cao, client Yellowstone gặp tình trạng độ trễ tăng dần và tích lũy theo thời gian. LaserStream duy trì khả năng truyền phát ổn định với độ trễ thấp bất kể khối lượng dữ liệu.

### Cài đặt

Sử dụng `helius-laserstream` phiên bản 0.8.4 trở lên. Các bản phát hành trước đi kèm proto có từ trước transaction v1, vì vậy các giao dịch v1 được gửi đến mà không có trường `transactionConfig`. Xem [Hỗ trợ transaction v1](/docs/vi/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>
  Bắt đầu sử dụng LaserStream từ [Bảng điều khiển Helius](https://dashboard.helius.dev/laserstream). Mainnet yêu cầu gói Business hoặc Professional; Devnet khả dụng với gói Developer trở lên. Xem [Gói dịch vụ và giá](/docs/vi/billing/plans) để biết chi tiết.
</Tip>

### Bắt đầu nhanh

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

Kể từ `helius-laserstream` 0.4.0, client JavaScript hỗ trợ [lọc tài khoản nén bằng bộ lọc cuckoo](/docs/vi/laserstream/cuckoo-filters) — theo dõi hàng trăm nghìn tài khoản trong một gói đăng ký duy nhất thay vì gửi một danh sách pubkey tường minh lớn.

### So sánh độ tin cậy

| Tính năng               | LaserStream    | Yellowstone                      |
| ----------------------- | -------------- | -------------------------------- |
| Tự động phát lại        | ✅ Tích hợp sẵn | ❌ Yêu cầu triển khai thủ công    |
| Độ trễ tăng dần         | ❌ Không có     | ✅ Khi băng thông cao             |
| Bảo vệ khỏi mất dữ liệu | ✅ Tự động      | ❌ Ứng dụng phải chịu trách nhiệm |
| Kết nối lại             | ✅ Liền mạch    | ❌ Không hỗ trợ tích hợp sẵn      |

## Client Rust

[Client Rust](https://github.com/helius-labs/laserstream-sdk/tree/main/rust) cung cấp khả năng giải tuần tự không sao chép và hiệu năng gốc cho các ứng dụng cần quyền kiểm soát tối đa.

Kể từ `helius-laserstream` 0.2.0, client Rust hỗ trợ [lọc tài khoản nén bằng bộ lọc cuckoo](/docs/vi/laserstream/cuckoo-filters), cho phép một gói đăng ký duy nhất theo dõi hàng trăm nghìn tài khoản. (Cũng khả dụng trong JavaScript SDK 0.4.0 trở lên.)

### Cài đặt

Sử dụng `helius-laserstream` phiên bản 0.6.3 trở lên. Các bản phát hành trước đi kèm proto có từ trước transaction v1, vì vậy các giao dịch v1 được gửi đến mà không có trường `transactionConfig`. Xem [Hỗ trợ transaction v1](/docs/vi/rpc/transaction-v1).

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

### Bắt đầu nhanh

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

## Client Go

[Client Go](https://github.com/helius-labs/laserstream-sdk/tree/main/go) cung cấp các giao diện theo quy ước của Go.

### Cài đặt

Sử dụng `laserstream-sdk/go` phiên bản 0.2.0 trở lên. Các bản phát hành trước đi kèm proto có từ trước transaction v1, vì vậy các giao dịch v1 được gửi đến mà không có trường `transactionConfig`. Xem [Hỗ trợ transaction v1](/docs/vi/rpc/transaction-v1).

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

### Bắt đầu nhanh

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

## Lý do nên chuyển từ Yellowstone sang LaserStream

Các client Yellowstone gặp phải những hạn chế nghiêm trọng và các hạn chế này sẽ chỉ trở nên tồi tệ hơn khi Solana mở rộng:

1. **Nút thắt hiệu năng**: Các client JavaScript của Yellowstone có thông lượng tối đa 30 MB/s – không đủ cho các ứng dụng có thông lượng cao
2. **Độ trễ tăng dần**: Độ trễ tích lũy theo thời gian trên các gói đăng ký băng thông cao
3. **Phát lại thủ công**: Bạn phải tự triển khai logic kết nối lại và phát lại
4. **Nguy cơ mất dữ liệu**: Nếu không có tính năng phát lại tích hợp sẵn, gián đoạn mạng sẽ khiến bạn bỏ lỡ giao dịch

**LaserStream giải quyết những vấn đề này ngay hôm nay**. Với hiệu năng cao hơn gấp 40 lần, khả năng tự động phát lại và cam kết không mất dữ liệu, việc chuyển sang LaserStream đảm bảo ứng dụng của bạn duy trì khả năng cạnh tranh khi Solana phát triển.
