ethers-rs/examples/quorum.rs

33 lines
1.1 KiB
Rust

//! Example usage for the `QuorumProvider` that requests multiple backends and only returns
//! a value if the configured `Quorum` was reached.
use ethers::{prelude::*, utils::Ganache};
use std::{str::FromStr, time::Duration};
#[tokio::main]
async fn main() -> eyre::Result<()> {
let ganache = Ganache::new().spawn();
// create a quorum provider with some providers
let quorum = QuorumProvider::dyn_rpc()
.add_provider(WeightedProvider::new(Box::new(Http::from_str(&ganache.endpoint())?)))
.add_provider(WeightedProvider::with_weight(
Box::new(Ws::connect(ganache.ws_endpoint()).await?),
2,
))
.add_provider(WeightedProvider::with_weight(
Box::new(Ws::connect(ganache.ws_endpoint()).await?),
2,
))
// the quorum provider will yield the response if >50% of the weighted inner provider
// returned the same value
.quorum(Quorum::Majority)
.build();
let provider = Provider::quorum(quorum).interval(Duration::from_millis(10u64));
dbg!(provider.get_accounts().await?);
Ok(())
}