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:
parent
5da06c5f7d
commit
5ecc47ec5a
|
@ -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,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue