断开连接时自动重播
LaserStream 客户端通过槽号持续跟踪您的流媒体位置。如果发生断开连接——无论是由于网络问题、服务器维护还是其他原因——客户端会自动重新连接并从您上次处理的槽位恢复流媒体。您永远不会丢失数据,永远不会错过交易,也不需要编写重新连接逻辑。
JavaScript/TypeScript 客户端
我们强烈建议为 JavaScript 应用切换到 LaserStream SDK。 如果您当前使用 Yellowstone gRPC 客户端,您将会遇到逐渐增加的流延迟和性能瓶颈,这些问题会随着时间的推移而加剧。LaserStream 客户端的性能余量确保您的应用可以随网络扩展,并完全消除这些问题。
JavaScript 客户端 使用原生 Rust 绑定实现 1.3GB/s 的吞吐量——比 Yellowstone gRPC JavaScript 客户端的最大 30MB/s 快 40 倍以上。
4倍更快的事件检测:得益于其基于Rust的架构,LaserStream JavaScript客户端接收和处理事件的速度比Yellowstone客户端快4倍,使您的应用程序在事件检测上具有显著的竞争优势。
在高带宽订阅中,Yellowstone客户端会经历随时间累积的渐进延迟。LaserStream则无论数据量如何,始终保持一致的低延迟流传输。
npm install helius-laserstream
有兴趣尝试 LaserStream 吗?申请2天试用;我们会审核每个申请。
快速开始
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);
可靠性比较
| 功能 | LaserStream | Yellowstone |
|---|
| 自动重播 | ✅ 内置 | ❌ 需要手动实现 |
| 渐进延迟 | ❌ 无 | ✅ 在高带宽下 |
| 数据丢失保护 | ✅ 自动 | ❌ 应用程序负责 |
| 重连 | ✅ 无缝 | ❌ 无内置支持 |
Rust 客户端
Rust 客户端提供零拷贝反序列化和本机性能,适用于需要最大控制的应用程序。
[dependencies]
helius-laserstream = "0.1"
tokio = { version = "1", features = ["full"] }
快速开始
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 客户端提供惯用的 Go 接口。
go get github.com/helius-labs/laserstream-sdk/go
快速开始
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 扩展时变得更加严重:
- 性能瓶颈:Yellowstone JavaScript 客户端的最大速度为 30MB/s —— 对于高吞吐量应用不足
- 渐进延迟:在高带宽订阅中,延迟会随着时间增加
- 手动重播:您必须自行实现重连和重播逻辑
- 数据丢失风险:没有内置重播,网络中断意味着错过交易
LaserStream今天就解决了这些问题。通过40倍的性能提升、自动重播和零数据丢失保证,迁移到LaserStream确保您的应用程序在Solana发展过程中保持竞争力。