separate priority fee and transaction fee from fee calculation (#34757)

add function calculate_fee_details() that returns FeeDetails with base and priority fee separated
This commit is contained in:
Tao Zhu 2024-01-26 08:24:45 -06:00 committed by GitHub
parent 5da06c5f7d
commit 5ecc47ec5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 39 additions and 8 deletions

View File

@ -31,6 +31,19 @@ pub struct FeeStructure {
pub compute_fee_bins: Vec<FeeBin>, pub compute_fee_bins: Vec<FeeBin>,
} }
/// Return type of calculate_fee(...)
#[derive(Debug, Default, Clone, Eq, PartialEq)]
pub struct FeeDetails {
transaction_fee: u64,
prioritization_fee: u64,
}
impl FeeDetails {
pub fn total_fee(&self) -> u64 {
self.transaction_fee.saturating_add(self.prioritization_fee)
}
}
pub const ACCOUNT_DATA_COST_PAGE_SIZE: u64 = 32_u64.saturating_mul(1024); pub const ACCOUNT_DATA_COST_PAGE_SIZE: u64 = 32_u64.saturating_mul(1024);
impl FeeStructure { impl FeeStructure {
@ -75,15 +88,32 @@ impl FeeStructure {
.saturating_mul(heap_cost) .saturating_mul(heap_cost)
} }
/// Calculate fee for `SanitizedMessage`
#[cfg(not(target_os = "solana"))] #[cfg(not(target_os = "solana"))]
pub fn calculate_fee( pub fn calculate_fee(
&self,
message: &SanitizedMessage,
lamports_per_signature: u64,
budget_limits: &FeeBudgetLimits,
include_loaded_account_data_size_in_fee: bool,
) -> u64 {
self.calculate_fee_details(
message,
lamports_per_signature,
budget_limits,
include_loaded_account_data_size_in_fee,
)
.total_fee()
}
/// Calculate fee details for `SanitizedMessage`
#[cfg(not(target_os = "solana"))]
pub fn calculate_fee_details(
&self, &self,
message: &SanitizedMessage, message: &SanitizedMessage,
_lamports_per_signature: u64, _lamports_per_signature: u64,
budget_limits: &FeeBudgetLimits, budget_limits: &FeeBudgetLimits,
include_loaded_account_data_size_in_fee: bool, include_loaded_account_data_size_in_fee: bool,
) -> u64 { ) -> FeeDetails {
let signature_fee = message let signature_fee = message
.num_signatures() .num_signatures()
.saturating_mul(self.lamports_per_signature); .saturating_mul(self.lamports_per_signature);
@ -115,12 +145,13 @@ impl FeeStructure {
.unwrap_or_default() .unwrap_or_default()
}); });
(budget_limits FeeDetails {
.prioritization_fee transaction_fee: (signature_fee
.saturating_add(signature_fee)
.saturating_add(write_lock_fee) .saturating_add(write_lock_fee)
.saturating_add(compute_fee) as f64) .saturating_add(compute_fee) as f64)
.round() as u64 .round() as u64,
prioritization_fee: budget_limits.prioritization_fee,
}
} }
} }