Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
perekopskiy committed Oct 18, 2024
1 parent 79c4ba2 commit 0984283
Show file tree
Hide file tree
Showing 45 changed files with 162 additions and 126 deletions.
4 changes: 2 additions & 2 deletions core/bin/system-constants-generator/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ use zksync_contracts::{
load_sys_contract, read_bootloader_code, read_bytecode_from_path, read_sys_contract_bytecode,
read_zbin_bytecode, BaseSystemContracts, ContractLanguage, SystemContractCode,
};
use zksync_multivm::interface::InspectExecutionMode;
use zksync_multivm::{
interface::{
storage::{InMemoryStorage, StorageView, WriteStorage},
tracer::VmExecutionStopReason,
L1BatchEnv, L2BlockEnv, SystemEnv, TxExecutionMode, VmFactory, VmInterface, VmInterfaceExt,
InspectExecutionMode, L1BatchEnv, L2BlockEnv, SystemEnv, TxExecutionMode, VmFactory,
VmInterface, VmInterfaceExt,
},
tracers::dynamic::vm_1_5_0::DynTracer,
vm_latest::{
Expand Down
12 changes: 8 additions & 4 deletions core/lib/multivm/src/dump.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
use crate::interface::storage::{StoragePtr, StorageSnapshot, StorageView};
use crate::interface::utils::VmDump;
use crate::interface::{L1BatchEnv, L2BlockEnv, SystemEnv, VmFactory, VmInterface, VmInterfaceExt};
use crate::pubdata_builders::pubdata_params_to_builder;
use crate::{
interface::{
storage::{StoragePtr, StorageSnapshot, StorageView},
utils::VmDump,
L1BatchEnv, L2BlockEnv, SystemEnv, VmFactory, VmInterface, VmInterfaceExt,
},
pubdata_builders::pubdata_params_to_builder,
};

/// Plays back dump on the specified VM.
pub fn play_back_dump<Vm>(dump: VmDump) -> Vm
Expand Down
5 changes: 3 additions & 2 deletions core/lib/multivm/src/pubdata_builders/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
use crate::interface::pubdata::PubdataBuilder;
use std::rc::Rc;
use zksync_types::commitment::{L1BatchCommitmentMode, PubdataParams};

pub use rollup::RollupPubdataBuilder;
pub use validium::ValidiumPubdataBuilder;
use zksync_types::commitment::{L1BatchCommitmentMode, PubdataParams};

use crate::interface::pubdata::PubdataBuilder;

mod rollup;
#[cfg(test)]
Expand Down
2 changes: 1 addition & 1 deletion core/lib/multivm/src/pubdata_builders/rollup.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use crate::interface::pubdata::{PubdataBuilder, PubdataInput};
use zksync_types::{
commitment::{L1BatchCommitmentMode, PubdataParams},
ethabi,
Expand All @@ -12,6 +11,7 @@ use super::utils::{
build_chained_bytecode_hash, build_chained_log_hash, build_chained_message_hash,
build_logs_root, encode_user_logs,
};
use crate::interface::pubdata::{PubdataBuilder, PubdataInput};

#[derive(Debug, Clone, Copy)]
pub struct RollupPubdataBuilder {
Expand Down
2 changes: 1 addition & 1 deletion core/lib/multivm/src/pubdata_builders/tests.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::interface::pubdata::{L1MessengerL2ToL1Log, PubdataBuilder, PubdataInput};
use zksync_types::{
writes::StateDiffRecord, Address, ProtocolVersionId, ACCOUNT_CODE_STORAGE_ADDRESS,
BOOTLOADER_ADDRESS,
};
use zksync_utils::u256_to_h256;

use super::{rollup::RollupPubdataBuilder, validium::ValidiumPubdataBuilder};
use crate::interface::pubdata::{L1MessengerL2ToL1Log, PubdataBuilder, PubdataInput};

fn mock_input() -> PubdataInput {
// Just using some constant addresses for tests
Expand Down
11 changes: 6 additions & 5 deletions core/lib/multivm/src/pubdata_builders/validium.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
use super::utils::{
build_chained_bytecode_hash, build_chained_log_hash, build_chained_message_hash,
build_logs_root, encode_user_logs,
};
use crate::interface::pubdata::{PubdataBuilder, PubdataInput};
use zksync_types::{
commitment::{L1BatchCommitmentMode, PubdataParams},
ethabi,
Expand All @@ -12,6 +7,12 @@ use zksync_types::{
Address, ProtocolVersionId,
};

use super::utils::{
build_chained_bytecode_hash, build_chained_log_hash, build_chained_message_hash,
build_logs_root, encode_user_logs,
};
use crate::interface::pubdata::{PubdataBuilder, PubdataInput};

#[derive(Debug, Clone, Copy)]
pub struct ValidiumPubdataBuilder {
pub l2_da_validator: Address,
Expand Down
2 changes: 1 addition & 1 deletion core/lib/multivm/src/versions/testonly.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ use zksync_types::{
};
use zksync_utils::{bytecode::hash_bytecode, u256_to_h256};

use crate::pubdata_builders::RollupPubdataBuilder;
use crate::{
interface::{
pubdata::PubdataBuilder, storage::InMemoryStorage, L1BatchEnv, L2BlockEnv, SystemEnv,
TxExecutionMode,
},
pubdata_builders::RollupPubdataBuilder,
vm_latest::constants::BATCH_COMPUTATIONAL_GAS_LIMIT,
};

Expand Down
3 changes: 1 addition & 2 deletions core/lib/multivm/src/versions/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

use assert_matches::assert_matches;
use ethabi::Contract;
use std::rc::Rc;
use zksync_contracts::{
get_loadnext_contract, load_contract, read_bytecode,
test_contracts::LoadnextContractExecutionParams,
Expand All @@ -15,8 +14,8 @@ use zksync_types::{
};
use zksync_utils::bytecode::hash_bytecode;

use crate::dump::{play_back_dump, play_back_dump_custom};
use crate::{
dump::{play_back_dump, play_back_dump_custom},
interface::{
storage::{InMemoryStorage, ReadStorage, StorageView},
utils::{ShadowVm, VmDump},
Expand Down
3 changes: 1 addition & 2 deletions core/lib/multivm/src/versions/vm_1_3_2/vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ use std::{collections::HashSet, rc::Rc};

use zksync_types::Transaction;
use zksync_utils::{bytecode::hash_bytecode, h256_to_u256};
use zksync_vm_interface::pubdata::PubdataBuilder;
use zksync_vm_interface::InspectExecutionMode;
use zksync_vm_interface::{pubdata::PubdataBuilder, InspectExecutionMode};

use crate::{
glue::{history_mode::HistoryMode, GlueInto},
Expand Down
3 changes: 1 addition & 2 deletions core/lib/multivm/src/versions/vm_1_4_1/vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ use zksync_types::{
l2_to_l1_log::{SystemL2ToL1Log, UserL2ToL1Log},
Transaction,
};
use zksync_vm_interface::pubdata::PubdataBuilder;
use zksync_vm_interface::InspectExecutionMode;
use zksync_vm_interface::{pubdata::PubdataBuilder, InspectExecutionMode};

use crate::{
glue::GlueInto,
Expand Down
3 changes: 1 addition & 2 deletions core/lib/multivm/src/versions/vm_1_4_2/vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ use zksync_types::{
l2_to_l1_log::{SystemL2ToL1Log, UserL2ToL1Log},
Transaction,
};
use zksync_vm_interface::pubdata::PubdataBuilder;
use zksync_vm_interface::InspectExecutionMode;
use zksync_vm_interface::{pubdata::PubdataBuilder, InspectExecutionMode};

use crate::{
glue::GlueInto,
Expand Down
3 changes: 1 addition & 2 deletions core/lib/multivm/src/versions/vm_boojum_integration/vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ use zksync_types::{
l2_to_l1_log::{SystemL2ToL1Log, UserL2ToL1Log},
Transaction,
};
use zksync_vm_interface::pubdata::PubdataBuilder;
use zksync_vm_interface::InspectExecutionMode;
use zksync_vm_interface::{pubdata::PubdataBuilder, InspectExecutionMode};

use crate::{
glue::GlueInto,
Expand Down
20 changes: 12 additions & 8 deletions core/lib/multivm/src/versions/vm_fast/tests/bootloader.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
use assert_matches::assert_matches;
use zksync_types::U256;
use zksync_vm2::interface::HeapId;
use zksync_vm_interface::VmInterface;

use crate::{
interface::{ExecutionResult, Halt, InspectExecutionMode, TxExecutionMode, VmInterfaceExt},
versions::vm_fast::tests::{
tester::VmTesterBuilder,
utils::{get_bootloader, verify_required_memory, BASE_SYSTEM_CONTRACTS},
interface::{ExecutionResult, Halt, TxExecutionMode},
versions::{
testonly::default_pubdata_builder,
vm_fast::tests::{
tester::VmTesterBuilder,
utils::{get_bootloader, verify_required_memory, BASE_SYSTEM_CONTRACTS},
},
},
};

Expand All @@ -21,8 +25,8 @@ fn test_dummy_bootloader() {
.with_execution_mode(TxExecutionMode::VerifyExecute)
.build();

let result = vm.vm.execute(InspectExecutionMode::Batch);
assert!(!result.result.is_failed());
let result = vm.vm.finish_batch(Some(default_pubdata_builder()));
assert!(!result.block_tip_execution_result.result.is_failed());

let correct_first_cell = U256::from_str_radix("123123123", 16).unwrap();

Expand All @@ -41,10 +45,10 @@ fn test_bootloader_out_of_gas() {
.with_execution_mode(TxExecutionMode::VerifyExecute)
.build();

let res = vm.vm.execute(InspectExecutionMode::Batch);
let res = vm.vm.finish_batch(Some(default_pubdata_builder()));

assert_matches!(
res.result,
res.block_tip_execution_result.result,
ExecutionResult::Halt {
reason: Halt::BootloaderOutOfGas
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::{
interface::{InspectExecutionMode, TxExecutionMode, VmEvent, VmInterface, VmInterfaceExt},
utils::bytecode,
versions::testonly::default_pubdata_builder,
vm_fast::tests::{
tester::{DeployContractsTx, TxType, VmTesterBuilder},
utils::read_test_contract,
Expand All @@ -27,7 +28,7 @@ fn test_bytecode_publishing() {
let result = vm.vm.execute(InspectExecutionMode::OneTx);
assert!(!result.result.is_failed(), "Transaction wasn't successful");

vm.vm.execute(InspectExecutionMode::Batch);
vm.vm.finish_batch(Some(default_pubdata_builder()));

let state = vm.vm.get_current_execution_state();
let long_messages = VmEvent::extract_long_l2_to_l1_messages(&state.events);
Expand Down
3 changes: 2 additions & 1 deletion core/lib/multivm/src/versions/vm_fast/tests/default_aa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use zksync_utils::u256_to_h256;

use crate::{
interface::{InspectExecutionMode, TxExecutionMode, VmInterface, VmInterfaceExt},
versions::testonly::default_pubdata_builder,
vm_fast::tests::{
tester::{DeployContractsTx, TxType, VmTesterBuilder},
utils::{get_balance, read_test_contract, verify_required_storage},
Expand Down Expand Up @@ -38,7 +39,7 @@ fn test_default_aa_interaction() {
let result = vm.vm.execute(InspectExecutionMode::OneTx);
assert!(!result.result.is_failed(), "Transaction wasn't successful");

vm.vm.execute(InspectExecutionMode::Batch);
vm.vm.finish_batch(Some(default_pubdata_builder()));

vm.vm.get_current_execution_state();

Expand Down
20 changes: 13 additions & 7 deletions core/lib/multivm/src/versions/vm_fast/tests/refunds.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use zksync_types::{Address, Execute, U256};

use crate::{
interface::{InspectExecutionMode, TxExecutionMode, VmInterface, VmInterfaceExt},
versions::testonly::ContractToDeploy,
versions::testonly::{default_pubdata_builder, ContractToDeploy},
vm_fast::tests::{
tester::{DeployContractsTx, TxType, VmTesterBuilder},
utils::{read_expensive_contract, read_test_contract},
Expand Down Expand Up @@ -44,9 +44,12 @@ fn test_predetermined_refunded_gas() {
);
assert!(result.refunds.gas_refunded > 0, "The final refund is 0");

let result_without_predefined_refunds = vm.vm.execute(InspectExecutionMode::Batch);
let result_without_predefined_refunds = vm.vm.finish_batch(Some(default_pubdata_builder()));
let mut current_state_without_predefined_refunds = vm.vm.get_current_execution_state();
assert!(!result_without_predefined_refunds.result.is_failed(),);
assert!(!result_without_predefined_refunds
.block_tip_execution_result
.result
.is_failed());

// Here we want to provide the same refund from the operator and check that it's the correct one.
// We execute the whole block without refund tracer, because refund tracer will eventually override the provided refund.
Expand All @@ -62,10 +65,13 @@ fn test_predetermined_refunded_gas() {
vm.vm
.push_transaction_inner(tx.clone(), result.refunds.gas_refunded, true);

let result_with_predefined_refunds = vm.vm.execute(InspectExecutionMode::Batch);
let result_with_predefined_refunds = vm.vm.finish_batch(Some(default_pubdata_builder()));
let mut current_state_with_predefined_refunds = vm.vm.get_current_execution_state();

assert!(!result_with_predefined_refunds.result.is_failed());
assert!(!result_with_predefined_refunds
.block_tip_execution_result
.result
.is_failed());

// We need to sort these lists as those are flattened from HashMaps
current_state_with_predefined_refunds
Expand Down Expand Up @@ -112,10 +118,10 @@ fn test_predetermined_refunded_gas() {
let changed_operator_suggested_refund = result.refunds.gas_refunded + 1000;
vm.vm
.push_transaction_inner(tx, changed_operator_suggested_refund, true);
let result = vm.vm.execute(InspectExecutionMode::Batch);
let result = vm.vm.finish_batch(Some(default_pubdata_builder()));
let mut current_state_with_changed_predefined_refunds = vm.vm.get_current_execution_state();

assert!(!result.result.is_failed());
assert!(!result.block_tip_execution_result.result.is_failed());
current_state_with_changed_predefined_refunds
.used_contract_hashes
.sort();
Expand Down
10 changes: 5 additions & 5 deletions core/lib/multivm/src/versions/vm_fast/tests/sekp256r1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ use zksync_types::{web3::keccak256, Execute, H256, U256};
use zksync_utils::h256_to_u256;

use crate::{
interface::{
ExecutionResult, InspectExecutionMode, TxExecutionMode, VmInterface, VmInterfaceExt,
},
interface::{ExecutionResult, TxExecutionMode, VmInterface},
versions::testonly::default_pubdata_builder,
vm_fast::tests::tester::VmTesterBuilder,
};

Expand Down Expand Up @@ -60,9 +59,10 @@ fn test_sekp256r1() {

vm.vm.push_transaction(tx);

let execution_result = vm.vm.execute(InspectExecutionMode::Batch);
let execution_result = vm.vm.finish_batch(Some(default_pubdata_builder()));

let ExecutionResult::Success { output } = execution_result.result else {
let ExecutionResult::Success { output } = execution_result.block_tip_execution_result.result
else {
panic!("batch failed")
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use assert_matches::assert_matches;

use crate::{
interface::{ExecutionResult, InspectExecutionMode, VmInterface, VmInterfaceExt},
versions::testonly::default_pubdata_builder,
vm_fast::tests::tester::{TxType, VmTesterBuilder},
};

Expand Down Expand Up @@ -75,6 +76,8 @@ fn simple_execute() {
assert_matches!(tx.result, ExecutionResult::Revert { .. });
let tx = vm.execute(InspectExecutionMode::OneTx);
assert_matches!(tx.result, ExecutionResult::Success { .. });
let block_tip = vm.execute(InspectExecutionMode::Batch);
let block_tip = vm
.finish_batch(Some(default_pubdata_builder()))
.block_tip_execution_result;
assert_matches!(block_tip.result, ExecutionResult::Success { .. });
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use crate::{
TxRevertReason, VmExecutionResultAndLogs, VmInterface, VmInterfaceExt,
VmInterfaceHistoryEnabled, VmRevertReason,
},
versions::testonly::default_pubdata_builder,
vm_fast::Vm,
};

Expand Down Expand Up @@ -209,7 +210,7 @@ impl VmTester<()> {
for tx_test_info in txs {
self.execute_tx_and_verify(tx_test_info.clone());
}
self.vm.execute(InspectExecutionMode::Batch);
self.vm.finish_batch(Some(default_pubdata_builder()));
let mut state = self.vm.get_current_execution_state();
state.used_contract_hashes.sort();
state
Expand Down
16 changes: 11 additions & 5 deletions core/lib/multivm/src/versions/vm_fast/tests/transfer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use zksync_utils::u256_to_h256;

use crate::{
interface::{InspectExecutionMode, TxExecutionMode, VmInterface, VmInterfaceExt},
versions::testonly::ContractToDeploy,
versions::testonly::{default_pubdata_builder, ContractToDeploy},
vm_fast::tests::{
tester::{get_empty_storage, VmTesterBuilder},
utils::get_balance,
Expand Down Expand Up @@ -86,8 +86,11 @@ fn test_send_or_transfer(test_option: TestOptions) {
"Transaction wasn't successful"
);

let batch_result = vm.vm.execute(InspectExecutionMode::Batch);
assert!(!batch_result.result.is_failed(), "Batch wasn't successful");
let batch_result = vm.vm.finish_batch(Some(default_pubdata_builder()));
assert!(
!batch_result.block_tip_execution_result.result.is_failed(),
"Batch wasn't successful"
);

let new_recipient_balance = get_balance(
AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
Expand Down Expand Up @@ -200,8 +203,11 @@ fn test_reentrancy_protection_send_or_transfer(test_option: TestOptions) {
"Transaction 2 should have failed, but it succeeded"
);

let batch_result = vm.vm.execute(InspectExecutionMode::Batch);
assert!(!batch_result.result.is_failed(), "Batch wasn't successful");
let batch_result = vm.vm.finish_batch(Some(default_pubdata_builder()));
assert!(
!batch_result.block_tip_execution_result.result.is_failed(),
"Batch wasn't successful"
);
}

#[test]
Expand Down
Loading

0 comments on commit 0984283

Please sign in to comment.