/// poll an http rpc
use std::{str::FromStr, time::Duration};
use web3_proxy::prelude::anyhow;
use web3_proxy::prelude::ethers::prelude::*;
use web3_proxy::prelude::fdlimit;
use web3_proxy::prelude::tokio;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    fdlimit::raise_fd_limit()?;

    // erigon does not support most filters
    // let url = "http://10.11.12.16:8545";
    // geth
    let url = "http://10.11.12.16:8545";

    println!("Watching blocks from {:?}", url);

    let provider = Http::from_str(url)?;

    let provider = Provider::new(provider).interval(Duration::from_secs(1));

    let mut stream = provider.watch_blocks().await?;
    while let Some(block_number) = stream.next().await {
        let block = provider.get_block(block_number).await?.unwrap();
        println!(
            "{:?} = Ts: {:?}, block number: {}",
            block.hash.unwrap(),
            block.timestamp,
            block.number.unwrap(),
        );
    }

    Ok(())
}
