use crate::{
consensus::{KERNEL_WEIGHT, WEIGHT_PER_INPUT, WEIGHT_PER_OUTPUT},
transactions::{tari_amount::*, transaction::MINIMUM_TRANSACTION_FEE},
};
pub struct Fee {}
impl Fee {
pub fn calculate(fee_per_gram: MicroTari, num_kernels: usize, num_inputs: usize, num_outputs: usize) -> MicroTari {
(Fee::calculate_weight(num_kernels, num_inputs, num_outputs) * u64::from(fee_per_gram)).into()
}
pub fn calculate_with_minimum(
fee_per_gram: MicroTari,
num_kernels: usize,
num_inputs: usize,
num_outputs: usize,
) -> MicroTari
{
let fee = Fee::calculate(fee_per_gram, num_kernels, num_inputs, num_outputs);
if fee < MINIMUM_TRANSACTION_FEE {
MINIMUM_TRANSACTION_FEE
} else {
fee
}
}
pub fn calculate_weight(num_kernels: usize, num_inputs: usize, num_outputs: usize) -> u64 {
KERNEL_WEIGHT * num_kernels as u64 +
WEIGHT_PER_INPUT * num_inputs as u64 +
WEIGHT_PER_OUTPUT * num_outputs as u64
}
}