amadeus_runtime/consensus/bic/
protocol.rs1use crate::Result;
2use crate::consensus::bic::coin;
3use crate::consensus::consensus_apply::ApplyEnv;
4use crate::consensus::consensus_kv;
5
6pub fn tx_cost_per_byte(_epoch: u64, tx_encoded_len: usize) -> i128 {
8 let bytes = tx_encoded_len + 32 + 96;
9 let cost_units = 1 + (bytes / 1024) * 1;
11 coin::to_cents(cost_units as i128)
12}
13
14pub fn pay_cost(env: &mut ApplyEnv, cost: i128) -> Result<()> {
15 consensus_kv::kv_increment(
17 env,
18 &crate::bcat(&[b"account:", env.caller_env.account_origin.as_slice(), b":balance:AMA"]),
19 -cost,
20 )?;
21 consensus_kv::kv_increment(
23 env,
24 &crate::bcat(&[b"account:", env.caller_env.entry_signer.as_slice(), b":balance:AMA"]),
25 cost / 2,
26 )?;
27 consensus_kv::kv_increment(
28 env,
29 &crate::bcat(&[b"account:", &coin::BURN_ADDRESS, b":balance:AMA"]),
30 cost / 2,
31 )?;
32 Ok(())
33}