From cb711c5efb55c749a427949c2f84e0a06d72cf33 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:18:17 +0000 Subject: [PATCH 1/4] chore(escalator): drop every 3rd tx to test NonceManager --- ethers-middleware/src/gas_escalator/mod.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/ethers-middleware/src/gas_escalator/mod.rs b/ethers-middleware/src/gas_escalator/mod.rs index 9ca6d3531..948e3928c 100644 --- a/ethers-middleware/src/gas_escalator/mod.rs +++ b/ethers-middleware/src/gas_escalator/mod.rs @@ -19,6 +19,8 @@ use ethers_providers::{interval, FromErr, Middleware, PendingTransaction, Stream #[cfg(not(target_arch = "wasm32"))] use tokio::spawn; +const RANDOM_TX_DROP_TRESHOLD: u64 = 3; + pub type ToEscalate = Arc>>; #[cfg(target_arch = "wasm32")] @@ -57,6 +59,8 @@ pub(crate) struct GasEscalatorMiddlewareInternal { /// The transactions which are currently being monitored for escalation #[allow(clippy::type_complexity)] pub txs: ToEscalate, + // need an arc-mutex for interior mutability in `send_transaction` + random_tx_drop_counter: Arc>, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -204,6 +208,15 @@ where block: Option, ) -> Result, GasEscalatorError> { let tx = tx.into(); + let random_tx_drop_counter = { + let mut lock = self.random_tx_drop_counter.lock().await; + *lock += 1; + *lock + }; + if random_tx_drop_counter % RANDOM_TX_DROP_TRESHOLD == 0 { + tracing::warn!(tx = ?tx, "Dropping random transaction"); + return Ok(PendingTransaction::new(TxHash::random(), self.inner.provider())); + } match self.inner.send_transaction(tx.clone(), block).await { Ok(pending_tx) => { @@ -250,8 +263,11 @@ where let txs: ToEscalate = Default::default(); - let this = - Arc::new(GasEscalatorMiddlewareInternal { inner: inner.clone(), txs: txs.clone() }); + let this = Arc::new(GasEscalatorMiddlewareInternal { + inner: inner.clone(), + txs: txs.clone(), + random_tx_drop_counter: Arc::new(Mutex::new(0)), + }); let esc = EscalationTask { inner, escalator, frequency, txs }; From ff9c2ae34435f570d4ce6eae47fcb644ddd38b21 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Tue, 7 Jan 2025 17:34:20 +0000 Subject: [PATCH 2/4] 4 --- ethers-middleware/src/gas_escalator/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethers-middleware/src/gas_escalator/mod.rs b/ethers-middleware/src/gas_escalator/mod.rs index 948e3928c..5ef59dab4 100644 --- a/ethers-middleware/src/gas_escalator/mod.rs +++ b/ethers-middleware/src/gas_escalator/mod.rs @@ -19,7 +19,7 @@ use ethers_providers::{interval, FromErr, Middleware, PendingTransaction, Stream #[cfg(not(target_arch = "wasm32"))] use tokio::spawn; -const RANDOM_TX_DROP_TRESHOLD: u64 = 3; +const RANDOM_TX_DROP_TRESHOLD: u64 = 4; pub type ToEscalate = Arc>>; From f21d9d48993cde80e302b6ac511b95a3e6ad1672 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:54:13 +0000 Subject: [PATCH 3/4] chore: resync every 3, drop every 4 --- ethers-middleware/src/nonce_manager.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethers-middleware/src/nonce_manager.rs b/ethers-middleware/src/nonce_manager.rs index aed41490f..be90a8558 100644 --- a/ethers-middleware/src/nonce_manager.rs +++ b/ethers-middleware/src/nonce_manager.rs @@ -5,7 +5,7 @@ use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use thiserror::Error; use tracing::instrument; -const DEFAULT_TX_COUNT_FOR_RESYNC: u64 = 10; +const DEFAULT_TX_COUNT_FOR_RESYNC: u64 = 3; #[derive(Debug)] /// Middleware used for calculating nonces locally, useful for signing multiple From 69693142c9e9169625cdf8a5cf2d5260e5876881 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:58:11 +0000 Subject: [PATCH 4/4] testing w more realistic params --- ethers-middleware/src/gas_escalator/mod.rs | 2 +- ethers-middleware/src/nonce_manager.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ethers-middleware/src/gas_escalator/mod.rs b/ethers-middleware/src/gas_escalator/mod.rs index 5ef59dab4..948e3928c 100644 --- a/ethers-middleware/src/gas_escalator/mod.rs +++ b/ethers-middleware/src/gas_escalator/mod.rs @@ -19,7 +19,7 @@ use ethers_providers::{interval, FromErr, Middleware, PendingTransaction, Stream #[cfg(not(target_arch = "wasm32"))] use tokio::spawn; -const RANDOM_TX_DROP_TRESHOLD: u64 = 4; +const RANDOM_TX_DROP_TRESHOLD: u64 = 3; pub type ToEscalate = Arc>>; diff --git a/ethers-middleware/src/nonce_manager.rs b/ethers-middleware/src/nonce_manager.rs index be90a8558..f844f8e37 100644 --- a/ethers-middleware/src/nonce_manager.rs +++ b/ethers-middleware/src/nonce_manager.rs @@ -5,7 +5,7 @@ use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use thiserror::Error; use tracing::instrument; -const DEFAULT_TX_COUNT_FOR_RESYNC: u64 = 3; +const DEFAULT_TX_COUNT_FOR_RESYNC: u64 = 7; #[derive(Debug)] /// Middleware used for calculating nonces locally, useful for signing multiple