From 1f654213b6922ab9797f21d907efacb54e960e15 Mon Sep 17 00:00:00 2001 From: kbizikav <132550763+kbizikav@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:03:40 +0700 Subject: [PATCH 1/3] feat: estimate gas & add buffer for transfer --- src/services/balance_transfer.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/services/balance_transfer.rs b/src/services/balance_transfer.rs index bf70044..9e4ff04 100644 --- a/src/services/balance_transfer.rs +++ b/src/services/balance_transfer.rs @@ -21,18 +21,26 @@ pub async fn balance_transfer( let signer = get_provider_with_signer(provider, deposit_private_key); let deposit_address = get_address_from_private_key(deposit_private_key); let balance = provider.get_balance(deposit_address).await?; - // todo: use estimate gas - let gas_limit = U256::from(10000); - let gas_price = U256::from(provider.get_gas_price().await?); - if balance < gas_price * gas_limit { + // Estimate gas and fees to avoid under-budgeting and leave room for gas bumps. + let estimate_request = TransactionRequest::default().to(to_address); + let estimated_gas = provider.estimate_gas(estimate_request).await?; + let fee_estimation = signer.estimate_eip1559_fees().await?; + let gas_limit = U256::from(estimated_gas); + let max_fee_per_gas = U256::from(fee_estimation.max_fee_per_gas); + let gas_budget = gas_limit * max_fee_per_gas * U256::from(125u64) / U256::from(100u64); + + if balance <= gas_budget { print_warning("Insufficient balance to transfer"); return Ok(()); } - let transfer_amount = balance - gas_price * gas_limit; + let transfer_amount = balance - gas_budget; let tx_request = TransactionRequest::default() .to(to_address) - .value(transfer_amount); + .value(transfer_amount) + .gas_limit(estimated_gas) + .max_fee_per_gas(fee_estimation.max_fee_per_gas) + .max_priority_fee_per_gas(fee_estimation.max_priority_fee_per_gas); send_transaction_with_gas_bump( provider, signer, From e278524f69255d110bd1eeb47a3e3aeffd2dd4cb Mon Sep 17 00:00:00 2001 From: kbizikav <132550763+kbizikav@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:10:01 +0700 Subject: [PATCH 2/3] feat: add double buffer --- src/services/balance_transfer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/balance_transfer.rs b/src/services/balance_transfer.rs index 9e4ff04..7cc98b0 100644 --- a/src/services/balance_transfer.rs +++ b/src/services/balance_transfer.rs @@ -28,7 +28,7 @@ pub async fn balance_transfer( let fee_estimation = signer.estimate_eip1559_fees().await?; let gas_limit = U256::from(estimated_gas); let max_fee_per_gas = U256::from(fee_estimation.max_fee_per_gas); - let gas_budget = gas_limit * max_fee_per_gas * U256::from(125u64) / U256::from(100u64); + let gas_budget = gas_limit * max_fee_per_gas * U256::from(2u64); if balance <= gas_budget { print_warning("Insufficient balance to transfer"); From d6a7d32d373ba6cb00b8888fa10989efe7f53355 Mon Sep 17 00:00:00 2001 From: kbizikav <132550763+kbizikav@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:21:59 +0700 Subject: [PATCH 3/3] chore: update version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f39cd1f..e787dc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2716,7 +2716,7 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mining-cli" -version = "1.3.4" +version = "1.3.5" dependencies = [ "aes-gcm", "alloy", diff --git a/Cargo.toml b/Cargo.toml index 86dd040..5fd8b94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mining-cli" -version = "1.3.4" +version = "1.3.5" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html