solana_fee/
lib.rs

1use {solana_sdk::fee::FeeDetails, solana_svm_transaction::svm_message::SVMMessage};
2
3/// Calculate fee for `SanitizedMessage`
4pub fn calculate_fee(
5    message: &impl SVMMessage,
6    zero_fees_for_test: bool,
7    lamports_per_signature: u64,
8    prioritization_fee: u64,
9    remove_rounding_in_fee_calculation: bool,
10) -> u64 {
11    calculate_fee_details(
12        message,
13        zero_fees_for_test,
14        lamports_per_signature,
15        prioritization_fee,
16        remove_rounding_in_fee_calculation,
17    )
18    .total_fee()
19}
20
21pub fn calculate_fee_details(
22    message: &impl SVMMessage,
23    zero_fees_for_test: bool,
24    lamports_per_signature: u64,
25    prioritization_fee: u64,
26    remove_rounding_in_fee_calculation: bool,
27) -> FeeDetails {
28    if zero_fees_for_test {
29        return FeeDetails::default();
30    }
31    let signature_fee = message
32        .num_total_signatures()
33        .saturating_mul(lamports_per_signature);
34
35    FeeDetails::new(
36        signature_fee,
37        prioritization_fee,
38        remove_rounding_in_fee_calculation,
39    )
40}