pub async fn new(
        chain_id: L2ChainId,
        operator_account: AccountTreeId,
        validation_computational_gas_limit: u32,
    ) -> anyhow::Result<Self> {
        let estimate_gas_contracts =
            tokio::task::spawn_blocking(MultiVmBaseSystemContracts::load_estimate_gas_blocking)
                .await
                .context("failed loading base contracts for gas estimation")?;
        let call_contracts =
            tokio::task::spawn_blocking(MultiVmBaseSystemContracts::load_eth_call_blocking)
                .await
                .context("failed loading base contracts for calls / tx execution")?;

        Ok(Self {
            fast_vm_mode: FastVmMode::Old,
            vm_dump_store: None,
            estimate_gas: OneshotEnvParameters::new(
                Arc::new(estimate_gas_contracts),
                chain_id,
                operator_account,
                u32::MAX,
            ),
            eth_call: OneshotEnvParameters::new(
                Arc::new(call_contracts),
                chain_id,
                operator_account,
                validation_computational_gas_limit,
            ),
            interrupted_execution_latency_histogram: &SANDBOX_METRICS
                .sandbox_interrupted_execution_latency,
            #[cfg(test)]
            storage_delay: None,
        })
    }
Loads the contracts from the local file system.
This method is *currently* preferred to be used in all contexts,
given that there is no way to fetch "playground" contracts from the main node.
core/node/api_server/src/tx_sender/mod.rs