diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index 368ca5bea2..e7f7eed591 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -1720,6 +1720,7 @@ pub struct CliFeesInner { pub blockhash: String, pub lamports_per_signature: u64, pub last_valid_slot: Option, + pub last_valid_block_height: Option, } impl QuietDisplay for CliFeesInner {} @@ -1733,11 +1734,11 @@ impl fmt::Display for CliFeesInner { "Lamports per signature:", &self.lamports_per_signature.to_string(), )?; - let last_valid_slot = self - .last_valid_slot + let last_valid_block_height = self + .last_valid_block_height .map(|s| s.to_string()) .unwrap_or_default(); - writeln_name_value(f, "Last valid slot:", &last_valid_slot) + writeln_name_value(f, "Last valid block height:", &last_valid_block_height) } } @@ -1766,6 +1767,7 @@ impl CliFees { blockhash: Hash, lamports_per_signature: u64, last_valid_slot: Option, + last_valid_block_height: Option, ) -> Self { Self { inner: Some(CliFeesInner { @@ -1773,6 +1775,7 @@ impl CliFees { blockhash: blockhash.to_string(), lamports_per_signature, last_valid_slot, + last_valid_block_height, }), } } diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index 841382c32d..b68cb0aacf 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -936,18 +936,19 @@ pub fn process_fees( *recent_blockhash, fee_calculator.lamports_per_signature, None, + None, ) } else { CliFees::none() } } else { - let result = rpc_client.get_recent_blockhash_with_commitment(config.commitment)?; - let (recent_blockhash, fee_calculator, last_valid_slot) = result.value; + let result = rpc_client.get_fees_with_commitment(config.commitment)?; CliFees::some( result.context.slot, - recent_blockhash, - fee_calculator.lamports_per_signature, - Some(last_valid_slot), + result.value.blockhash, + result.value.fee_calculator.lamports_per_signature, + None, + Some(result.value.last_valid_block_height), ) }; Ok(config.output_format.formatted_string(&fees)) diff --git a/client/src/fees.rs b/client/src/fees.rs new file mode 100644 index 0000000000..f73545b01e --- /dev/null +++ b/client/src/fees.rs @@ -0,0 +1,9 @@ +use crate::{fee_calculator::FeeCalculator, hash::Hash}; + +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Fees { + pub blockhash: Hash, + pub fee_calculator: FeeCalculator, + pub last_valid_block_height: u64, +} diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 45d6336af2..cc4c661df0 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -1247,6 +1247,34 @@ impl RpcClient { ) } + pub fn get_fees(&self) -> ClientResult { + Ok(self.get_fees_with_commitment(self.commitment())?.value) + } + + pub fn get_fees_with_commitment(&self, commitment_config: CommitmentConfig) -> RpcResult { + let Response { + context, + value: fees, + } = self.send::>( + RpcRequest::GetFees, + json!([self.maybe_map_commitment(commitment_config)?]), + )?; + let blockhash = fees.blockhash.parse().map_err(|_| { + ClientError::new_with_request( + RpcError::ParseError("Hash".to_string()).into(), + RpcRequest::GetFees, + ) + })?; + Ok(Response { + context, + value: Fees { + blockhash, + fee_calculator: fees.fee_calculator, + last_valid_block_height: fees.last_valid_block_height, + }, + }) + } + pub fn get_recent_blockhash(&self) -> ClientResult<(Hash, FeeCalculator)> { let (blockhash, fee_calculator, _last_valid_slot) = self .get_recent_blockhash_with_commitment(self.commitment())? diff --git a/client/src/rpc_response.rs b/client/src/rpc_response.rs index ba18118fd8..ddbc41ef20 100644 --- a/client/src/rpc_response.rs +++ b/client/src/rpc_response.rs @@ -4,6 +4,7 @@ use { solana_sdk::{ clock::{Epoch, Slot, UnixTimestamp}, fee_calculator::{FeeCalculator, FeeRateGovernor}, + hash::Hash, inflation::Inflation, transaction::{Result, TransactionError}, }, @@ -57,6 +58,14 @@ pub struct DeprecatedRpcFees { pub last_valid_slot: Slot, } +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Fees { + pub blockhash: Hash, + pub fee_calculator: FeeCalculator, + pub last_valid_block_height: u64, +} + #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct RpcFeeCalculator {