multiversx_chain_vm/blockchain/
vm_config.rs

1use 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}