tangle-network / relayer

🕸️ The Webb Relayer Network
https://webb-tools.github.io/relayer/
Apache License 2.0
22 stars 13 forks source link

Bundle Multiple EVM Providers #531

Closed salman01zp closed 1 year ago

salman01zp commented 1 year ago

Summary of changes

/// configuration for adding http endpoints.
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(untagged)]
pub enum HttpEndpoint {
    /// Single http endpoint
    Single(RpcUrl),
    /// Multiple http endpoints
    Multiple(Vec<RpcUrl>),
}

/// 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());

Reference issue to close (if applicable)


Code Checklist