multiversx_chain_vm/schedule/
gas_schedule.rs1use 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 pub const fn zeroed() -> GasSchedule {
49 unsafe { MaybeUninit::zeroed().assume_init() }
50 }
51}