pub struct HeliusStream { /* private fields */ }Expand description
A resilient Helius WebSocket client.
Subscribes to Solana account updates and tracks health (gaps, staleness,
reconnect attempts). Synchronous; if you need async, wrap calls in
tokio::task::spawn_blocking.
Implementations§
Source§impl HeliusStream
impl HeliusStream
Sourcepub fn connect(config: StreamConfig) -> Result<Self, StreamError>
pub fn connect(config: StreamConfig) -> Result<Self, StreamError>
Open a WebSocket connection to the configured endpoint.
Examples found in repository?
examples/basic_stream.rs (line 21)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // No logger init — keeps example dependency-free.
14 // The crate uses `log` facade; to see internal logs, add env_logger
15 // (or any log backend) to your binary's Cargo.toml and init here.
16
17 let api_key = std::env::var("HELIUS_API_KEY")
18 .map_err(|_| "set HELIUS_API_KEY in environment")?;
19
20 let config = StreamConfig::mainnet(api_key);
21 let mut stream = HeliusStream::connect(config)?;
22
23 println!("[INIT] subscribing to USDC mint");
24 stream.subscribe_account_b58(USDC_MINT)?;
25
26 let mut received = 0;
27 while let Some(update) = stream.next_update() {
28 received += 1;
29 println!(
30 "[UPDATE] slot={} lamports={} data_bytes={} safe={} gap_rate={:.3}",
31 update.slot,
32 update.lamports,
33 update.data.len(),
34 stream.is_safe_for_simulation(),
35 stream.health().gap_rate(),
36 );
37 if received >= 10 {
38 println!("[DONE] received 10 updates, exiting");
39 break;
40 }
41 }
42 Ok(())
43}Sourcepub fn subscribe_account(&mut self, pubkey: Pubkey) -> Result<(), StreamError>
pub fn subscribe_account(&mut self, pubkey: Pubkey) -> Result<(), StreamError>
Subscribe to account updates for a 32-byte pubkey.
Sourcepub fn subscribe_account_b58(
&mut self,
addr: &str,
) -> Result<Pubkey, StreamError>
pub fn subscribe_account_b58( &mut self, addr: &str, ) -> Result<Pubkey, StreamError>
Convenience: subscribe by base58 string.
Examples found in repository?
examples/basic_stream.rs (line 24)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // No logger init — keeps example dependency-free.
14 // The crate uses `log` facade; to see internal logs, add env_logger
15 // (or any log backend) to your binary's Cargo.toml and init here.
16
17 let api_key = std::env::var("HELIUS_API_KEY")
18 .map_err(|_| "set HELIUS_API_KEY in environment")?;
19
20 let config = StreamConfig::mainnet(api_key);
21 let mut stream = HeliusStream::connect(config)?;
22
23 println!("[INIT] subscribing to USDC mint");
24 stream.subscribe_account_b58(USDC_MINT)?;
25
26 let mut received = 0;
27 while let Some(update) = stream.next_update() {
28 received += 1;
29 println!(
30 "[UPDATE] slot={} lamports={} data_bytes={} safe={} gap_rate={:.3}",
31 update.slot,
32 update.lamports,
33 update.data.len(),
34 stream.is_safe_for_simulation(),
35 stream.health().gap_rate(),
36 );
37 if received >= 10 {
38 println!("[DONE] received 10 updates, exiting");
39 break;
40 }
41 }
42 Ok(())
43}Sourcepub fn next_update(&mut self) -> Option<AccountUpdate>
pub fn next_update(&mut self) -> Option<AccountUpdate>
Block until the next account update arrives, or return None on close.
Examples found in repository?
examples/basic_stream.rs (line 27)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // No logger init — keeps example dependency-free.
14 // The crate uses `log` facade; to see internal logs, add env_logger
15 // (or any log backend) to your binary's Cargo.toml and init here.
16
17 let api_key = std::env::var("HELIUS_API_KEY")
18 .map_err(|_| "set HELIUS_API_KEY in environment")?;
19
20 let config = StreamConfig::mainnet(api_key);
21 let mut stream = HeliusStream::connect(config)?;
22
23 println!("[INIT] subscribing to USDC mint");
24 stream.subscribe_account_b58(USDC_MINT)?;
25
26 let mut received = 0;
27 while let Some(update) = stream.next_update() {
28 received += 1;
29 println!(
30 "[UPDATE] slot={} lamports={} data_bytes={} safe={} gap_rate={:.3}",
31 update.slot,
32 update.lamports,
33 update.data.len(),
34 stream.is_safe_for_simulation(),
35 stream.health().gap_rate(),
36 );
37 if received >= 10 {
38 println!("[DONE] received 10 updates, exiting");
39 break;
40 }
41 }
42 Ok(())
43}Sourcepub fn check_staleness(&mut self)
pub fn check_staleness(&mut self)
Re-check freshness and update internal state if the stream went stale.
Sourcepub fn is_safe_for_simulation(&self) -> bool
pub fn is_safe_for_simulation(&self) -> bool
True if state is Connected or mildly Degraded (≤2 slot gap).
Use this as a circuit breaker before acting on data.
Examples found in repository?
examples/basic_stream.rs (line 34)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // No logger init — keeps example dependency-free.
14 // The crate uses `log` facade; to see internal logs, add env_logger
15 // (or any log backend) to your binary's Cargo.toml and init here.
16
17 let api_key = std::env::var("HELIUS_API_KEY")
18 .map_err(|_| "set HELIUS_API_KEY in environment")?;
19
20 let config = StreamConfig::mainnet(api_key);
21 let mut stream = HeliusStream::connect(config)?;
22
23 println!("[INIT] subscribing to USDC mint");
24 stream.subscribe_account_b58(USDC_MINT)?;
25
26 let mut received = 0;
27 while let Some(update) = stream.next_update() {
28 received += 1;
29 println!(
30 "[UPDATE] slot={} lamports={} data_bytes={} safe={} gap_rate={:.3}",
31 update.slot,
32 update.lamports,
33 update.data.len(),
34 stream.is_safe_for_simulation(),
35 stream.health().gap_rate(),
36 );
37 if received >= 10 {
38 println!("[DONE] received 10 updates, exiting");
39 break;
40 }
41 }
42 Ok(())
43}pub fn state(&self) -> &StreamState
Sourcepub fn health(&self) -> &StreamHealth
pub fn health(&self) -> &StreamHealth
Examples found in repository?
examples/basic_stream.rs (line 35)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 // No logger init — keeps example dependency-free.
14 // The crate uses `log` facade; to see internal logs, add env_logger
15 // (or any log backend) to your binary's Cargo.toml and init here.
16
17 let api_key = std::env::var("HELIUS_API_KEY")
18 .map_err(|_| "set HELIUS_API_KEY in environment")?;
19
20 let config = StreamConfig::mainnet(api_key);
21 let mut stream = HeliusStream::connect(config)?;
22
23 println!("[INIT] subscribing to USDC mint");
24 stream.subscribe_account_b58(USDC_MINT)?;
25
26 let mut received = 0;
27 while let Some(update) = stream.next_update() {
28 received += 1;
29 println!(
30 "[UPDATE] slot={} lamports={} data_bytes={} safe={} gap_rate={:.3}",
31 update.slot,
32 update.lamports,
33 update.data.len(),
34 stream.is_safe_for_simulation(),
35 stream.health().gap_rate(),
36 );
37 if received >= 10 {
38 println!("[DONE] received 10 updates, exiting");
39 break;
40 }
41 }
42 Ok(())
43}pub fn reconnect_policy_mut(&mut self) -> &mut ReconnectPolicy
pub fn subscription_count(&self) -> usize
pub fn pending_count(&self) -> usize
Auto Trait Implementations§
impl Freeze for HeliusStream
impl !RefUnwindSafe for HeliusStream
impl Send for HeliusStream
impl Sync for HeliusStream
impl Unpin for HeliusStream
impl UnsafeUnpin for HeliusStream
impl !UnwindSafe for HeliusStream
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more