Implement MultiProvider Client which takes multiple Evm provider as input and processes request in a round-robin method.
/// MultiProvider is a JsonRpcClient that will round-robin requests to the underlying providers.
#[derive(Debug, Clone)]
pub struct MultiProvider<P> {
providers: Arc<Vec<P>>,
last_used: Arc<AtomicUsize>,
}
impl<P> MultiProvider<P> {
pub fn new(providers: Arc<Vec<P>>) -> Self {
Self {
providers,
last_used: Default::default(),
}
}
}
MultiProvider implements JsonRpcClient which is then consumed by RetryClient
let multi_provider = MultiProvider::new(Arc::new(providers));
// Wrap the provider with a retry client.
let retry_client = RetryClientBuilder::default()
.timeout_retries(u32::MAX)
.rate_limit_retries(u32::MAX)
.build(multi_provider, WebbHttpRetryPolicy::boxed());
Summary of changes
http-endoint
config for EVM chains to support both single and Multpli RPC endpoint inputMultiProvider
Client which takes multiple Evm provider as input and processes request in a round-robin method.MultiProvider implements
JsonRpcClient
which is then consumed by RetryClientReference issue to close (if applicable)
Code Checklist