multiversx_chain_vm/blockchain/
vm_config.rs1use std::{ops::Deref, sync::Arc};
2
3use crate::{builtin_functions::BuiltinFunctionContainer, schedule::GasSchedule};
4
5#[derive(Default)]
6pub struct VMConfig {
7 pub builtin_functions: BuiltinFunctionContainer,
8 pub gas_schedule: GasSchedule,
9}
10
11#[derive(Clone, Default)]
12pub struct VMConfigRef(Arc<VMConfig>);
13
14impl VMConfig {
15 pub fn new() -> Self {
16 Self::default()
17 }
18}
19
20impl VMConfigRef {
21 pub fn new() -> Self {
22 VMConfigRef(Arc::new(VMConfig::new()))
23 }
24
25 pub fn change_gas_schedule(&mut self, gas_schedule: GasSchedule) {
26 let vm_config =
27 Arc::get_mut(&mut self.0).expect("cannot change gas schedule during execution");
28 vm_config.gas_schedule = gas_schedule;
29 }
30}
31
32impl Deref for VMConfigRef {
33 type Target = VMConfig;
34
35 fn deref(&self) -> &Self::Target {
36 self.0.deref()
37 }
38}