Skip to main content

multiversx_chain_vm/schedule/
gas_schedule_version.rs

1use std::fmt;
2
3use super::GasSchedule;
4
5pub const GAS_SCHEDULE_V1_TOML: &str = include_str!("versions/gasScheduleV1.toml");
6pub const GAS_SCHEDULE_V2_TOML: &str = include_str!("versions/gasScheduleV2.toml");
7pub const GAS_SCHEDULE_V3_TOML: &str = include_str!("versions/gasScheduleV3.toml");
8pub const GAS_SCHEDULE_V4_TOML: &str = include_str!("versions/gasScheduleV4.toml");
9pub const GAS_SCHEDULE_V5_TOML: &str = include_str!("versions/gasScheduleV5.toml");
10pub const GAS_SCHEDULE_V6_TOML: &str = include_str!("versions/gasScheduleV6.toml");
11pub const GAS_SCHEDULE_V7_TOML: &str = include_str!("versions/gasScheduleV7.toml");
12pub const GAS_SCHEDULE_V8_TOML: &str = include_str!("versions/gasScheduleV8.toml");
13pub const GAS_SCHEDULE_V9_TOML: &str = include_str!("versions/gasScheduleV9.toml");
14
15#[derive(Clone, Copy, Default, Debug)]
16pub enum GasScheduleVersion {
17    V1 = 1,
18    V2 = 2,
19    V3 = 3,
20    V4 = 4,
21    V5 = 5,
22    V6 = 6,
23    V7 = 7,
24    V8 = 8,
25    #[default]
26    V9 = 9,
27}
28
29impl fmt::Display for GasScheduleVersion {
30    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31        write!(f, "gasScheduleV{}.toml", *self as u8)
32    }
33}
34
35impl GasScheduleVersion {
36    pub fn from_version_num(version: usize) -> Self {
37        match version {
38            1 => GasScheduleVersion::V1,
39            2 => GasScheduleVersion::V2,
40            3 => GasScheduleVersion::V3,
41            4 => GasScheduleVersion::V4,
42            5 => GasScheduleVersion::V5,
43            6 => GasScheduleVersion::V6,
44            7 => GasScheduleVersion::V7,
45            8 => GasScheduleVersion::V8,
46            9 => GasScheduleVersion::V9,
47            _ => panic!("Invalid gas schedule version {version}"),
48        }
49    }
50
51    pub fn toml_str(&self) -> &'static str {
52        match self {
53            GasScheduleVersion::V1 => GAS_SCHEDULE_V1_TOML,
54            GasScheduleVersion::V2 => GAS_SCHEDULE_V2_TOML,
55            GasScheduleVersion::V3 => GAS_SCHEDULE_V3_TOML,
56            GasScheduleVersion::V4 => GAS_SCHEDULE_V4_TOML,
57            GasScheduleVersion::V5 => GAS_SCHEDULE_V5_TOML,
58            GasScheduleVersion::V6 => GAS_SCHEDULE_V6_TOML,
59            GasScheduleVersion::V7 => GAS_SCHEDULE_V7_TOML,
60            GasScheduleVersion::V8 => GAS_SCHEDULE_V8_TOML,
61            GasScheduleVersion::V9 => GAS_SCHEDULE_V9_TOML,
62        }
63    }
64
65    pub fn load_gas_schedule(&self) -> GasSchedule {
66        GasSchedule::from_toml_str(self.toml_str()).expect("error parsing gas schedule toml")
67    }
68}