1pub const STANDARD_TOKEN_COST: u64 = 4;
7
8pub const NON_ZERO_BYTE_DATA_COST: u64 = 68;
10
11pub const NON_ZERO_BYTE_MULTIPLIER: u64 = NON_ZERO_BYTE_DATA_COST / STANDARD_TOKEN_COST;
13
14pub const TOTAL_COST_FLOOR_PER_TOKEN: u64 = 10;
16
17#[inline]
19pub fn tokens_in_calldata(input: &[u8]) -> u64 {
20 let zero_data_len = input.iter().filter(|v| **v == 0).count() as u64;
21 let non_zero_data_len = input.len() as u64 - zero_data_len;
22 zero_data_len + non_zero_data_len * NON_ZERO_BYTE_MULTIPLIER
23}
24
25#[inline]
29pub fn transaction_floor_cost(tokens_in_calldata: u64) -> u64 {
30 21_000 + TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata
31}