different polling for different chains
This commit is contained in:
parent
5be5128c93
commit
1aefcf166d
@ -71,13 +71,30 @@ impl Web3Connections {
|
|||||||
let (pending_tx_id_sender, pending_tx_id_receiver) = flume::unbounded();
|
let (pending_tx_id_sender, pending_tx_id_receiver) = flume::unbounded();
|
||||||
let (block_sender, block_receiver) = flume::unbounded::<BlockAndRpc>();
|
let (block_sender, block_receiver) = flume::unbounded::<BlockAndRpc>();
|
||||||
|
|
||||||
|
// TODO: query the rpc to get the actual expected block time, or get from config?
|
||||||
|
let expected_block_time_ms = match chain_id {
|
||||||
|
// ethereum
|
||||||
|
1 => 12_000,
|
||||||
|
// polygon
|
||||||
|
137 => 2_000,
|
||||||
|
// fantom
|
||||||
|
250 => 1_000,
|
||||||
|
// arbitrum
|
||||||
|
42161 => 0_500,
|
||||||
|
// anything else
|
||||||
|
_ => {
|
||||||
|
warn!("unexpected chain_id. polling every {} seconds", 10);
|
||||||
|
10_000
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let http_interval_sender = if http_client.is_some() {
|
let http_interval_sender = if http_client.is_some() {
|
||||||
let (sender, receiver) = broadcast::channel(1);
|
let (sender, receiver) = broadcast::channel(1);
|
||||||
|
|
||||||
drop(receiver);
|
drop(receiver);
|
||||||
|
|
||||||
// TODO: what interval? follow a websocket also? maybe by watching synced connections with a timeout. will need debounce
|
// TODO: what interval? follow a websocket also? maybe by watching synced connections with a timeout. will need debounce
|
||||||
let mut interval = interval(Duration::from_secs(13));
|
let mut interval = interval(Duration::from_millis(expected_block_time_ms));
|
||||||
interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
|
interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
|
||||||
|
|
||||||
let sender = Arc::new(sender);
|
let sender = Arc::new(sender);
|
||||||
|
@ -35,7 +35,7 @@ impl Web3Provider {
|
|||||||
// TODO: dry this up (needs https://github.com/gakonst/ethers-rs/issues/592)
|
// TODO: dry this up (needs https://github.com/gakonst/ethers-rs/issues/592)
|
||||||
// TODO: i don't think this interval matters for our uses, but we should probably set it to like `block time / 2`
|
// TODO: i don't think this interval matters for our uses, but we should probably set it to like `block time / 2`
|
||||||
ethers::providers::Provider::new(provider)
|
ethers::providers::Provider::new(provider)
|
||||||
.interval(Duration::from_secs(13))
|
.interval(Duration::from_secs(12))
|
||||||
.into()
|
.into()
|
||||||
} else if url_str.starts_with("ws") {
|
} else if url_str.starts_with("ws") {
|
||||||
let provider = ethers::providers::Ws::connect(url_str).await?;
|
let provider = ethers::providers::Ws::connect(url_str).await?;
|
||||||
|
Loading…
Reference in New Issue
Block a user