multiversx_chain_vm/schedule/
gas_schedule_version.rs1use 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}