Rust
helius-laserstream-rust
Rust client for Laserstream. Features automatic reconnection with slot tracking - if connection is lost, the client automatically reconnects and continues streaming from the last processed slot, ensuring no data is missed.
Installation
Add the dependency to your Cargo.toml:
[dependencies]
helius-laserstream = "0.0.1"
Or use cargo add:
cargo add helius-laserstream
Usage Example
use helius_laserstream::{
grpc::{
CommitmentLevel, SubscribeRequest, SubscribeRequestFilterTransactions,
},
subscribe, LaserstreamConfig,
};
use std::collections::HashMap;
use futures_util::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = LaserstreamConfig {
api_key: "your-api-key".to_string(),
endpoint: "your-endpoint".parse()?,
};
let mut transactions_filter = HashMap::new();
transactions_filter.insert(
"token_txs".to_string(),
SubscribeRequestFilterTransactions {
account_include: vec!["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".to_string()],
vote: Some(false),
failed: Some(false),
..Default::default()
},
);
let request = SubscribeRequest {
transactions: transactions_filter,
commitment: Some(CommitmentLevel::Confirmed as i32),
accounts: HashMap::new(),
slots: HashMap::new(),
transactions_status: HashMap::new(),
entry: HashMap::new(),
blocks: HashMap::new(),
blocks_meta: HashMap::new(),
accounts_data_slice: vec![],
ping: None,
from_slot: None, };
println!("Connecting and subscribing...");
let stream = subscribe(config, request);
futures::pin_mut!(stream);
while let Some(result) = stream.next().await {
match result {
Ok(update) => {
println!("Received update: {:?}", update);
}
Err(e) => {
eprintln!("Stream error: {}. Will attempt reconnection.", e);
}
}
}
println!("Stream finished (likely due to max reconnection attempts or manual stop).");
Ok(())
}
License
MIT