From f6a5dc9ee5c9f677166682e68344cda7aa8a24c3 Mon Sep 17 00:00:00 2001 From: Jamie Hill-Daniel Date: Thu, 19 Feb 2026 13:41:08 +0000 Subject: [PATCH] fix(cli): Fallback to a recommended fee of 0 --- cli/src/lib.rs | 38 +++++++++++++++++++------------------- cli/src/program.rs | 4 ++-- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index b1f5b11b6c..101c56c8c5 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -844,25 +844,28 @@ fn get_cluster_and_wallet(cfg_override: &ConfigOverride) -> Result<(String, Stri Ok((final_cluster, wallet_path)) } -/// Get the recommended priority fee from the RPC client -pub fn get_recommended_micro_lamport_fee(client: &RpcClient) -> Result { - let mut fees = client.get_recent_prioritization_fees(&[])?; - if fees.is_empty() { - // Fees may be empty, e.g. on localnet - return Ok(0); - } +/// Get the recommended priority fee from the RPC client, falling back to 0 if unavailable +pub fn get_recommended_micro_lamport_fee(client: &RpcClient) -> u64 { + let mut fees = match client.get_recent_prioritization_fees(&[]) { + // Fees may be empty or query may fail, e.g. on localnet + Err(_) => { + return 0; + } + Ok(f) if f.is_empty() => { + return 0; + } + Ok(f) => f, + }; // Get the median fee from the most recent 150 slots' prioritization fee fees.sort_unstable_by_key(|fee| fee.prioritization_fee); let median_index = fees.len() / 2; - let median_priority_fee = if fees.len() % 2 == 0 { + if fees.len() % 2 == 0 { (fees[median_index - 1].prioritization_fee + fees[median_index].prioritization_fee) / 2 } else { fees[median_index].prioritization_fee - }; - - Ok(median_priority_fee) + } } /// Prepend a compute unit ix, if the priority fee is greater than 0. @@ -870,11 +873,8 @@ pub fn prepend_compute_unit_ix( instructions: Vec, client: &RpcClient, priority_fee: Option, -) -> Result> { - let priority_fee = match priority_fee { - Some(fee) => fee, - None => get_recommended_micro_lamport_fee(client)?, - }; +) -> Vec { + let priority_fee = priority_fee.unwrap_or_else(|| get_recommended_micro_lamport_fee(client)); if priority_fee > 0 { let mut instructions_appended = instructions.clone(); @@ -882,9 +882,9 @@ pub fn prepend_compute_unit_ix( 0, ComputeBudgetInstruction::set_compute_unit_price(priority_fee), ); - Ok(instructions_appended) + instructions_appended } else { - Ok(instructions) + instructions } } @@ -4902,7 +4902,7 @@ fn add_recommended_deployment_solana_args( // If no priority fee is provided, calculate a recommended fee based on recent txs. if !args.contains(&"--with-compute-unit-price".to_string()) { - let priority_fee = get_recommended_micro_lamport_fee(client)?; + let priority_fee = get_recommended_micro_lamport_fee(client); augmented_args.push("--with-compute-unit-price".to_string()); augmented_args.push(priority_fee.to_string()); } diff --git a/cli/src/program.rs b/cli/src/program.rs index 777427cb40..a944f162be 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -901,7 +901,7 @@ fn deploy_program( .map_err(|e| anyhow!("Failed to create deploy instruction: {}", e))?; // Add priority fee if specified - deploy_ixs = crate::prepend_compute_unit_ix(deploy_ixs, rpc_client, priority_fee)?; + deploy_ixs = crate::prepend_compute_unit_ix(deploy_ixs, rpc_client, priority_fee); let recent_blockhash = rpc_client.get_latest_blockhash()?; let deploy_tx = Transaction::new_signed_with_payer( @@ -945,7 +945,7 @@ fn upgrade_program( ); // Add priority fee if specified - let upgrade_ixs = crate::prepend_compute_unit_ix(vec![upgrade_ix], rpc_client, priority_fee)?; + let upgrade_ixs = crate::prepend_compute_unit_ix(vec![upgrade_ix], rpc_client, priority_fee); let recent_blockhash = rpc_client.get_latest_blockhash()?; let upgrade_tx = Transaction::new_signed_with_payer(