multiversx_chain_vm/schedule/
gas_schedule_version.rs

1use std::fmt;
2
3use super::GasSchedule;
4
5#[derive(Clone, Copy, Default, Debug)]
6pub enum GasScheduleVersion {
7    #[default]
8    Zero,
9    V1,
10    V2,
11    V3,
12    V4,
13    V5,
14    V6,
15    V7,
16    V8,
17}
18
19impl fmt::Display for GasScheduleVersion {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        write!(f, "gasScheduleV{}.toml", *self as u8 + 1)
22    }
23}
24
25pub fn parse_gas_schedule(content: &str) -> GasSchedule {
26    GasSchedule::from_toml_str(content).expect("error parsing gas schedule toml")
27}
28
29impl GasScheduleVersion {
30    pub fn load_gas_schedule(&self) -> GasSchedule {
31        match self {
32            GasScheduleVersion::Zero => GasSchedule::default(),
33            GasScheduleVersion::V1 => parse_gas_schedule(super::GAS_SCHEDULE_V1_TOML),
34            GasScheduleVersion::V2 => parse_gas_schedule(super::GAS_SCHEDULE_V2_TOML),
35            GasScheduleVersion::V3 => parse_gas_schedule(super::GAS_SCHEDULE_V3_TOML),
36            GasScheduleVersion::V4 => parse_gas_schedule(super::GAS_SCHEDULE_V4_TOML),
37            GasScheduleVersion::V5 => parse_gas_schedule(super::GAS_SCHEDULE_V5_TOML),
38            GasScheduleVersion::V6 => parse_gas_schedule(super::GAS_SCHEDULE_V6_TOML),
39            GasScheduleVersion::V7 => parse_gas_schedule(super::GAS_SCHEDULE_V7_TOML),
40            GasScheduleVersion::V8 => parse_gas_schedule(super::GAS_SCHEDULE_V8_TOML),
41        }
42    }
43}