forest/message_pool/msgpool/
utils.rs1use crate::chain::MINIMUM_BASE_FEE;
5use crate::message::{Message as MessageTrait, SignedMessage};
6use crate::shim::{crypto::Signature, econ::TokenAmount, message::Message};
7use crate::utils::cache::SizeTrackingLruCache;
8use crate::utils::get_size::CidWrapper;
9use num_rational::BigRational;
10use num_traits::ToPrimitive;
11
12use crate::message_pool::Error;
13
14pub(in crate::message_pool) fn get_base_fee_lower_bound(
15 base_fee: &TokenAmount,
16 factor: i64,
17) -> TokenAmount {
18 let base_fee_lower_bound = base_fee.div_floor(factor);
19 if base_fee_lower_bound.atto() < &MINIMUM_BASE_FEE.into() {
20 TokenAmount::from_atto(MINIMUM_BASE_FEE)
21 } else {
22 base_fee_lower_bound
23 }
24}
25
26pub(in crate::message_pool) fn get_gas_reward(
28 msg: &SignedMessage,
29 base_fee: &TokenAmount,
30) -> TokenAmount {
31 let mut max_prem = msg.gas_fee_cap() - base_fee;
32 if max_prem < msg.gas_premium() {
33 max_prem = msg.gas_premium();
34 }
35 max_prem * msg.gas_limit()
36}
37
38pub(in crate::message_pool) fn get_gas_perf(gas_reward: &TokenAmount, gas_limit: u64) -> f64 {
39 let a = BigRational::new(
40 gas_reward.atto() * crate::shim::econ::BLOCK_GAS_LIMIT,
41 gas_limit.into(),
42 );
43 a.to_f64().unwrap()
44}
45
46pub(in crate::message_pool) fn recover_sig(
49 bls_sig_cache: &SizeTrackingLruCache<CidWrapper, Signature>,
50 msg: Message,
51) -> Result<SignedMessage, Error> {
52 let val = bls_sig_cache
53 .get_cloned(&(msg.cid()).into())
54 .ok_or_else(|| Error::Other("Could not recover sig".to_owned()))?;
55 let smsg = SignedMessage::new_from_parts(msg, val)?;
56 Ok(smsg)
57}