From 947c4b0b8909a2e3c8ce507329aabe3dadd9ddc2 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 13:21:10 +0200 Subject: [PATCH 1/9] extend bootloader memory in the new version --- contracts | 2 +- core/lib/basic_types/src/protocol_version.rs | 13 +++- core/lib/basic_types/src/vm_version.rs | 5 +- core/lib/contracts/src/lib.rs | 14 ++++ core/lib/multivm/src/tracers/validator/mod.rs | 9 ++- .../src/tracers/validator/vm_latest/mod.rs | 2 +- core/lib/multivm/src/utils.rs | 66 ++++++++++++++++- .../src/versions/vm_1_3_2/vm_instance.rs | 2 +- .../src/versions/vm_latest/constants.rs | 35 ++++++--- .../vm_latest/implementation/execution.rs | 14 +++- .../lib/multivm/src/versions/vm_latest/mod.rs | 1 + .../src/versions/vm_latest/tests/block_tip.rs | 1 + .../src/versions/vm_latest/tests/constants.rs | 9 +++ .../src/versions/vm_latest/tests/mod.rs | 1 + .../vm_latest/tracers/default_tracers.rs | 9 ++- .../vm_latest/tracers/pubdata_tracer.rs | 13 +++- .../src/versions/vm_latest/tracers/refunds.rs | 18 +++-- .../vm_latest/tracers/result_tracer.rs | 17 +++-- .../src/versions/vm_latest/tracers/utils.rs | 21 ++++-- core/lib/multivm/src/versions/vm_latest/vm.rs | 69 +++++++++++++++--- core/lib/multivm/src/vm_instance.rs | 16 +++- .../src/api_server/execution_sandbox/apply.rs | 4 +- .../api_server/execution_sandbox/execute.rs | 2 +- .../src/api_server/execution_sandbox/tests.rs | 2 +- .../api_server/execution_sandbox/validate.rs | 8 +- .../src/api_server/tx_sender/mod.rs | 7 +- etc/env/base/contracts.toml | 2 +- .../fee_estimate.yul/fee_estimate.yul.zbin | Bin 73888 -> 65888 bytes .../vm_1_5_0/gas_test.yul/gas_test.yul.zbin | Bin 70048 -> 64352 bytes .../playground_batch.yul.zbin | Bin 74080 -> 66144 bytes .../proved_batch.yul/proved_batch.yul.zbin | Bin 70560 -> 64928 bytes .../fee_estimate.yul/fee_estimate.yul.zbin | Bin 0 -> 76320 bytes .../gas_test.yul/gas_test.yul.zbin | Bin 0 -> 72416 bytes .../playground_batch.yul.zbin | Bin 0 -> 76512 bytes .../proved_batch.yul/proved_batch.yul.zbin | Bin 0 -> 72928 bytes 35 files changed, 294 insertions(+), 68 deletions(-) create mode 100644 core/lib/multivm/src/versions/vm_latest/tests/constants.rs create mode 100644 etc/multivm_bootloaders/vm_1_5_0_small_memory/fee_estimate.yul/fee_estimate.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_1_5_0_small_memory/gas_test.yul/gas_test.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_1_5_0_small_memory/playground_batch.yul/playground_batch.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_1_5_0_small_memory/proved_batch.yul/proved_batch.yul.zbin diff --git a/contracts b/contracts index 501691051a74..45f10618ac24 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 501691051a745bdb03922e57f263497a866701dd +Subproject commit 45f10618ac248403c931a09212581c69887cc409 diff --git a/core/lib/basic_types/src/protocol_version.rs b/core/lib/basic_types/src/protocol_version.rs index 8d407b7d867e..d1181f0f9528 100644 --- a/core/lib/basic_types/src/protocol_version.rs +++ b/core/lib/basic_types/src/protocol_version.rs @@ -44,17 +44,20 @@ pub enum ProtocolVersionId { Version20, Version21, Version22, + // Version `23` is only present on the internal staging networks. + // All the user-facing environments were switched from 22 to 24 rightaway. Version23, Version24, + Version25, } impl ProtocolVersionId { pub fn latest() -> Self { - Self::Version23 + Self::Version24 } pub fn next() -> Self { - Self::Version24 + Self::Version25 } /// Returns VM version to be used by API for this protocol version. @@ -85,7 +88,8 @@ impl ProtocolVersionId { ProtocolVersionId::Version21 => VmVersion::Vm1_4_2, ProtocolVersionId::Version22 => VmVersion::Vm1_4_2, ProtocolVersionId::Version23 => VmVersion::Vm1_5_0, - ProtocolVersionId::Version24 => VmVersion::Vm1_5_0, + ProtocolVersionId::Version24 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, + ProtocolVersionId::Version25 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, } } @@ -223,7 +227,8 @@ impl From for VmVersion { ProtocolVersionId::Version21 => VmVersion::Vm1_4_2, ProtocolVersionId::Version22 => VmVersion::Vm1_4_2, ProtocolVersionId::Version23 => VmVersion::Vm1_5_0, - ProtocolVersionId::Version24 => VmVersion::Vm1_5_0, + ProtocolVersionId::Version24 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, + ProtocolVersionId::Version25 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, } } } diff --git a/core/lib/basic_types/src/vm_version.rs b/core/lib/basic_types/src/vm_version.rs index feb0d3213440..23cf0c9c85d6 100644 --- a/core/lib/basic_types/src/vm_version.rs +++ b/core/lib/basic_types/src/vm_version.rs @@ -11,11 +11,14 @@ pub enum VmVersion { Vm1_4_1, Vm1_4_2, Vm1_5_0, + // To keep the name consistent with the previous version + #[allow(non_camel_case_types)] + Vm_1_5_0_IncreaedBootloaderMemory, } impl VmVersion { /// Returns the latest supported VM version. pub const fn latest() -> VmVersion { - Self::Vm1_5_0 + Self::Vm_1_5_0_IncreaedBootloaderMemory } } diff --git a/core/lib/contracts/src/lib.rs b/core/lib/contracts/src/lib.rs index 357e109d9626..370fb07c0b0f 100644 --- a/core/lib/contracts/src/lib.rs +++ b/core/lib/contracts/src/lib.rs @@ -350,6 +350,13 @@ impl BaseSystemContracts { BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } + pub fn playground_1_5_0_small_memory() -> Self { + let bootloader_bytecode = read_zbin_bytecode( + "etc/multivm_bootloaders/vm_1_5_0_small_memory/playground_batch.yul/playground_batch.yul.zbin", + ); + BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + } + pub fn playground_post_1_5_0() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin", @@ -406,6 +413,13 @@ impl BaseSystemContracts { BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } + pub fn estimate_gas_1_5_0_small_memory() -> Self { + let bootloader_bytecode = read_zbin_bytecode( + "etc/multivm_bootloaders/vm_1_5_0_small_memory/fee_estimate.yul/fee_estimate.yul.zbin", + ); + BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + } + pub fn estimate_gas_post_1_5_0() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin", diff --git a/core/lib/multivm/src/tracers/validator/mod.rs b/core/lib/multivm/src/tracers/validator/mod.rs index b997d96d7c5e..03489316f0df 100644 --- a/core/lib/multivm/src/tracers/validator/mod.rs +++ b/core/lib/multivm/src/tracers/validator/mod.rs @@ -8,7 +8,7 @@ use zksync_system_constants::{ }; use zksync_types::{ vm_trace::ViolatedValidationRule, web3::signing::keccak256, AccountTreeId, Address, StorageKey, - H256, U256, + VmVersion, H256, U256, }; use zksync_utils::{be_bytes_to_safe_address, u256_to_account_address, u256_to_h256}; @@ -42,6 +42,7 @@ pub struct ValidationTracer { trusted_address_slots: HashSet<(Address, U256)>, computational_gas_used: u32, computational_gas_limit: u32, + vm_version: VmVersion, pub result: Arc>, _marker: PhantomData H>, } @@ -49,7 +50,10 @@ pub struct ValidationTracer { type ValidationRoundResult = Result; impl ValidationTracer { - pub fn new(params: ValidationTracerParams) -> (Self, Arc>) { + pub fn new( + params: ValidationTracerParams, + vm_version: VmVersion, + ) -> (Self, Arc>) { let result = Arc::new(OnceCell::new()); ( Self { @@ -64,6 +68,7 @@ impl ValidationTracer { trusted_address_slots: params.trusted_address_slots, computational_gas_used: 0, computational_gas_limit: params.computational_gas_limit, + vm_version, result: result.clone(), _marker: Default::default(), }, diff --git a/core/lib/multivm/src/tracers/validator/vm_latest/mod.rs b/core/lib/multivm/src/tracers/validator/vm_latest/mod.rs index 072aa9de00ba..3cd4e88a409c 100644 --- a/core/lib/multivm/src/tracers/validator/vm_latest/mod.rs +++ b/core/lib/multivm/src/tracers/validator/vm_latest/mod.rs @@ -146,7 +146,7 @@ impl DynTracer> self.process_validation_round_result(validation_round_result); } - let hook = VmHook::from_opcode_memory(&state, &data); + let hook = VmHook::from_opcode_memory(&state, &data, self.vm_version.try_into().unwrap()); let current_mode = self.validation_mode; match (current_mode, hook) { (ValidationTracerMode::NoValidation, VmHook::AccountValidationEntered) => { diff --git a/core/lib/multivm/src/utils.rs b/core/lib/multivm/src/utils.rs index 1c8330cf2aeb..14f4aa884764 100644 --- a/core/lib/multivm/src/utils.rs +++ b/core/lib/multivm/src/utils.rs @@ -50,6 +50,11 @@ pub fn derive_base_fee_and_gas_per_pubdata( VmVersion::Vm1_5_0 => crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( + batch_fee_input.into_pubdata_independent(), + ) + } } } @@ -74,6 +79,9 @@ pub fn get_batch_base_fee(l1_batch_env: &L1BatchEnv, vm_version: VmVersion) -> u VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::fee::get_batch_base_fee(l1_batch_env), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::get_batch_base_fee(l1_batch_env), VmVersion::Vm1_5_0 => crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) + } } } @@ -200,6 +208,9 @@ pub fn derive_overhead( VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::overhead::derive_overhead(encoded_len), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::overhead::derive_overhead(encoded_len), VmVersion::Vm1_5_0 => crate::vm_latest::utils::overhead::derive_overhead(encoded_len), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::utils::overhead::derive_overhead(encoded_len) + } } } @@ -223,7 +234,16 @@ pub fn get_bootloader_encoding_space(version: VmVersion) -> u32 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BOOTLOADER_TX_ENCODING_SPACE, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_TX_ENCODING_SPACE, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::BOOTLOADER_TX_ENCODING_SPACE, + VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_bootloader_tx_encoding_space( + VmVersion::Vm1_5_0.try_into().unwrap(), + ), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::get_bootloader_tx_encoding_space( + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory + .try_into() + .unwrap(), + ) + } } } @@ -244,6 +264,9 @@ pub fn get_bootloader_max_txs_in_batch(version: VmVersion) -> usize { VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_TXS_IN_BATCH, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_TXS_IN_BATCH, VmVersion::Vm1_5_0 => crate::vm_latest::constants::MAX_TXS_IN_BATCH, + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::MAX_TXS_IN_BATCH + } } } @@ -265,6 +288,9 @@ pub fn gas_bootloader_batch_tip_overhead(version: VmVersion) -> u32 { VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, VmVersion::Vm1_5_0 => crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD + } } } @@ -288,6 +314,9 @@ pub fn circuit_statistics_bootloader_batch_tip_overhead(version: VmVersion) -> u VmVersion::Vm1_5_0 => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize + } } } @@ -311,6 +340,9 @@ pub fn execution_metrics_bootloader_batch_tip_overhead(version: VmVersion) -> us VmVersion::Vm1_5_0 => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize + } } } @@ -333,6 +365,9 @@ pub fn get_max_gas_per_pubdata_byte(version: VmVersion) -> u64 { VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_GAS_PER_PUBDATA_BYTE, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_GAS_PER_PUBDATA_BYTE, VmVersion::Vm1_5_0 => crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE, + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE + } } } @@ -356,7 +391,16 @@ pub fn get_used_bootloader_memory_bytes(version: VmVersion) -> usize { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::USED_BOOTLOADER_MEMORY_BYTES, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::USED_BOOTLOADER_MEMORY_BYTES, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::USED_BOOTLOADER_MEMORY_BYTES, + VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_used_bootloader_memory_bytes( + VmVersion::Vm1_5_0.try_into().unwrap(), + ), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::get_used_bootloader_memory_bytes( + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory + .try_into() + .unwrap(), + ) + } } } @@ -380,7 +424,16 @@ pub fn get_used_bootloader_memory_words(version: VmVersion) -> usize { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::USED_BOOTLOADER_MEMORY_WORDS, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::USED_BOOTLOADER_MEMORY_WORDS, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::USED_BOOTLOADER_MEMORY_WORDS, + VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_used_bootloader_memory_bytes( + VmVersion::Vm1_5_0.try_into().unwrap(), + ), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::get_used_bootloader_memory_bytes( + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory + .try_into() + .unwrap(), + ) + } } } @@ -403,6 +456,9 @@ pub fn get_max_batch_gas_limit(version: VmVersion) -> u64 { VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BLOCK_GAS_LIMIT as u64, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BLOCK_GAS_LIMIT as u64, VmVersion::Vm1_5_0 => crate::vm_latest::constants::BATCH_GAS_LIMIT, + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::BATCH_GAS_LIMIT + } } } @@ -423,6 +479,8 @@ pub fn get_max_batch_base_layer_circuits(version: VmVersion) -> usize { // We avoid providing `0` for the old versions to avoid potential errors when working with old versions. crate::vm_1_4_2::constants::MAX_BASE_LAYER_CIRCUITS } - VmVersion::Vm1_5_0 => crate::vm_latest::constants::MAX_BASE_LAYER_CIRCUITS, + VmVersion::Vm1_5_0 | VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + crate::vm_latest::constants::MAX_BASE_LAYER_CIRCUITS + } } } diff --git a/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs b/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs index bbc512030f48..58e631e62a88 100644 --- a/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs +++ b/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs @@ -15,7 +15,7 @@ use zksync_types::{ l2_to_l1_log::{L2ToL1Log, UserL2ToL1Log}, tx::tx_execution_info::TxExecutionStatus, vm_trace::{Call, VmExecutionTrace, VmTrace}, - L1BatchNumber, VmEvent, H256, U256, + L1BatchNumber, VmEvent, VmVersion, H256, U256, }; use crate::{ diff --git a/core/lib/multivm/src/versions/vm_latest/constants.rs b/core/lib/multivm/src/versions/vm_latest/constants.rs index df4f651e5ec9..0de519f528f2 100644 --- a/core/lib/multivm/src/versions/vm_latest/constants.rs +++ b/core/lib/multivm/src/versions/vm_latest/constants.rs @@ -4,7 +4,9 @@ pub use zk_evm_1_5_0::zkevm_opcode_defs::system_params::{ ERGS_PER_CIRCUIT, INITIAL_STORAGE_WRITE_PUBDATA_BYTES, }; use zksync_system_constants::{MAX_L2_TX_GAS_LIMIT, MAX_NEW_FACTORY_DEPS}; +use zksync_types::VmVersion; +use super::vm::MultiVMSubversion; use crate::vm_latest::old_vm::utils::heap_page_from_base; /// The amount of ergs to be reserved at the end of the batch to ensure that it has enough ergs to verify compression, etc. @@ -19,9 +21,18 @@ pub(crate) const MAX_BASE_LAYER_CIRCUITS: usize = 34100; /// The size of the bootloader memory in bytes which is used by the protocol. /// While the maximal possible size is a lot higher, we restrict ourselves to a certain limit to reduce /// the requirements on RAM. -/// In this version of the VM the used bootloader memory bytes has increased from `30_000_000` to `59_000_000`. -pub(crate) const USED_BOOTLOADER_MEMORY_BYTES: usize = 59_000_000; -pub(crate) const USED_BOOTLOADER_MEMORY_WORDS: usize = USED_BOOTLOADER_MEMORY_BYTES / 32; +/// In this version of the VM the used bootloader memory bytes has increased from `30_000_000` to `59_000_000`, +/// and then to `63_800_000` in a subsequent upgrade. +pub(crate) const fn get_used_bootloader_memory_bytes(subversion: MultiVMSubversion) -> usize { + match subversion { + MultiVMSubversion::InitialVm1_5_0 => 59_000_000, + MultiVMSubversion::IncreasedMemory => 63_800_000, + } +} + +pub(crate) const fn get_used_bootloader_memory_words(subversion: MultiVMSubversion) -> usize { + get_used_bootloader_memory_bytes(subversion) / 32 +} /// We want `MAX_GAS_PER_PUBDATA_BYTE` multiplied by the u32::MAX (i.e. the maximal possible value of the pubdata counter) /// to be a safe integer with a good enough margin. @@ -94,8 +105,9 @@ pub(crate) const BOOTLOADER_TX_DESCRIPTION_OFFSET: usize = OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_OFFSET + OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_SLOTS; /// The size of the bootloader memory dedicated to the encodings of transactions -pub(crate) const BOOTLOADER_TX_ENCODING_SPACE: u32 = - (USED_BOOTLOADER_MEMORY_WORDS - TX_DESCRIPTION_OFFSET - MAX_TXS_IN_BATCH) as u32; +pub(crate) const fn get_bootloader_tx_encoding_space(subversion: MultiVMSubversion) -> u32 { + (get_used_bootloader_memory_words(subversion) - TX_DESCRIPTION_OFFSET - MAX_TXS_IN_BATCH) as u32 +} // Size of the bootloader tx description in words pub(crate) const BOOTLOADER_TX_DESCRIPTION_SIZE: usize = 2; @@ -116,13 +128,18 @@ pub const BOOTLOADER_HEAP_PAGE: u32 = heap_page_from_base(MemoryPage(INITIAL_BAS /// and VM_HOOKS_PARAMS_COUNT parameters (each 32 bytes) are put in the slots before. /// So the layout looks like this: /// `[param 0][param 1][param 2][vmhook opcode]` -pub const VM_HOOK_POSITION: u32 = RESULT_SUCCESS_FIRST_SLOT - 1; pub const VM_HOOK_PARAMS_COUNT: u32 = 3; -pub const VM_HOOK_PARAMS_START_POSITION: u32 = VM_HOOK_POSITION - VM_HOOK_PARAMS_COUNT; +pub(crate) const fn get_vm_hook_position(subversion: MultiVMSubversion) -> u32 { + get_result_success_first_slot(subversion) - 1 +} +pub(crate) const fn get_vm_hook_params_start_position(subversion: MultiVMSubversion) -> u32 { + get_vm_hook_position(subversion) - VM_HOOK_PARAMS_COUNT +} /// Arbitrary space in memory closer to the end of the page -pub const RESULT_SUCCESS_FIRST_SLOT: u32 = - ((USED_BOOTLOADER_MEMORY_BYTES as u32) - (MAX_TXS_IN_BATCH as u32) * 32) / 32; +pub(crate) const fn get_result_success_first_slot(subversion: MultiVMSubversion) -> u32 { + ((get_used_bootloader_memory_bytes(subversion) as u32) - (MAX_TXS_IN_BATCH as u32) * 32) / 32 +} /// How many gas bootloader is allowed to spend within one block. /// Note that this value doesn't correspond to the gas limit of any particular transaction diff --git a/core/lib/multivm/src/versions/vm_latest/implementation/execution.rs b/core/lib/multivm/src/versions/vm_latest/implementation/execution.rs index f6bdc840a75e..fe984f88acab 100644 --- a/core/lib/multivm/src/versions/vm_latest/implementation/execution.rs +++ b/core/lib/multivm/src/versions/vm_latest/implementation/execution.rs @@ -49,16 +49,22 @@ impl Vm { with_refund_tracer: bool, custom_pubdata_tracer: Option>, ) -> (VmExecutionStopReason, VmExecutionResultAndLogs) { - let refund_tracers = - with_refund_tracer.then_some(RefundsTracer::new(self.batch_env.clone())); + let refund_tracers = with_refund_tracer + .then_some(RefundsTracer::new(self.batch_env.clone(), self.subversion)); let mut tx_tracer: DefaultExecutionTracer = DefaultExecutionTracer::new( self.system_env.default_validation_computational_gas_limit, execution_mode, dispatcher, self.storage.clone(), refund_tracers, - custom_pubdata_tracer - .or_else(|| Some(PubdataTracer::new(self.batch_env.clone(), execution_mode))), + custom_pubdata_tracer.or_else(|| { + Some(PubdataTracer::new( + self.batch_env.clone(), + execution_mode, + self.subversion, + )) + }), + self.subversion, ); let timestamp_initial = Timestamp(self.state.local_state.timestamp); diff --git a/core/lib/multivm/src/versions/vm_latest/mod.rs b/core/lib/multivm/src/versions/vm_latest/mod.rs index c3df28f6c31c..850215c77460 100644 --- a/core/lib/multivm/src/versions/vm_latest/mod.rs +++ b/core/lib/multivm/src/versions/vm_latest/mod.rs @@ -1,3 +1,4 @@ +pub(crate) use self::vm::MultiVMSubversion; pub use self::{ bootloader_state::BootloaderState, old_vm::{ diff --git a/core/lib/multivm/src/versions/vm_latest/tests/block_tip.rs b/core/lib/multivm/src/versions/vm_latest/tests/block_tip.rs index 9b3097b8f091..bf1acb981f3e 100644 --- a/core/lib/multivm/src/versions/vm_latest/tests/block_tip.rs +++ b/core/lib/multivm/src/versions/vm_latest/tests/block_tip.rs @@ -192,6 +192,7 @@ fn execute_test(test_data: L1MessengerTestData) -> TestStatistics { vm.vm.batch_env.clone(), VmExecutionMode::Batch, test_data.state_diffs.clone(), + crate::vm_latest::MultiVMSubversion::latest(), ); let result = vm.vm.inspect_inner( diff --git a/core/lib/multivm/src/versions/vm_latest/tests/constants.rs b/core/lib/multivm/src/versions/vm_latest/tests/constants.rs new file mode 100644 index 000000000000..3b75bfd6d36b --- /dev/null +++ b/core/lib/multivm/src/versions/vm_latest/tests/constants.rs @@ -0,0 +1,9 @@ +/// Some of the constants of the system are implicitly calculated, but they may affect the code and so +/// we added additional checks on them to keep any unwanted changes of those apparent. +#[test] +fn test_that_bootloader_encoding_space_is_large_enoguh() { + let encoding_space = crate::vm_latest::constants::get_bootloader_tx_encoding_space( + crate::vm_latest::MultiVMSubversion::latest(), + ); + assert!(encoding_space >= 330000, "Bootloader tx space is too small"); +} diff --git a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs index 409b67ce9e06..1203d61b80b7 100644 --- a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs +++ b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs @@ -7,6 +7,7 @@ mod bytecode_publishing; mod call_tracer; mod circuits; mod code_oracle; +mod constants; mod gas_limit; mod get_used_contracts; mod is_write_initial; diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/default_tracers.rs b/core/lib/multivm/src/versions/vm_latest/tracers/default_tracers.rs index 9b70f1592308..988abec7d156 100755 --- a/core/lib/multivm/src/versions/vm_latest/tracers/default_tracers.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/default_tracers.rs @@ -33,6 +33,7 @@ use crate::{ CircuitsTracer, RefundsTracer, ResultTracer, }, types::internals::ZkSyncVmState, + vm::MultiVMSubversion, VmTracer, }, }; @@ -63,6 +64,7 @@ pub(crate) struct DefaultExecutionTracer { // It only takes into account circuits that are generated for actual execution. It doesn't // take into account e.g circuits produced by the initial bootloader memory commitment. pub(crate) circuits_tracer: CircuitsTracer, + subversion: MultiVMSubversion, storage: StoragePtr, _phantom: PhantomData, } @@ -75,6 +77,7 @@ impl DefaultExecutionTracer { storage: StoragePtr, refund_tracer: Option>, pubdata_tracer: Option>, + subversion: MultiVMSubversion, ) -> Self { Self { tx_has_been_processed: false, @@ -83,7 +86,8 @@ impl DefaultExecutionTracer { tx_validation_gas_limit: computational_gas_limit, in_account_validation: false, final_batch_info_requested: false, - result_tracer: ResultTracer::new(execution_mode), + subversion, + result_tracer: ResultTracer::new(execution_mode, subversion), refund_tracer, dispatcher, pubdata_tracer, @@ -207,12 +211,13 @@ impl Tracer for DefaultExecutionTracer { .saturating_add(computational_gas_price(state, &data)); } - let hook = VmHook::from_opcode_memory(&state, &data); + let hook = VmHook::from_opcode_memory(&state, &data, self.subversion); print_debug_if_needed( &hook, &state, memory, self.result_tracer.get_latest_result_ptr(), + self.subversion, ); match hook { diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/pubdata_tracer.rs b/core/lib/multivm/src/versions/vm_latest/tracers/pubdata_tracer.rs index afa9c7990ee4..ad6b4f238281 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/pubdata_tracer.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/pubdata_tracer.rs @@ -30,6 +30,7 @@ use crate::{ tracers::{traits::VmTracer, utils::VmHook}, types::internals::{PubdataInput, ZkSyncVmState}, utils::logs::collect_events_and_l1_system_logs_after_timestamp, + vm::MultiVMSubversion, StorageOracle, }, }; @@ -43,16 +44,22 @@ pub(crate) struct PubdataTracer { // For testing purposes it might be helpful to supply an exact set of state diffs to be provided // to the L1Messenger. enforced_state_diffs: Option>, + subversion: MultiVMSubversion, _phantom_data: PhantomData, } impl PubdataTracer { - pub(crate) fn new(l1_batch_env: L1BatchEnv, execution_mode: VmExecutionMode) -> Self { + pub(crate) fn new( + l1_batch_env: L1BatchEnv, + execution_mode: VmExecutionMode, + subversion: MultiVMSubversion, + ) -> Self { Self { l1_batch_env, pubdata_info_requested: false, execution_mode, enforced_state_diffs: None, + subversion, _phantom_data: Default::default(), } } @@ -64,12 +71,14 @@ impl PubdataTracer { l1_batch_env: L1BatchEnv, execution_mode: VmExecutionMode, forced_state_diffs: Vec, + subversion: MultiVMSubversion, ) -> Self { Self { l1_batch_env, pubdata_info_requested: false, execution_mode, enforced_state_diffs: Some(forced_state_diffs), + subversion, _phantom_data: Default::default(), } } @@ -192,7 +201,7 @@ impl DynTracer> for PubdataTracer { _memory: &SimpleMemory, _storage: StoragePtr, ) { - let hook = VmHook::from_opcode_memory(&state, &data); + let hook = VmHook::from_opcode_memory(&state, &data, self.subversion); if let VmHook::PubdataRequested = hook { self.pubdata_info_requested = true; } diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/refunds.rs b/core/lib/multivm/src/versions/vm_latest/tracers/refunds.rs index 2fcece67953b..9411b2782a49 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/refunds.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/refunds.rs @@ -24,6 +24,7 @@ use crate::{ }, types::internals::ZkSyncVmState, utils::fee::get_batch_base_fee, + vm::MultiVMSubversion, }, }; @@ -49,11 +50,12 @@ pub(crate) struct RefundsTracer { spent_pubdata_counter_before: u32, l1_batch: L1BatchEnv, pubdata_published: u32, + subversion: MultiVMSubversion, _phantom: PhantomData, } impl RefundsTracer { - pub(crate) fn new(l1_batch: L1BatchEnv) -> Self { + pub(crate) fn new(l1_batch: L1BatchEnv, subversion: MultiVMSubversion) -> Self { Self { pending_refund_request: None, refund_gas: 0, @@ -64,6 +66,7 @@ impl RefundsTracer { spent_pubdata_counter_before: 0, l1_batch, pubdata_published: 0, + subversion, _phantom: PhantomData, } } @@ -166,14 +169,17 @@ impl DynTracer> for RefundsTracer { _storage: StoragePtr, ) { self.timestamp_before_cycle = Timestamp(state.vm_local_state.timestamp); - let hook = VmHook::from_opcode_memory(&state, &data); + let hook = VmHook::from_opcode_memory(&state, &data, self.subversion); match hook { - VmHook::NotifyAboutRefund => self.refund_gas = get_vm_hook_params(memory)[0].as_u64(), + VmHook::NotifyAboutRefund => { + self.refund_gas = get_vm_hook_params(memory, self.subversion)[0].as_u64() + } VmHook::AskOperatorForRefund => { self.pending_refund_request = Some(RefundRequest { - refund: get_vm_hook_params(memory)[0].as_u64(), - gas_spent_on_pubdata: get_vm_hook_params(memory)[1].as_u64(), - used_gas_per_pubdata_byte: get_vm_hook_params(memory)[2].as_u32(), + refund: get_vm_hook_params(memory, self.subversion)[0].as_u64(), + gas_spent_on_pubdata: get_vm_hook_params(memory, self.subversion)[1].as_u64(), + used_gas_per_pubdata_byte: get_vm_hook_params(memory, self.subversion)[2] + .as_u32(), }) } _ => {} diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/result_tracer.rs b/core/lib/multivm/src/versions/vm_latest/tracers/result_tracer.rs index 0f0fa430eb06..a86210acabfc 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/result_tracer.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/result_tracer.rs @@ -16,13 +16,14 @@ use crate::{ VmExecutionMode, VmRevertReason, }, vm_latest::{ - constants::{BOOTLOADER_HEAP_PAGE, RESULT_SUCCESS_FIRST_SLOT}, + constants::{get_result_success_first_slot, BOOTLOADER_HEAP_PAGE}, old_vm::utils::{vm_may_have_ended_inner, VmExecutionResult}, tracers::{ traits::VmTracer, utils::{get_vm_hook_params, read_pointer, VmHook}, }, types::internals::ZkSyncVmState, + vm::MultiVMSubversion, BootloaderState, HistoryMode, SimpleMemory, }, }; @@ -101,17 +102,19 @@ pub(crate) struct ResultTracer { execution_mode: VmExecutionMode, far_call_tracker: FarCallTracker, + subversion: MultiVMSubversion, _phantom: PhantomData, } impl ResultTracer { - pub(crate) fn new(execution_mode: VmExecutionMode) -> Self { + pub(crate) fn new(execution_mode: VmExecutionMode, subversion: MultiVMSubversion) -> Self { Self { result: None, bootloader_out_of_gas: false, execution_mode, far_call_tracker: Default::default(), + subversion, _phantom: PhantomData, } } @@ -148,9 +151,9 @@ impl DynTracer> for ResultTracer { memory: &SimpleMemory, _storage: StoragePtr, ) { - let hook = VmHook::from_opcode_memory(&state, &data); + let hook = VmHook::from_opcode_memory(&state, &data, self.subversion); if let VmHook::ExecutionResult = hook { - let vm_hook_params = get_vm_hook_params(memory); + let vm_hook_params = get_vm_hook_params(memory, self.subversion); let success = vm_hook_params[0]; let returndata = self .far_call_tracker @@ -292,7 +295,8 @@ impl ResultTracer { return; } - let has_failed = tx_has_failed(state, bootloader_state.current_tx() as u32); + let has_failed = + tx_has_failed(state, bootloader_state.current_tx() as u32, self.subversion); if has_failed { self.result = Some(Result::Error { error_reason: VmRevertReason::General { @@ -329,8 +333,9 @@ impl ResultTracer { pub(crate) fn tx_has_failed( state: &ZkSyncVmState, tx_id: u32, + subversion: MultiVMSubversion, ) -> bool { - let mem_slot = RESULT_SUCCESS_FIRST_SLOT + tx_id; + let mem_slot = get_result_success_first_slot(subversion) + tx_id; let mem_value = state .memory .read_slot(BOOTLOADER_HEAP_PAGE as usize, mem_slot as usize) diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs b/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs index 4606386ed0af..2aa827b84637 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/utils.rs @@ -13,13 +13,15 @@ use zksync_utils::u256_to_h256; use crate::vm_latest::{ constants::{ - BOOTLOADER_HEAP_PAGE, VM_HOOK_PARAMS_COUNT, VM_HOOK_PARAMS_START_POSITION, VM_HOOK_POSITION, + get_vm_hook_params_start_position, get_vm_hook_position, BOOTLOADER_HEAP_PAGE, + VM_HOOK_PARAMS_COUNT, }, old_vm::{ history_recorder::HistoryMode, memory::SimpleMemory, utils::{aux_heap_page_from_base, heap_page_from_base}, }, + vm::MultiVMSubversion, }; #[derive(Clone, Debug, Copy)] @@ -45,6 +47,7 @@ impl VmHook { pub(crate) fn from_opcode_memory( state: &VmLocalStateData<'_>, data: &BeforeExecutionData, + subversion: MultiVMSubversion, ) -> Self { let opcode_variant = data.opcode.variant; let heap_page = @@ -59,7 +62,7 @@ impl VmHook { // Only `UMA` opcodes in the bootloader serve for vm hooks if !matches!(opcode_variant.opcode, Opcode::UMA(UMAOpcode::HeapWrite)) || heap_page != BOOTLOADER_HEAP_PAGE - || fat_ptr.offset != VM_HOOK_POSITION * 32 + || fat_ptr.offset != get_vm_hook_position(subversion) * 32 { return Self::NoHook; } @@ -86,8 +89,9 @@ impl VmHook { pub(crate) fn get_debug_log( state: &VmLocalStateData<'_>, memory: &SimpleMemory, + subversion: MultiVMSubversion, ) -> String { - let vm_hook_params: Vec<_> = get_vm_hook_params(memory) + let vm_hook_params: Vec<_> = get_vm_hook_params(memory, subversion) .into_iter() .map(u256_to_h256) .collect(); @@ -156,9 +160,10 @@ pub(crate) fn print_debug_if_needed( state: &VmLocalStateData<'_>, memory: &SimpleMemory, latest_returndata_ptr: Option, + subversion: MultiVMSubversion, ) { let log = match hook { - VmHook::DebugLog => get_debug_log(state, memory), + VmHook::DebugLog => get_debug_log(state, memory, subversion), VmHook::DebugReturnData => get_debug_returndata(memory, latest_returndata_ptr), _ => return, }; @@ -202,9 +207,13 @@ pub(crate) fn get_calldata_page_via_abi(far_call_abi: &FarCallABI, base_page: Me FarCallForwardPageType::UseHeap => heap_page_from_base(base_page).0, } } -pub(crate) fn get_vm_hook_params(memory: &SimpleMemory) -> Vec { +pub(crate) fn get_vm_hook_params( + memory: &SimpleMemory, + subversion: MultiVMSubversion, +) -> Vec { + let start_position = get_vm_hook_params_start_position(subversion); memory.dump_page_content_as_u256_words( BOOTLOADER_HEAP_PAGE, - VM_HOOK_PARAMS_START_POSITION..VM_HOOK_PARAMS_START_POSITION + VM_HOOK_PARAMS_COUNT, + start_position..start_position + VM_HOOK_PARAMS_COUNT, ) } diff --git a/core/lib/multivm/src/versions/vm_latest/vm.rs b/core/lib/multivm/src/versions/vm_latest/vm.rs index a2e4f68a49bd..7c15a95bcdd4 100644 --- a/core/lib/multivm/src/versions/vm_latest/vm.rs +++ b/core/lib/multivm/src/versions/vm_latest/vm.rs @@ -3,7 +3,7 @@ use zksync_state::{StoragePtr, WriteStorage}; use zksync_types::{ event::extract_l2tol1logs_from_l1_messenger, l2_to_l1_log::{SystemL2ToL1Log, UserL2ToL1Log}, - Transaction, + Transaction, VmVersion, }; use zksync_utils::bytecode::CompressedBytecodeInfo; @@ -23,6 +23,36 @@ use crate::{ HistoryMode, }; +/// MultiVM-specific addition. +/// +/// After the release in the In the second version an issue that led to smaller used bootloader memory was fixed. +#[derive(Debug, Copy, Clone)] +pub(crate) enum MultiVMSubversion { + /// Initial v1.5.0 + InitialVm1_5_0, + /// Bug with code compression was fixed. + IncreasedMemory, +} + +impl MultiVMSubversion { + pub(crate) fn latest() -> Self { + Self::IncreasedMemory + } +} + +#[derive(Debug)] +pub(crate) struct VmVersionIsNotVm150Error; +impl TryFrom for MultiVMSubversion { + type Error = VmVersionIsNotVm150Error; + fn try_from(value: VmVersion) -> Result { + match value { + VmVersion::Vm1_5_0 => Ok(Self::InitialVm1_5_0), + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => Ok(Self::IncreasedMemory), + _ => Err(VmVersionIsNotVm150Error), + } + } +} + /// Main entry point for Virtual Machine integration. /// The instance should process only one l1 batch #[derive(Debug)] @@ -35,6 +65,7 @@ pub struct Vm { pub(crate) batch_env: L1BatchEnv, // Snapshots for the current run pub(crate) snapshots: Vec, + pub(crate) subversion: MultiVMSubversion, _phantom: std::marker::PhantomData, } @@ -42,16 +73,13 @@ impl VmInterface for Vm { type TracerDispatcher = TracerDispatcher; fn new(batch_env: L1BatchEnv, system_env: SystemEnv, storage: StoragePtr) -> Self { - let (state, bootloader_state) = new_vm_state(storage.clone(), &system_env, &batch_env); - Self { - bootloader_state, - state, - storage, - system_env, + let vm_version: VmVersion = system_env.version.into(); + Self::new_with_subversion( batch_env, - snapshots: vec![], - _phantom: Default::default(), - } + system_env, + storage, + vm_version.try_into().expect("Incorrect 1.5.0 VmVersion"), + ) } /// Push tx into memory for the future execution @@ -186,6 +214,27 @@ impl VmInterface for Vm { } } +impl Vm { + pub(crate) fn new_with_subversion( + batch_env: L1BatchEnv, + system_env: SystemEnv, + storage: StoragePtr, + subversion: MultiVMSubversion, + ) -> Self { + let (state, bootloader_state) = new_vm_state(storage.clone(), &system_env, &batch_env); + Self { + bootloader_state, + state, + storage, + system_env, + batch_env, + subversion, + snapshots: vec![], + _phantom: Default::default(), + } + } +} + /// Methods of vm, which required some history manipulations impl VmInterfaceHistoryEnabled for Vm { /// Create snapshot of current vm state and push it into the memory diff --git a/core/lib/multivm/src/vm_instance.rs b/core/lib/multivm/src/vm_instance.rs index 93e4d76ef6ce..b622aef89713 100644 --- a/core/lib/multivm/src/vm_instance.rs +++ b/core/lib/multivm/src/vm_instance.rs @@ -217,7 +217,21 @@ impl VmInstance { VmInstance::Vm1_4_2(vm) } VmVersion::Vm1_5_0 => { - let vm = crate::vm_latest::Vm::new(l1_batch_env, system_env, storage_view); + let vm = crate::vm_latest::Vm::new_with_subversion( + l1_batch_env, + system_env, + storage_view, + crate::vm_latest::MultiVMSubversion::InitialVm1_5_0, + ); + VmInstance::Vm1_5_0(vm) + } + VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + let vm = crate::vm_latest::Vm::new_with_subversion( + l1_batch_env, + system_env, + storage_view, + crate::vm_latest::MultiVMSubversion::IncreasedMemory, + ); VmInstance::Vm1_5_0(vm) } } diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/apply.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/apply.rs index aa7a541588f5..d3af1a5c9dd4 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/apply.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/apply.rs @@ -298,6 +298,7 @@ pub(super) fn apply_vm_in_sandbox( apply: impl FnOnce( &mut VmInstance>, HistoryDisabled>, Transaction, + ProtocolVersionId, ) -> T, ) -> anyhow::Result { let stage_started_at = Instant::now(); @@ -319,6 +320,7 @@ pub(super) fn apply_vm_in_sandbox( execution_args, block_args, ))?; + let protocol_version = sandbox.system_env.version; let (mut vm, storage_view) = sandbox.into_vm(&tx, adjust_pubdata_price); SANDBOX_METRICS.sandbox[&SandboxStage::Initialization].observe(stage_started_at.elapsed()); @@ -330,7 +332,7 @@ pub(super) fn apply_vm_in_sandbox( tx.nonce().unwrap_or(Nonce(0)) ); let execution_latency = SANDBOX_METRICS.sandbox[&SandboxStage::Execution].start(); - let result = apply(&mut vm, tx); + let result = apply(&mut vm, tx, protocol_version); let vm_execution_took = execution_latency.observe(); let memory_metrics = vm.record_vm_memory_metrics(); diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/execute.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/execute.rs index b3440984b328..afdfbffd6fc8 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/execute.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/execute.rs @@ -134,7 +134,7 @@ impl TransactionExecutor { &connection_pool, tx, block_args, - |vm, tx| { + |vm, tx, _| { let storage_invocation_tracer = StorageInvocations::new(execution_args.missed_storage_invocation_limit); let custom_tracers: Vec<_> = custom_tracers diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs index 1281b82c68f6..9ba988911298 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs @@ -191,7 +191,7 @@ async fn test_instantiating_vm(pool: ConnectionPool, block_args: BlockArgs &pool, transaction.clone(), block_args, - |_, received_tx| { + |_, received_tx, _| { assert_eq!(received_tx, transaction); }, ) diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/validate.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/validate.rs index ad38d9e73ae2..5540fa3ec36a 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/validate.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/validate.rs @@ -73,13 +73,15 @@ impl TransactionExecutor { &connection_pool, tx, block_args, - |vm, tx| { + |vm, tx, protocol_version| { let stage_latency = SANDBOX_METRICS.sandbox[&SandboxStage::Validation].start(); let span = tracing::debug_span!("validation").entered(); vm.push_transaction(tx); - let (tracer, validation_result) = - ValidationTracer::::new(validation_params); + let (tracer, validation_result) = ValidationTracer::::new( + validation_params, + protocol_version.into(), + ); let result = vm.inspect( vec![ diff --git a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs index bea5f24d4967..8417bc75ba34 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs @@ -68,6 +68,8 @@ pub struct MultiVMBaseSystemContracts { pub(crate) post_1_4_1: BaseSystemContracts, /// Contracts to be used after the 1.4.2 upgrade pub(crate) post_1_4_2: BaseSystemContracts, + /// Contracts to be used during the `v23` upgrade. This upgrade was done on an internal staging environment only. + pub(crate) vm_1_5_0_small_memory: BaseSystemContracts, /// Contracts to be used after the 1.5.0 upgrade pub(crate) post_1_5_0: BaseSystemContracts, } @@ -97,7 +99,8 @@ impl MultiVMBaseSystemContracts { ProtocolVersionId::Version19 => self.post_allowlist_removal, ProtocolVersionId::Version20 => self.post_1_4_1, ProtocolVersionId::Version21 | ProtocolVersionId::Version22 => self.post_1_4_2, - ProtocolVersionId::Version23 | ProtocolVersionId::Version24 => self.post_1_5_0, + ProtocolVersionId::Version23 => self.vm_1_5_0_small_memory, + ProtocolVersionId::Version24 | ProtocolVersionId::Version25 => self.post_1_5_0, } } } @@ -131,6 +134,7 @@ impl ApiContracts { post_allowlist_removal: BaseSystemContracts::estimate_gas_post_allowlist_removal(), post_1_4_1: BaseSystemContracts::estimate_gas_post_1_4_1(), post_1_4_2: BaseSystemContracts::estimate_gas_post_1_4_2(), + vm_1_5_0_small_memory: BaseSystemContracts::playground_1_5_0_small_memory(), post_1_5_0: BaseSystemContracts::estimate_gas_post_1_5_0(), }, eth_call: MultiVMBaseSystemContracts { @@ -142,6 +146,7 @@ impl ApiContracts { post_allowlist_removal: BaseSystemContracts::playground_post_allowlist_removal(), post_1_4_1: BaseSystemContracts::playground_post_1_4_1(), post_1_4_2: BaseSystemContracts::playground_post_1_4_2(), + vm_1_5_0_small_memory: BaseSystemContracts::playground_1_5_0_small_memory(), post_1_5_0: BaseSystemContracts::playground_post_1_5_0(), }, } diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index 9479f7ff60b8..8390c198176e 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -31,7 +31,7 @@ GENESIS_BATCH_COMMITMENT = "0x49276362411c40c07ab01d3dfa9428abca95e361d8c980cd39 PRIORITY_TX_MAX_GAS_LIMIT = 72000000 DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 GENESIS_ROLLUP_LEAF_INDEX = "54" -GENESIS_PROTOCOL_VERSION = "23" +GENESIS_PROTOCOL_VERSION = "24" L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_BRIDGE_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_TOKEN_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" diff --git a/etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin index 595c2b4e18401a1d947341248b215ec930302936..ee096b88079ca6bb6640c335a9cac7a9b2e2f4c7 100644 GIT binary patch literal 65888 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 Sbo9l){l(vWw&jZ5AN~Jcw00N( literal 73888 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 diff --git a/etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin index 1e65c822aebed9b8783d6f6771ee726801fd8047..c6d2297a3627c6d2c9c22725e2c9fc12c0950448 100644 GIT binary patch literal 66144 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 R^^k2WUl1n87w+V!+0Rq}kBe9vfj>k|i1J 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 K_*)mg^Zx?$Tp5}G diff --git a/etc/multivm_bootloaders/vm_1_5_0/proved_batch.yul/proved_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0/proved_batch.yul/proved_batch.yul.zbin index f5654815d5c0cd86de3eb76bbbd310fe43fa355e..13177886b59629d25744833661cd1627f67566b1 100644 GIT binary patch literal 64928 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

;;s=!MYWbuKk*qofhIr`*H3! zUxG8jmH)o~(^uVE8LHGBm+W{|1$bcc6Z4b8|G$0lj#pl~>8ee|otrMa>e4O6%kXpS zR#O`%*lt)_RXz|snA$dec7Ui>(6<4rw$U;cqMO4#%WFoe#~+6FRu=&{6k?y^8x>La zs{Z#=i63a?Mvha^-h!fAc3FdB3;lzz<(=_d8bH^zmnoEb^Xi`P`TOA51u~EdT%j literal 70560 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 diff --git a/etc/multivm_bootloaders/vm_1_5_0_small_memory/fee_estimate.yul/fee_estimate.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_small_memory/fee_estimate.yul/fee_estimate.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..9ebaa9a89b81ce73094938dcd3cb60a891451b08 GIT binary patch literal 76320 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 R{_A^gS~YO%55BVD{{q&*F;oBm literal 0 HcmV?d00001 diff --git a/etc/multivm_bootloaders/vm_1_5_0_small_memory/gas_test.yul/gas_test.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_small_memory/gas_test.yul/gas_test.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..05506e234958b7c0df9f2cb0dbde6e3fd5491267 GIT binary patch literal 72416 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 literal 0 HcmV?d00001 diff --git a/etc/multivm_bootloaders/vm_1_5_0_small_memory/playground_batch.yul/playground_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_small_memory/playground_batch.yul/playground_batch.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..3d8137bd29f2ed0a16bc3df3dae5fc1dfa3a2757 GIT binary patch literal 76512 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 R*7oF^zx=$nJo&9B|1YZTb7KGi literal 0 HcmV?d00001 diff --git a/etc/multivm_bootloaders/vm_1_5_0_small_memory/proved_batch.yul/proved_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_small_memory/proved_batch.yul/proved_batch.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..d28924c059999e210ed0cb8a37f8a473a4d75bd4 GIT binary patch literal 72928 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 literal 0 HcmV?d00001 From b4acd92c3153c92d027ea5a22cd6a3a2482afa21 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 13:24:18 +0200 Subject: [PATCH 2/9] fix comment --- core/lib/multivm/src/versions/vm_latest/vm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/lib/multivm/src/versions/vm_latest/vm.rs b/core/lib/multivm/src/versions/vm_latest/vm.rs index 7c15a95bcdd4..8d338bd2a6e4 100644 --- a/core/lib/multivm/src/versions/vm_latest/vm.rs +++ b/core/lib/multivm/src/versions/vm_latest/vm.rs @@ -30,7 +30,7 @@ use crate::{ pub(crate) enum MultiVMSubversion { /// Initial v1.5.0 InitialVm1_5_0, - /// Bug with code compression was fixed. + /// The bootloader memory was increased to get more space for encoding transactions. IncreasedMemory, } From ada4b6e7f6b5d242d4eb941d2021859da738b2dd Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 13:43:04 +0200 Subject: [PATCH 3/9] consistent naming --- core/lib/basic_types/src/protocol_version.rs | 12 +-- core/lib/basic_types/src/vm_version.rs | 8 +- core/lib/contracts/src/lib.rs | 8 +- core/lib/multivm/src/utils.rs | 96 ++++++++++-------- .../src/versions/vm_latest/constants.rs | 5 +- core/lib/multivm/src/versions/vm_latest/vm.rs | 15 +-- core/lib/multivm/src/vm_instance.rs | 8 +- .../src/api_server/tx_sender/mod.rs | 12 ++- core/node/commitment_generator/src/utils.rs | 30 +++--- .../fee_estimate.yul/fee_estimate.yul.zbin | Bin .../gas_test.yul/gas_test.yul.zbin | Bin .../playground_batch.yul.zbin | Bin .../proved_batch.yul/proved_batch.yul.zbin | Bin 13 files changed, 104 insertions(+), 90 deletions(-) rename etc/multivm_bootloaders/{vm_1_5_0 => vm_1_5_0_increased_memory}/fee_estimate.yul/fee_estimate.yul.zbin (100%) rename etc/multivm_bootloaders/{vm_1_5_0 => vm_1_5_0_increased_memory}/gas_test.yul/gas_test.yul.zbin (100%) rename etc/multivm_bootloaders/{vm_1_5_0 => vm_1_5_0_increased_memory}/playground_batch.yul/playground_batch.yul.zbin (100%) rename etc/multivm_bootloaders/{vm_1_5_0 => vm_1_5_0_increased_memory}/proved_batch.yul/proved_batch.yul.zbin (100%) diff --git a/core/lib/basic_types/src/protocol_version.rs b/core/lib/basic_types/src/protocol_version.rs index d1181f0f9528..69ad7bc87ba5 100644 --- a/core/lib/basic_types/src/protocol_version.rs +++ b/core/lib/basic_types/src/protocol_version.rs @@ -87,9 +87,9 @@ impl ProtocolVersionId { ProtocolVersionId::Version20 => VmVersion::Vm1_4_1, ProtocolVersionId::Version21 => VmVersion::Vm1_4_2, ProtocolVersionId::Version22 => VmVersion::Vm1_4_2, - ProtocolVersionId::Version23 => VmVersion::Vm1_5_0, - ProtocolVersionId::Version24 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, - ProtocolVersionId::Version25 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, + ProtocolVersionId::Version23 => VmVersion::Vm1_5_0SmallBootloaderMemory, + ProtocolVersionId::Version24 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, + ProtocolVersionId::Version25 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, } } @@ -226,9 +226,9 @@ impl From for VmVersion { ProtocolVersionId::Version20 => VmVersion::Vm1_4_1, ProtocolVersionId::Version21 => VmVersion::Vm1_4_2, ProtocolVersionId::Version22 => VmVersion::Vm1_4_2, - ProtocolVersionId::Version23 => VmVersion::Vm1_5_0, - ProtocolVersionId::Version24 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, - ProtocolVersionId::Version25 => VmVersion::Vm_1_5_0_IncreaedBootloaderMemory, + ProtocolVersionId::Version23 => VmVersion::Vm1_5_0SmallBootloaderMemory, + ProtocolVersionId::Version24 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, + ProtocolVersionId::Version25 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, } } } diff --git a/core/lib/basic_types/src/vm_version.rs b/core/lib/basic_types/src/vm_version.rs index 23cf0c9c85d6..49fec39fc9cb 100644 --- a/core/lib/basic_types/src/vm_version.rs +++ b/core/lib/basic_types/src/vm_version.rs @@ -10,15 +10,13 @@ pub enum VmVersion { VmBoojumIntegration, Vm1_4_1, Vm1_4_2, - Vm1_5_0, - // To keep the name consistent with the previous version - #[allow(non_camel_case_types)] - Vm_1_5_0_IncreaedBootloaderMemory, + Vm1_5_0SmallBootloaderMemory, + Vm1_5_0IncreasedBootloaderMemory, } impl VmVersion { /// Returns the latest supported VM version. pub const fn latest() -> VmVersion { - Self::Vm_1_5_0_IncreaedBootloaderMemory + Self::Vm1_5_0IncreasedBootloaderMemory } } diff --git a/core/lib/contracts/src/lib.rs b/core/lib/contracts/src/lib.rs index 370fb07c0b0f..19b042d2bd0b 100644 --- a/core/lib/contracts/src/lib.rs +++ b/core/lib/contracts/src/lib.rs @@ -357,9 +357,9 @@ impl BaseSystemContracts { BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } - pub fn playground_post_1_5_0() -> Self { + pub fn playground_post_1_5_0_increased_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( - "etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin", + "etc/multivm_bootloaders/vm_1_5_0_increased_memory/playground_batch.yul/playground_batch.yul.zbin", ); BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } @@ -420,9 +420,9 @@ impl BaseSystemContracts { BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } - pub fn estimate_gas_post_1_5_0() -> Self { + pub fn estimate_gas_post_1_5_0_increased_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( - "etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin", + "etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin", ); BaseSystemContracts::load_with_bootloader(bootloader_bytecode) } diff --git a/core/lib/multivm/src/utils.rs b/core/lib/multivm/src/utils.rs index 14f4aa884764..93059fcb1f78 100644 --- a/core/lib/multivm/src/utils.rs +++ b/core/lib/multivm/src/utils.rs @@ -47,10 +47,12 @@ pub fn derive_base_fee_and_gas_per_pubdata( VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ), - VmVersion::Vm1_5_0 => crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( - batch_fee_input.into_pubdata_independent(), - ), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( + batch_fee_input.into_pubdata_independent(), + ) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ) @@ -78,8 +80,10 @@ pub fn get_batch_base_fee(l1_batch_env: &L1BatchEnv, vm_version: VmVersion) -> u } VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::fee::get_batch_base_fee(l1_batch_env), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::get_batch_base_fee(l1_batch_env), - VmVersion::Vm1_5_0 => crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) } } @@ -207,8 +211,10 @@ pub fn derive_overhead( } VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::overhead::derive_overhead(encoded_len), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::overhead::derive_overhead(encoded_len), - VmVersion::Vm1_5_0 => crate::vm_latest::utils::overhead::derive_overhead(encoded_len), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::utils::overhead::derive_overhead(encoded_len) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::overhead::derive_overhead(encoded_len) } } @@ -234,14 +240,14 @@ pub fn get_bootloader_encoding_space(version: VmVersion) -> u32 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BOOTLOADER_TX_ENCODING_SPACE, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_TX_ENCODING_SPACE, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_bootloader_tx_encoding_space( - VmVersion::Vm1_5_0.try_into().unwrap(), - ), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::constants::get_bootloader_tx_encoding_space( + crate::vm_latest::MultiVMSubversion::SmallBootloaderMemory, + ) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::get_bootloader_tx_encoding_space( - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory - .try_into() - .unwrap(), + crate::vm_latest::MultiVMSubversion::IncreasedBootloaderMemory, ) } } @@ -263,8 +269,8 @@ pub fn get_bootloader_max_txs_in_batch(version: VmVersion) -> usize { VmVersion::VmBoojumIntegration => crate::vm_boojum_integration::constants::MAX_TXS_IN_BLOCK, VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_TXS_IN_BATCH, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_TXS_IN_BATCH, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::MAX_TXS_IN_BATCH, - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => crate::vm_latest::constants::MAX_TXS_IN_BATCH, + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::MAX_TXS_IN_BATCH } } @@ -287,8 +293,10 @@ pub fn gas_bootloader_batch_tip_overhead(version: VmVersion) -> u32 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD } } @@ -311,10 +319,10 @@ pub fn circuit_statistics_bootloader_batch_tip_overhead(version: VmVersion) -> u VmVersion::Vm1_4_2 => { crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } - VmVersion::Vm1_5_0 => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } } @@ -337,10 +345,10 @@ pub fn execution_metrics_bootloader_batch_tip_overhead(version: VmVersion) -> us VmVersion::Vm1_4_2 => { crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } - VmVersion::Vm1_5_0 => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } } @@ -364,8 +372,10 @@ pub fn get_max_gas_per_pubdata_byte(version: VmVersion) -> u64 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_GAS_PER_PUBDATA_BYTE, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_GAS_PER_PUBDATA_BYTE, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE, - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE } } @@ -391,14 +401,14 @@ pub fn get_used_bootloader_memory_bytes(version: VmVersion) -> usize { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::USED_BOOTLOADER_MEMORY_BYTES, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::USED_BOOTLOADER_MEMORY_BYTES, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_used_bootloader_memory_bytes( - VmVersion::Vm1_5_0.try_into().unwrap(), - ), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { crate::vm_latest::constants::get_used_bootloader_memory_bytes( - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory - .try_into() - .unwrap(), + crate::vm_latest::MultiVMSubversion::SmallBootloaderMemory, + ) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + crate::vm_latest::constants::get_used_bootloader_memory_bytes( + crate::vm_latest::MultiVMSubversion::IncreasedBootloaderMemory, ) } } @@ -424,14 +434,14 @@ pub fn get_used_bootloader_memory_words(version: VmVersion) -> usize { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::USED_BOOTLOADER_MEMORY_WORDS, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::USED_BOOTLOADER_MEMORY_WORDS, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::get_used_bootloader_memory_bytes( - VmVersion::Vm1_5_0.try_into().unwrap(), - ), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { + crate::vm_latest::constants::get_used_bootloader_memory_bytes( + crate::vm_latest::MultiVMSubversion::SmallBootloaderMemory, + ) + } + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::get_used_bootloader_memory_bytes( - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory - .try_into() - .unwrap(), + crate::vm_latest::MultiVMSubversion::IncreasedBootloaderMemory, ) } } @@ -455,10 +465,8 @@ pub fn get_max_batch_gas_limit(version: VmVersion) -> u64 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BLOCK_GAS_LIMIT as u64, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BLOCK_GAS_LIMIT as u64, - VmVersion::Vm1_5_0 => crate::vm_latest::constants::BATCH_GAS_LIMIT, - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { - crate::vm_latest::constants::BATCH_GAS_LIMIT - } + VmVersion::Vm1_5_0SmallBootloaderMemory => crate::vm_latest::constants::BATCH_GAS_LIMIT, + VmVersion::Vm1_5_0IncreasedBootloaderMemory => crate::vm_latest::constants::BATCH_GAS_LIMIT, } } @@ -479,7 +487,7 @@ pub fn get_max_batch_base_layer_circuits(version: VmVersion) -> usize { // We avoid providing `0` for the old versions to avoid potential errors when working with old versions. crate::vm_1_4_2::constants::MAX_BASE_LAYER_CIRCUITS } - VmVersion::Vm1_5_0 | VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::MAX_BASE_LAYER_CIRCUITS } } diff --git a/core/lib/multivm/src/versions/vm_latest/constants.rs b/core/lib/multivm/src/versions/vm_latest/constants.rs index 0de519f528f2..4fc7c2d6c229 100644 --- a/core/lib/multivm/src/versions/vm_latest/constants.rs +++ b/core/lib/multivm/src/versions/vm_latest/constants.rs @@ -4,7 +4,6 @@ pub use zk_evm_1_5_0::zkevm_opcode_defs::system_params::{ ERGS_PER_CIRCUIT, INITIAL_STORAGE_WRITE_PUBDATA_BYTES, }; use zksync_system_constants::{MAX_L2_TX_GAS_LIMIT, MAX_NEW_FACTORY_DEPS}; -use zksync_types::VmVersion; use super::vm::MultiVMSubversion; use crate::vm_latest::old_vm::utils::heap_page_from_base; @@ -25,8 +24,8 @@ pub(crate) const MAX_BASE_LAYER_CIRCUITS: usize = 34100; /// and then to `63_800_000` in a subsequent upgrade. pub(crate) const fn get_used_bootloader_memory_bytes(subversion: MultiVMSubversion) -> usize { match subversion { - MultiVMSubversion::InitialVm1_5_0 => 59_000_000, - MultiVMSubversion::IncreasedMemory => 63_800_000, + MultiVMSubversion::SmallBootloaderMemory => 59_000_000, + MultiVMSubversion::IncreasedBootloaderMemory => 63_800_000, } } diff --git a/core/lib/multivm/src/versions/vm_latest/vm.rs b/core/lib/multivm/src/versions/vm_latest/vm.rs index 8d338bd2a6e4..1b127eebe84a 100644 --- a/core/lib/multivm/src/versions/vm_latest/vm.rs +++ b/core/lib/multivm/src/versions/vm_latest/vm.rs @@ -28,15 +28,16 @@ use crate::{ /// After the release in the In the second version an issue that led to smaller used bootloader memory was fixed. #[derive(Debug, Copy, Clone)] pub(crate) enum MultiVMSubversion { - /// Initial v1.5.0 - InitialVm1_5_0, - /// The bootloader memory was increased to get more space for encoding transactions. - IncreasedMemory, + /// The initial version of v1.5.0, available only on staging environments. + SmallBootloaderMemory, + /// The final correct version of v1.5.0 + IncreasedBootloaderMemory, } impl MultiVMSubversion { + #[cfg(test)] pub(crate) fn latest() -> Self { - Self::IncreasedMemory + Self::IncreasedBootloaderMemory } } @@ -46,8 +47,8 @@ impl TryFrom for MultiVMSubversion { type Error = VmVersionIsNotVm150Error; fn try_from(value: VmVersion) -> Result { match value { - VmVersion::Vm1_5_0 => Ok(Self::InitialVm1_5_0), - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => Ok(Self::IncreasedMemory), + VmVersion::Vm1_5_0SmallBootloaderMemory => Ok(Self::SmallBootloaderMemory), + VmVersion::Vm1_5_0IncreasedBootloaderMemory => Ok(Self::IncreasedBootloaderMemory), _ => Err(VmVersionIsNotVm150Error), } } diff --git a/core/lib/multivm/src/vm_instance.rs b/core/lib/multivm/src/vm_instance.rs index b622aef89713..74cb93c494b1 100644 --- a/core/lib/multivm/src/vm_instance.rs +++ b/core/lib/multivm/src/vm_instance.rs @@ -216,21 +216,21 @@ impl VmInstance { let vm = crate::vm_1_4_2::Vm::new(l1_batch_env, system_env, storage_view); VmInstance::Vm1_4_2(vm) } - VmVersion::Vm1_5_0 => { + VmVersion::Vm1_5_0SmallBootloaderMemory => { let vm = crate::vm_latest::Vm::new_with_subversion( l1_batch_env, system_env, storage_view, - crate::vm_latest::MultiVMSubversion::InitialVm1_5_0, + crate::vm_latest::MultiVMSubversion::SmallBootloaderMemory, ); VmInstance::Vm1_5_0(vm) } - VmVersion::Vm_1_5_0_IncreaedBootloaderMemory => { + VmVersion::Vm1_5_0IncreasedBootloaderMemory => { let vm = crate::vm_latest::Vm::new_with_subversion( l1_batch_env, system_env, storage_view, - crate::vm_latest::MultiVMSubversion::IncreasedMemory, + crate::vm_latest::MultiVMSubversion::IncreasedBootloaderMemory, ); VmInstance::Vm1_5_0(vm) } diff --git a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs index 8417bc75ba34..905abefd8e7a 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs @@ -71,7 +71,7 @@ pub struct MultiVMBaseSystemContracts { /// Contracts to be used during the `v23` upgrade. This upgrade was done on an internal staging environment only. pub(crate) vm_1_5_0_small_memory: BaseSystemContracts, /// Contracts to be used after the 1.5.0 upgrade - pub(crate) post_1_5_0: BaseSystemContracts, + pub(crate) vm_1_5_0_increased_memory: BaseSystemContracts, } impl MultiVMBaseSystemContracts { @@ -100,7 +100,9 @@ impl MultiVMBaseSystemContracts { ProtocolVersionId::Version20 => self.post_1_4_1, ProtocolVersionId::Version21 | ProtocolVersionId::Version22 => self.post_1_4_2, ProtocolVersionId::Version23 => self.vm_1_5_0_small_memory, - ProtocolVersionId::Version24 | ProtocolVersionId::Version25 => self.post_1_5_0, + ProtocolVersionId::Version24 | ProtocolVersionId::Version25 => { + self.vm_1_5_0_increased_memory + } } } } @@ -135,7 +137,8 @@ impl ApiContracts { post_1_4_1: BaseSystemContracts::estimate_gas_post_1_4_1(), post_1_4_2: BaseSystemContracts::estimate_gas_post_1_4_2(), vm_1_5_0_small_memory: BaseSystemContracts::playground_1_5_0_small_memory(), - post_1_5_0: BaseSystemContracts::estimate_gas_post_1_5_0(), + vm_1_5_0_increased_memory: + BaseSystemContracts::estimate_gas_post_1_5_0_increased_memory(), }, eth_call: MultiVMBaseSystemContracts { pre_virtual_blocks: BaseSystemContracts::playground_pre_virtual_blocks(), @@ -147,7 +150,8 @@ impl ApiContracts { post_1_4_1: BaseSystemContracts::playground_post_1_4_1(), post_1_4_2: BaseSystemContracts::playground_post_1_4_2(), vm_1_5_0_small_memory: BaseSystemContracts::playground_1_5_0_small_memory(), - post_1_5_0: BaseSystemContracts::playground_post_1_5_0(), + vm_1_5_0_increased_memory: + BaseSystemContracts::playground_post_1_5_0_increased_memory(), }, } } diff --git a/core/node/commitment_generator/src/utils.rs b/core/node/commitment_generator/src/utils.rs index 0fabf18d1dfa..433d1345903e 100644 --- a/core/node/commitment_generator/src/utils.rs +++ b/core/node/commitment_generator/src/utils.rs @@ -36,14 +36,16 @@ pub fn events_queue_commitment( .collect(), ), )), - VmVersion::Vm1_5_0 => Some(H256( - circuit_sequencer_api_1_5_0::commitments::events_queue_commitment_fixed( - &events_queue - .iter() - .map(|x| to_log_query_1_5_0(*x)) - .collect(), - ), - )), + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + Some(H256( + circuit_sequencer_api_1_5_0::commitments::events_queue_commitment_fixed( + &events_queue + .iter() + .map(|x| to_log_query_1_5_0(*x)) + .collect(), + ), + )) + } _ => None, } } @@ -72,11 +74,13 @@ pub fn bootloader_initial_content_commitment( &full_bootloader_memory, ), )), - VmVersion::Vm1_5_0 => Some(H256( - circuit_sequencer_api_1_5_0::commitments::initial_heap_content_commitment_fixed( - &full_bootloader_memory, - ), - )), + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + Some(H256( + circuit_sequencer_api_1_5_0::commitments::initial_heap_content_commitment_fixed( + &full_bootloader_memory, + ), + )) + } _ => unreachable!(), } } diff --git a/etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin similarity index 100% rename from etc/multivm_bootloaders/vm_1_5_0/fee_estimate.yul/fee_estimate.yul.zbin rename to etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin diff --git a/etc/multivm_bootloaders/vm_1_5_0/gas_test.yul/gas_test.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/gas_test.yul/gas_test.yul.zbin similarity index 100% rename from etc/multivm_bootloaders/vm_1_5_0/gas_test.yul/gas_test.yul.zbin rename to etc/multivm_bootloaders/vm_1_5_0_increased_memory/gas_test.yul/gas_test.yul.zbin diff --git a/etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/playground_batch.yul/playground_batch.yul.zbin similarity index 100% rename from etc/multivm_bootloaders/vm_1_5_0/playground_batch.yul/playground_batch.yul.zbin rename to etc/multivm_bootloaders/vm_1_5_0_increased_memory/playground_batch.yul/playground_batch.yul.zbin diff --git a/etc/multivm_bootloaders/vm_1_5_0/proved_batch.yul/proved_batch.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/proved_batch.yul/proved_batch.yul.zbin similarity index 100% rename from etc/multivm_bootloaders/vm_1_5_0/proved_batch.yul/proved_batch.yul.zbin rename to etc/multivm_bootloaders/vm_1_5_0_increased_memory/proved_batch.yul/proved_batch.yul.zbin From 437e684b32dd943c6f84bc61366edef3ccfa1d24 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 14:30:04 +0200 Subject: [PATCH 4/9] fix comments --- core/lib/basic_types/src/protocol_version.rs | 2 +- core/lib/multivm/src/utils.rs | 40 ++++--------------- core/lib/multivm/src/versions/vm_latest/vm.rs | 4 +- 3 files changed, 12 insertions(+), 34 deletions(-) diff --git a/core/lib/basic_types/src/protocol_version.rs b/core/lib/basic_types/src/protocol_version.rs index 69ad7bc87ba5..19f4b668a876 100644 --- a/core/lib/basic_types/src/protocol_version.rs +++ b/core/lib/basic_types/src/protocol_version.rs @@ -45,7 +45,7 @@ pub enum ProtocolVersionId { Version21, Version22, // Version `23` is only present on the internal staging networks. - // All the user-facing environments were switched from 22 to 24 rightaway. + // All the user-facing environments were switched from 22 to 24 right away. Version23, Version24, Version25, diff --git a/core/lib/multivm/src/utils.rs b/core/lib/multivm/src/utils.rs index 93059fcb1f78..1f4d55ea66ae 100644 --- a/core/lib/multivm/src/utils.rs +++ b/core/lib/multivm/src/utils.rs @@ -47,12 +47,7 @@ pub fn derive_base_fee_and_gas_per_pubdata( VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ), - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( - batch_fee_input.into_pubdata_independent(), - ) - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ) @@ -80,10 +75,7 @@ pub fn get_batch_base_fee(l1_batch_env: &L1BatchEnv, vm_version: VmVersion) -> u } VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::fee::get_batch_base_fee(l1_batch_env), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::get_batch_base_fee(l1_batch_env), - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) } } @@ -211,10 +203,7 @@ pub fn derive_overhead( } VmVersion::Vm1_4_1 => crate::vm_1_4_1::utils::overhead::derive_overhead(encoded_len), VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::overhead::derive_overhead(encoded_len), - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::utils::overhead::derive_overhead(encoded_len) - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::utils::overhead::derive_overhead(encoded_len) } } @@ -269,8 +258,7 @@ pub fn get_bootloader_max_txs_in_batch(version: VmVersion) -> usize { VmVersion::VmBoojumIntegration => crate::vm_boojum_integration::constants::MAX_TXS_IN_BLOCK, VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_TXS_IN_BATCH, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_TXS_IN_BATCH, - VmVersion::Vm1_5_0SmallBootloaderMemory => crate::vm_latest::constants::MAX_TXS_IN_BATCH, - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::MAX_TXS_IN_BATCH } } @@ -293,10 +281,7 @@ pub fn gas_bootloader_batch_tip_overhead(version: VmVersion) -> u32 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD } } @@ -319,10 +304,7 @@ pub fn circuit_statistics_bootloader_batch_tip_overhead(version: VmVersion) -> u VmVersion::Vm1_4_2 => { crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } } @@ -345,10 +327,7 @@ pub fn execution_metrics_bootloader_batch_tip_overhead(version: VmVersion) -> us VmVersion::Vm1_4_2 => { crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } } @@ -372,10 +351,7 @@ pub fn get_max_gas_per_pubdata_byte(version: VmVersion) -> u64 { } VmVersion::Vm1_4_1 => crate::vm_1_4_1::constants::MAX_GAS_PER_PUBDATA_BYTE, VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_GAS_PER_PUBDATA_BYTE, - VmVersion::Vm1_5_0SmallBootloaderMemory => { - crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE - } - VmVersion::Vm1_5_0IncreasedBootloaderMemory => { + VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory => { crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE } } diff --git a/core/lib/multivm/src/versions/vm_latest/vm.rs b/core/lib/multivm/src/versions/vm_latest/vm.rs index 1b127eebe84a..ca5943a708ba 100644 --- a/core/lib/multivm/src/versions/vm_latest/vm.rs +++ b/core/lib/multivm/src/versions/vm_latest/vm.rs @@ -25,7 +25,9 @@ use crate::{ /// MultiVM-specific addition. /// -/// After the release in the In the second version an issue that led to smaller used bootloader memory was fixed. +/// In the first version of the v1.5.0 release, the bootloader memory was too small, so a new +/// version was released with increased bootloader memory. The version with the small bootloader memory +/// is available only on internal staging environments. #[derive(Debug, Copy, Clone)] pub(crate) enum MultiVMSubversion { /// The initial version of v1.5.0, available only on staging environments. From cc706858963933dd3be38ef909c0e366cea153b2 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 14:32:20 +0200 Subject: [PATCH 5/9] cargo fix --- core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs b/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs index 58e631e62a88..bbc512030f48 100644 --- a/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs +++ b/core/lib/multivm/src/versions/vm_1_3_2/vm_instance.rs @@ -15,7 +15,7 @@ use zksync_types::{ l2_to_l1_log::{L2ToL1Log, UserL2ToL1Log}, tx::tx_execution_info::TxExecutionStatus, vm_trace::{Call, VmExecutionTrace, VmTrace}, - L1BatchNumber, VmEvent, VmVersion, H256, U256, + L1BatchNumber, VmEvent, H256, U256, }; use crate::{ From 60e044b9ebd81310cbb36e3a24747d868ee0b415 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 14:43:55 +0200 Subject: [PATCH 6/9] upd config --- contracts | 2 +- etc/env/base/chain.toml | 2 +- etc/env/base/contracts.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts b/contracts index 45f10618ac24..ab838b01e41e 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 45f10618ac248403c931a09212581c69887cc409 +Subproject commit ab838b01e41e4a5aae412bc217fa47ccfd1d64f4 diff --git a/etc/env/base/chain.toml b/etc/env/base/chain.toml index 4767026fd428..8e0c37b76935 100644 --- a/etc/env/base/chain.toml +++ b/etc/env/base/chain.toml @@ -90,7 +90,7 @@ fee_model_version = "V1" validation_computational_gas_limit = 300000 save_call_traces = true -bootloader_hash = "0x010008e7f0f15ed191392960117f88fe371348982b28a033c7207ed2c09bc0f4" +bootloader_hash = "0x010008e742608b21bf7eb23c1a9d0602047e3618b464c9b59c0fba3b3d7ab66e" default_aa_hash = "0x01000563374c277a2c1e34659a2a1e87371bb6d852ce142022d497bfb50b9e32" [chain.operations_manager] diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index 8390c198176e..828488554bd4 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -27,7 +27,7 @@ RECURSION_LEAF_LEVEL_VK_HASH = "0x101e08b00193e529145ee09823378ef51a3bc896650406 RECURSION_CIRCUITS_SET_VKS_HASH = "0x18c1639094f58177409186e8c48d9f577c9410901d2f1d486b3e7d6cf553ae4c" GENESIS_TX_HASH = "0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e" GENESIS_ROOT = "0xabdb766b18a479a5c783a4b80e12686bc8ea3cc2d8a3050491b701d72370ebb5" -GENESIS_BATCH_COMMITMENT = "0x49276362411c40c07ab01d3dfa9428abca95e361d8c980cd39f1ab6a9c561c0c" +GENESIS_BATCH_COMMITMENT = "0x2d00e5f8d77afcebf58a6b82ae56ba967566fe7dfbcb6760319fb0d215d18ffd" PRIORITY_TX_MAX_GAS_LIMIT = 72000000 DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 GENESIS_ROLLUP_LEAF_INDEX = "54" From e2069c09fda7ff0e4774fcf0462b7e083878fee0 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 15:26:21 +0200 Subject: [PATCH 7/9] correct new multivm bootloader --- .../fee_estimate.yul/fee_estimate.yul.zbin | Bin 65888 -> 76320 bytes .../gas_test.yul/gas_test.yul.zbin | Bin 64352 -> 72416 bytes .../playground_batch.yul.zbin | Bin 66144 -> 76512 bytes .../proved_batch.yul/proved_batch.yul.zbin | Bin 64928 -> 72928 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin index ee096b88079ca6bb6640c335a9cac7a9b2e2f4c7..75ee6377bdb645532c55f06f0e883cc078b5bd2b 100644 GIT binary patch literal 76320 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 Sbo9l){l(vWw&jZ5AN~Jcw00N( diff --git a/etc/multivm_bootloaders/vm_1_5_0_increased_memory/gas_test.yul/gas_test.yul.zbin b/etc/multivm_bootloaders/vm_1_5_0_increased_memory/gas_test.yul/gas_test.yul.zbin index 4e768822dcbe13327d292bac6fcc450ae492d98d..63898975f4825f551c49f2f7f1d9ac293132966d 100644 GIT binary patch literal 72416 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 PUBCIJ&;7~A_uTs5GOKah literal 66144 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 R^}OlCEyaXQCedvZs=er6 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

;;s=!MYWbuKk*qofhIr`*H3! zUxG8jmH)o~(^uVE8LHGBm+W{|1$bcc6Z4b8|G$0lj#pl~>8ee|otrMa>e4O6%kXpS zR#O`%*lt)_RXz|snA$dec7Ui>(6<4rw$U;cqMO4#%WFoe#~+6FRu=&{6k?y^8x>La zs{Z#=i63a?Mvha^-h!fAc3FdB3;lzz<(=_d8bH^zmnoEb^Xi`P`TOA51u~EdT%j From c4d1c49282a3710be5d491636ba26207efb1f9ce Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 16:22:20 +0200 Subject: [PATCH 8/9] expose needed interface for test infra --- core/lib/multivm/src/versions/vm_latest/constants.rs | 6 ++++++ core/lib/state/src/lib.rs | 2 ++ 2 files changed, 8 insertions(+) diff --git a/core/lib/multivm/src/versions/vm_latest/constants.rs b/core/lib/multivm/src/versions/vm_latest/constants.rs index 4fc7c2d6c229..1f02162f7348 100644 --- a/core/lib/multivm/src/versions/vm_latest/constants.rs +++ b/core/lib/multivm/src/versions/vm_latest/constants.rs @@ -135,6 +135,12 @@ pub(crate) const fn get_vm_hook_params_start_position(subversion: MultiVMSubvers get_vm_hook_position(subversion) - VM_HOOK_PARAMS_COUNT } +/// Method that provides the start position of the vm hook in the memory for the latest version of v1.5.0. +/// This method is used only in `test_infra` in the bootloader tests and that's why it should be exposed. +pub const fn get_vm_hook_start_position_latest() -> u32 { + get_vm_hook_params_start_position(MultiVMSubversion::IncreasedBootloaderMemory) +} + /// Arbitrary space in memory closer to the end of the page pub(crate) const fn get_result_success_first_slot(subversion: MultiVMSubversion) -> u32 { ((get_used_bootloader_memory_bytes(subversion) as u32) - (MAX_TXS_IN_BATCH as u32) * 32) / 32 diff --git a/core/lib/state/src/lib.rs b/core/lib/state/src/lib.rs index cca1570b22b1..00e0e3abb4bd 100644 --- a/core/lib/state/src/lib.rs +++ b/core/lib/state/src/lib.rs @@ -33,6 +33,8 @@ pub use self::{ cache::sequential_cache::SequentialCache, catchup::AsyncCatchupTask, in_memory::InMemoryStorage, + // Note, that `test_infra` of the bootloader tests relies on this value to be exposed + in_memory::IN_MEMORY_STORAGE_DEFAULT_NETWORK_ID, postgres::{PostgresStorage, PostgresStorageCaches, PostgresStorageCachesTask}, rocksdb::{RocksdbStorage, RocksdbStorageBuilder, StateKeeperColumnFamily}, shadow_storage::ShadowStorage, From b5d3274d2076674af14e469dc4944471b5b41608 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 26 Apr 2024 16:27:44 +0200 Subject: [PATCH 9/9] upd contracts test infra --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index ab838b01e41e..5042588322f2 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit ab838b01e41e4a5aae412bc217fa47ccfd1d64f4 +Subproject commit 5042588322f2257d1ea580ac800cabba429742a6