alloy_provider/layers/
chain.rs1use crate::{Provider, ProviderLayer};
2use alloy_chains::NamedChain;
3use alloy_network::Network;
4use std::time::Duration;
5
6#[derive(Debug, Clone, Copy)]
11pub struct ChainLayer(NamedChain);
12
13impl ChainLayer {
14 pub const fn new(chain: NamedChain) -> Self {
16 Self(chain)
17 }
18
19 pub const fn average_blocktime_hint(&self) -> Option<Duration> {
21 self.0.average_blocktime_hint()
22 }
23}
24
25impl From<NamedChain> for ChainLayer {
26 fn from(chain: NamedChain) -> Self {
27 Self(chain)
28 }
29}
30
31impl<P, N> ProviderLayer<P, N> for ChainLayer
32where
33 P: Provider<N>,
34 N: Network,
35{
36 type Provider = P;
37
38 fn layer(&self, inner: P) -> Self::Provider {
39 if !inner.client().is_local() {
40 if let Some(avg_block_time) = self.average_blocktime_hint() {
41 let poll_interval = avg_block_time.mul_f32(0.6);
42 inner.client().set_poll_interval(poll_interval);
43 }
44 }
45 inner
46 }
47}