From 15883d340a6c3a766e0412ba0d7ab4bf77b0dfcc Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 12:37:18 -0400 Subject: [PATCH 1/4] increase pending transaction timeout --- crates/shared/src/web3/contracts/helpers/utils.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/shared/src/web3/contracts/helpers/utils.rs b/crates/shared/src/web3/contracts/helpers/utils.rs index 8dcbca1e..b09a6d82 100644 --- a/crates/shared/src/web3/contracts/helpers/utils.rs +++ b/crates/shared/src/web3/contracts/helpers/utils.rs @@ -30,6 +30,8 @@ where N: Network, D: CallDecoder + Clone, { + const PENDING_TRANSACTION_TIMEOUT: Duration = Duration::from_secs(60); + let mut tries = 0; let retry_delay = retry_delay.unwrap_or(2); @@ -54,7 +56,7 @@ where call = call .clone() .max_fee_per_gas(new_gas_price) - .max_priority_fee_per_gas(new_priority_fee); + .max_priority_fee_per_gas(new_priority_fee) } else { warn!("Could not get new gas fees, retrying with old settings."); } @@ -63,10 +65,13 @@ where match call.clone().send().await { Ok(result) => { debug!("Transaction sent, waiting for confirmation..."); - match timeout(Duration::from_secs(30), result.watch()).await { - Ok(Ok(hash)) => return Ok(hash), - Ok(Err(err)) => warn!("Transaction watch failed: {err:?}"), - Err(_) => warn!("Watch timed out, retrying transaction..."), + match result + .with_timeout(Some(PENDING_TRANSACTION_TIMEOUT)) + .watch() + .await + { + Ok(hash) => return Ok(hash), + Err(err) => warn!("Transaction watch failed: {err:?}"), } } Err(err) => { From af26a1b5b8eb9b8916b2f03f5c0a7911a5729452 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 12:41:43 -0400 Subject: [PATCH 2/4] also recheck if tx was included after sleep --- crates/shared/src/web3/contracts/helpers/utils.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crates/shared/src/web3/contracts/helpers/utils.rs b/crates/shared/src/web3/contracts/helpers/utils.rs index b09a6d82..e630600f 100644 --- a/crates/shared/src/web3/contracts/helpers/utils.rs +++ b/crates/shared/src/web3/contracts/helpers/utils.rs @@ -34,11 +34,19 @@ where let mut tries = 0; let retry_delay = retry_delay.unwrap_or(2); + let mut tx_hash = None; while tries < max_tries { if tries > 0 { tokio::time::sleep(Duration::from_secs(retry_delay)).await; + if let Some(tx_hash) = tx_hash { + let receipt = provider.get_transaction_receipt(tx_hash).await?; + if receipt.is_some() { + return Ok(tx_hash); + } + } + // On retry, always fetch fresh fee estimates from the provider. let priority_fee_res = provider.get_max_priority_fee_per_gas().await; let gas_price_res = provider.get_gas_price().await; @@ -65,6 +73,8 @@ where match call.clone().send().await { Ok(result) => { debug!("Transaction sent, waiting for confirmation..."); + tx_hash = Some(result.tx_hash()); + match result .with_timeout(Some(PENDING_TRANSACTION_TIMEOUT)) .watch() From 2398fea4ca064e5c7409c83b396ecfe15de41d59 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 13:46:32 -0400 Subject: [PATCH 3/4] fix --- crates/shared/src/web3/contracts/helpers/utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/shared/src/web3/contracts/helpers/utils.rs b/crates/shared/src/web3/contracts/helpers/utils.rs index e630600f..07a71089 100644 --- a/crates/shared/src/web3/contracts/helpers/utils.rs +++ b/crates/shared/src/web3/contracts/helpers/utils.rs @@ -9,7 +9,7 @@ use alloy::{ }; use anyhow::Result; use log::{debug, info, warn}; -use tokio::time::{timeout, Duration}; +use tokio::time::Duration; use crate::web3::wallet::WalletProvider; @@ -73,7 +73,7 @@ where match call.clone().send().await { Ok(result) => { debug!("Transaction sent, waiting for confirmation..."); - tx_hash = Some(result.tx_hash()); + tx_hash = Some(result.tx_hash().clone()); match result .with_timeout(Some(PENDING_TRANSACTION_TIMEOUT)) From d6e996bb700e5288667ab81f9981009938afd2f9 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 15:52:40 -0400 Subject: [PATCH 4/4] clippy --- crates/shared/src/web3/contracts/helpers/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/shared/src/web3/contracts/helpers/utils.rs b/crates/shared/src/web3/contracts/helpers/utils.rs index 07a71089..b6501ff9 100644 --- a/crates/shared/src/web3/contracts/helpers/utils.rs +++ b/crates/shared/src/web3/contracts/helpers/utils.rs @@ -73,7 +73,7 @@ where match call.clone().send().await { Ok(result) => { debug!("Transaction sent, waiting for confirmation..."); - tx_hash = Some(result.tx_hash().clone()); + tx_hash = Some(*result.tx_hash()); match result .with_timeout(Some(PENDING_TRANSACTION_TIMEOUT))