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 diff --git a/src/services/balance_transfer.rs b/src/services/balance_transfer.rs index bf70044..7cc98b0 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(2u64); + + 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,