use std::collections::HashMap;
#[repr(i8)]
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
pub enum Parameter {
StorageFeeFactor = 1,
MinValuePerByte = 2,
MaxBlockSize = 3,
MaxBlockCost = 4,
TokenAccessCost = 5,
InputCost = 6,
DataInputCost = 7,
OutputCost = 8,
BlockVersion = 123,
}
#[cfg_attr(feature = "json", derive(serde::Deserialize))]
#[cfg_attr(
feature = "json",
serde(try_from = "crate::chain::json::parameters::ParametersJson")
)]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Parameters {
pub parameters_table: HashMap<Parameter, i32>,
}
impl Parameters {
pub fn block_version(&self) -> i32 {
self.parameters_table[&Parameter::BlockVersion]
}
pub fn storage_fee_factor(&self) -> i32 {
self.parameters_table[&Parameter::StorageFeeFactor]
}
pub fn min_value_per_byte(&self) -> i32 {
self.parameters_table[&Parameter::MinValuePerByte]
}
pub fn max_block_size(&self) -> i32 {
self.parameters_table[&Parameter::MaxBlockSize]
}
pub fn max_block_cost(&self) -> i32 {
self.parameters_table[&Parameter::MaxBlockCost]
}
pub fn token_access_cost(&self) -> i32 {
self.parameters_table[&Parameter::TokenAccessCost]
}
pub fn input_cost(&self) -> i32 {
self.parameters_table[&Parameter::InputCost]
}
pub fn data_input_cost(&self) -> i32 {
self.parameters_table[&Parameter::DataInputCost]
}
pub fn output_cost(&self) -> i32 {
self.parameters_table[&Parameter::OutputCost]
}
#[allow(clippy::too_many_arguments)]
pub fn new(
block_version: i32,
storage_fee_factor: i32,
min_value_per_byte: i32,
max_block_size: i32,
max_block_cost: i32,
token_access_cost: i32,
input_cost: i32,
data_input_cost: i32,
output_cost: i32,
) -> Self {
let mut parameters_table = HashMap::new();
parameters_table.insert(Parameter::BlockVersion, block_version);
parameters_table.insert(Parameter::StorageFeeFactor, storage_fee_factor);
parameters_table.insert(Parameter::MinValuePerByte, min_value_per_byte);
parameters_table.insert(Parameter::MaxBlockSize, max_block_size);
parameters_table.insert(Parameter::MaxBlockCost, max_block_cost);
parameters_table.insert(Parameter::TokenAccessCost, token_access_cost);
parameters_table.insert(Parameter::InputCost, input_cost);
parameters_table.insert(Parameter::DataInputCost, data_input_cost);
parameters_table.insert(Parameter::OutputCost, output_cost);
Self { parameters_table }
}
}
impl std::default::Default for Parameters {
fn default() -> Self {
let mut parameters_table = HashMap::new();
parameters_table.insert(Parameter::StorageFeeFactor, 1250000);
parameters_table.insert(Parameter::MinValuePerByte, 30 * 12);
parameters_table.insert(Parameter::TokenAccessCost, 100);
parameters_table.insert(Parameter::InputCost, 2000);
parameters_table.insert(Parameter::DataInputCost, 100);
parameters_table.insert(Parameter::OutputCost, 100);
parameters_table.insert(Parameter::MaxBlockSize, 512 * 1024);
parameters_table.insert(Parameter::BlockVersion, 1);
Self { parameters_table }
}
}