Skip to main content

amadeus_runtime/consensus/bic/
protocol.rs

1use crate::Result;
2use crate::consensus::bic::coin;
3use crate::consensus::consensus_apply::ApplyEnv;
4use crate::consensus::consensus_kv;
5
6//1 cent AMA per 1kb
7pub fn tx_cost_per_byte(_epoch: u64, tx_encoded_len: usize) -> i128 {
8    let bytes = tx_encoded_len + 32 + 96;
9    // integer division
10    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    // Deduct tx cost
16    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    // Increment validator / burn
22    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}