multiversx_chain_vm/schedule/
gas_schedule.rs

1use std::mem::MaybeUninit;
2
3use multiversx_chain_vm_executor::OpcodeCost;
4use serde::{Deserialize, Serialize};
5
6use super::sections::{
7    BaseOperationCost, BaseOpsAPICost, BigFloatAPICost, BigIntAPICost, BuiltInCost, CryptoAPICost,
8    DynamicStorageLoad, EthAPICost, ManagedBufferAPICost, MaxPerTransaction,
9    MetaChainSystemSCsCost,
10};
11
12#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
13#[serde(default)]
14pub struct GasSchedule {
15    #[serde(rename = "BuiltInCost")]
16    pub builtin_cost: BuiltInCost,
17    #[serde(rename = "MetaChainSystemSCsCost")]
18    pub metachain_system_scs_cost: MetaChainSystemSCsCost,
19    #[serde(rename = "BaseOperationCost")]
20    pub base_operation_cost: BaseOperationCost,
21    #[serde(rename = "BaseOpsAPICost")]
22    pub base_ops_api_cost: BaseOpsAPICost,
23    #[serde(rename = "EthAPICost")]
24    pub eth_api_cost: EthAPICost,
25    #[serde(rename = "BigIntAPICost")]
26    pub big_int_api_cost: BigIntAPICost,
27    #[serde(rename = "CryptoAPICost")]
28    pub crypto_api_cost: CryptoAPICost,
29    #[serde(rename = "ManagedBufferAPICost")]
30    pub managed_buffer_api_cost: ManagedBufferAPICost,
31    #[serde(rename = "BigFloatAPICost")]
32    pub big_float_api_cost: BigFloatAPICost,
33    #[serde(rename = "WASMOpcodeCost")]
34    pub wasm_opcode_cost: OpcodeCost,
35    #[serde(rename = "MaxPerTransaction")]
36    pub max_per_transaction: MaxPerTransaction,
37    #[serde(rename = "DynamicStorageLoad")]
38    pub dynamic_storage_load: DynamicStorageLoad,
39}
40
41impl GasSchedule {
42    pub fn from_toml_str(content: &str) -> Result<Self, toml::de::Error> {
43        let full_schedule: GasSchedule = toml::from_str(content)?;
44        Ok(full_schedule)
45    }
46
47    /// TODO: safer to replace with auto-generated zero const initializer
48    pub const fn zeroed() -> GasSchedule {
49        unsafe { MaybeUninit::zeroed().assume_init() }
50    }
51}