Skip to content

Commit

Permalink
Add rust client support for getRecentPrioritizationFees (solana-labs#…
Browse files Browse the repository at this point in the history
  • Loading branch information
CriesofCarrots authored and gnapoli23 committed Jan 10, 2023
1 parent 2a36830 commit 8e45067
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 2 deletions.
2 changes: 2 additions & 0 deletions rpc-client-api/src/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ pub enum RpcRequest {
)]
GetRecentBlockhash,
GetRecentPerformanceSamples,
GetRecentPrioritizationFees,
GetHighestSnapshotSlot,
#[deprecated(
since = "1.9.0",
Expand Down Expand Up @@ -158,6 +159,7 @@ impl fmt::Display for RpcRequest {
RpcRequest::GetProgramAccounts => "getProgramAccounts",
RpcRequest::GetRecentBlockhash => "getRecentBlockhash",
RpcRequest::GetRecentPerformanceSamples => "getRecentPerformanceSamples",
RpcRequest::GetRecentPrioritizationFees => "getRecentPrioritizationFees",
RpcRequest::GetHighestSnapshotSlot => "getHighestSnapshotSlot",
RpcRequest::GetSnapshotSlot => "getSnapshotSlot",
RpcRequest::GetSignaturesForAddress => "getSignaturesForAddress",
Expand Down
8 changes: 6 additions & 2 deletions rpc-client/src/mock_sender.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ use {
Response, RpcAccountBalance, RpcBlockProduction, RpcBlockProductionRange, RpcBlockhash,
RpcConfirmedTransactionStatusWithSignature, RpcContactInfo, RpcFees, RpcIdentity,
RpcInflationGovernor, RpcInflationRate, RpcInflationReward, RpcKeyedAccount,
RpcPerfSample, RpcResponseContext, RpcSimulateTransactionResult, RpcSnapshotSlotInfo,
RpcStakeActivation, RpcSupply, RpcVersionInfo, RpcVoteAccountInfo,
RpcPerfSample, RpcPrioritizationFee, RpcResponseContext, RpcSimulateTransactionResult,
RpcSnapshotSlotInfo, RpcStakeActivation, RpcSupply, RpcVersionInfo, RpcVoteAccountInfo,
RpcVoteAccountStatus, StakeActivationState,
},
},
Expand Down Expand Up @@ -419,6 +419,10 @@ impl RpcSender for MockSender {
num_slots: 123,
sample_period_secs: 60,
}])?,
"getRecentPrioritizationFees" => serde_json::to_value(vec![RpcPrioritizationFee {
slot: 123_456_789,
prioritization_fee: 10_000,
}])?,
"getIdentity" => serde_json::to_value(RpcIdentity {
identity: PUBKEY.to_string(),
})?,
Expand Down
43 changes: 43 additions & 0 deletions rpc-client/src/nonblocking/rpc_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3535,6 +3535,49 @@ impl RpcClient {
.await
}

/// Returns a list of minimum prioritization fees from recent blocks.
/// Takes an optional vector of addresses; if any addresses are provided, the response will
/// reflect the minimum prioritization fee to land a transaction locking all of the provided
/// accounts as writable.
///
/// Currently, a node's prioritization-fee cache stores data from up to 150 blocks.
///
/// # RPC Reference
///
/// This method corresponds directly to the [`getRecentPrioritizationFees`] RPC method.
///
/// [`getRecentPrioritizationFees`]: https://docs.solana.com/developing/clients/jsonrpc-api#getrecentprioritizationfees
///
/// # Examples
///
/// ```
/// # use solana_rpc_client_api::client_error::Error;
/// # use solana_rpc_client::nonblocking::rpc_client::RpcClient;
/// # use solana_sdk::signature::{Keypair, Signer};
/// # futures::executor::block_on(async {
/// # let rpc_client = RpcClient::new_mock("succeeds".to_string());
/// # let alice = Keypair::new();
/// # let bob = Keypair::new();
/// let addresses = vec![alice.pubkey(), bob.pubkey()];
/// let prioritization_fees = rpc_client.get_recent_prioritization_fees(
/// &addresses,
/// ).await?;
/// # Ok::<(), Error>(())
/// # })?;
/// # Ok::<(), Error>(())
/// ```
pub async fn get_recent_prioritization_fees(
&self,
addresses: &[Pubkey],
) -> ClientResult<Vec<RpcPrioritizationFee>> {
let addresses: Vec<_> = addresses
.iter()
.map(|address| address.to_string())
.collect();
self.send(RpcRequest::GetRecentPrioritizationFees, json!([addresses]))
.await
}

/// Returns the identity pubkey for the current node.
///
/// # RPC Reference
Expand Down
35 changes: 35 additions & 0 deletions rpc-client/src/rpc_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2916,6 +2916,41 @@ impl RpcClient {
self.invoke((self.rpc_client.as_ref()).get_recent_performance_samples(limit))
}

/// Returns a list of minimum prioritization fees from recent blocks.
/// Takes an optional vector of addresses; if any addresses are provided, the response will
/// reflect the minimum prioritization fee to land a transaction locking all of the provided
/// accounts as writable.
///
/// Currently, a node's prioritization-fee cache stores data from up to 150 blocks.
///
/// # RPC Reference
///
/// This method corresponds directly to the [`getRecentPrioritizationFees`] RPC method.
///
/// [`getRecentPrioritizationFees`]: https://docs.solana.com/developing/clients/jsonrpc-api#getrecentprioritizationfees
///
/// # Examples
///
/// ```
/// # use solana_rpc_client_api::client_error::Error;
/// # use solana_rpc_client::rpc_client::RpcClient;
/// # use solana_sdk::signature::{Keypair, Signer};
/// # let rpc_client = RpcClient::new_mock("succeeds".to_string());
/// # let alice = Keypair::new();
/// # let bob = Keypair::new();
/// let addresses = vec![alice.pubkey(), bob.pubkey()];
/// let prioritization_fees = rpc_client.get_recent_prioritization_fees(
/// &addresses,
/// )?;
/// # Ok::<(), Error>(())
/// ```
pub fn get_recent_prioritization_fees(
&self,
addresses: &[Pubkey],
) -> ClientResult<Vec<RpcPrioritizationFee>> {
self.invoke((self.rpc_client.as_ref()).get_recent_prioritization_fees(addresses))
}

/// Returns the identity pubkey for the current node.
///
/// # RPC Reference
Expand Down

0 comments on commit 8e45067

Please sign in to comment.