ergo_lib/chain/
parameters.rs1use std::collections::HashMap;
3
4#[repr(i8)]
5#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
6pub enum Parameter {
9 StorageFeeFactor = 1,
11 MinValuePerByte = 2,
13 MaxBlockSize = 3,
15 MaxBlockCost = 4,
17 TokenAccessCost = 5,
19 InputCost = 6,
21 DataInputCost = 7,
23 OutputCost = 8,
25 BlockVersion = 123,
27}
28
29#[cfg_attr(feature = "json", derive(serde::Deserialize))]
31#[cfg_attr(
32 feature = "json",
33 serde(try_from = "crate::chain::json::parameters::ParametersJson")
34)]
35#[derive(Clone, Debug, Eq, PartialEq)]
36pub struct Parameters {
37 pub parameters_table: HashMap<Parameter, i32>,
39}
40
41impl Parameters {
42 pub fn block_version(&self) -> i32 {
44 self.parameters_table[&Parameter::BlockVersion]
45 }
46 pub fn storage_fee_factor(&self) -> i32 {
48 self.parameters_table[&Parameter::StorageFeeFactor]
49 }
50 pub fn min_value_per_byte(&self) -> i32 {
52 self.parameters_table[&Parameter::MinValuePerByte]
53 }
54 pub fn max_block_size(&self) -> i32 {
56 self.parameters_table[&Parameter::MaxBlockSize]
57 }
58 pub fn max_block_cost(&self) -> i32 {
60 self.parameters_table[&Parameter::MaxBlockCost]
61 }
62 pub fn token_access_cost(&self) -> i32 {
64 self.parameters_table[&Parameter::TokenAccessCost]
65 }
66 pub fn input_cost(&self) -> i32 {
68 self.parameters_table[&Parameter::InputCost]
69 }
70 pub fn data_input_cost(&self) -> i32 {
72 self.parameters_table[&Parameter::DataInputCost]
73 }
74 pub fn output_cost(&self) -> i32 {
76 self.parameters_table[&Parameter::OutputCost]
77 }
78
79 #[allow(clippy::too_many_arguments)]
81 pub fn new(
82 block_version: i32,
83 storage_fee_factor: i32,
84 min_value_per_byte: i32,
85 max_block_size: i32,
86 max_block_cost: i32,
87 token_access_cost: i32,
88 input_cost: i32,
89 data_input_cost: i32,
90 output_cost: i32,
91 ) -> Self {
92 let mut parameters_table = HashMap::new();
93 parameters_table.insert(Parameter::BlockVersion, block_version);
94 parameters_table.insert(Parameter::StorageFeeFactor, storage_fee_factor);
95 parameters_table.insert(Parameter::MinValuePerByte, min_value_per_byte);
96 parameters_table.insert(Parameter::MaxBlockSize, max_block_size);
97 parameters_table.insert(Parameter::MaxBlockCost, max_block_cost);
98 parameters_table.insert(Parameter::TokenAccessCost, token_access_cost);
99 parameters_table.insert(Parameter::InputCost, input_cost);
100 parameters_table.insert(Parameter::DataInputCost, data_input_cost);
101 parameters_table.insert(Parameter::OutputCost, output_cost);
102 Self { parameters_table }
103 }
104}
105
106impl std::default::Default for Parameters {
107 fn default() -> Self {
110 let mut parameters_table = HashMap::new();
111 parameters_table.insert(Parameter::StorageFeeFactor, 1250000);
112 parameters_table.insert(Parameter::MinValuePerByte, 30 * 12);
113 parameters_table.insert(Parameter::TokenAccessCost, 100);
114 parameters_table.insert(Parameter::InputCost, 2000);
115 parameters_table.insert(Parameter::DataInputCost, 100);
116 parameters_table.insert(Parameter::OutputCost, 100);
117 parameters_table.insert(Parameter::MaxBlockSize, 512 * 1024);
118 parameters_table.insert(Parameter::BlockVersion, 1);
119 Self { parameters_table }
120 }
121}