/// subscribe to a websocket rpc use ethers::prelude::*; use std::time::Duration; #[tokio::main] async fn main() -> anyhow::Result<()> { // install global collector configured based on RUST_LOG env var. tracing_subscriber::fmt() .with_env_filter(tracing_subscriber::EnvFilter::from_default_env()) .compact() .init(); fdlimit::raise_fd_limit(); // erigon // let url = "ws://10.11.12.16:8548"; // geth let url = "ws://10.11.12.16:8546"; println!("Subscribing to blocks from {}", url); let provider = Ws::connect(url).await?; let provider = Provider::new(provider).interval(Duration::from_secs(1)); let mut stream = provider.subscribe_blocks().await?; while let Some(block) = stream.next().await { println!( "{:?} = Ts: {:?}, block number: {}", block.hash.unwrap(), block.timestamp, block.number.unwrap(), ); } Ok(()) }