diff --git a/crates/starknet_integration_tests/src/flow_test_setup.rs b/crates/starknet_integration_tests/src/flow_test_setup.rs index cd4851189ef..3cc402e02f9 100644 --- a/crates/starknet_integration_tests/src/flow_test_setup.rs +++ b/crates/starknet_integration_tests/src/flow_test_setup.rs @@ -33,7 +33,7 @@ use tempfile::TempDir; use tracing::{debug, instrument}; use crate::integration_test_setup::NodeExecutionId; -use crate::state_reader::{StorageTestSetup, TempDirHandlePair}; +use crate::state_reader::StorageTestSetup; use crate::utils::{ create_chain_info, create_consensus_manager_configs_from_network_configs, @@ -124,7 +124,7 @@ pub struct FlowSequencerSetup { // Handlers for the storage files, maintained so the files are not deleted. pub batcher_storage_file_handle: Option, pub state_sync_storage_file_handle: Option, - pub class_manager_storage_file_handles: TempDirHandlePair, + pub class_manager_storage_file_handles: Option, // Node configuration. pub node_config: SequencerNodeConfig, diff --git a/crates/starknet_integration_tests/src/integration_test_setup.rs b/crates/starknet_integration_tests/src/integration_test_setup.rs index e5038d70977..d06b54b63bd 100644 --- a/crates/starknet_integration_tests/src/integration_test_setup.rs +++ b/crates/starknet_integration_tests/src/integration_test_setup.rs @@ -20,7 +20,7 @@ use tempfile::{tempdir, TempDir}; use tracing::instrument; use crate::config_utils::dump_config_file_changes; -use crate::state_reader::{StorageTestSetup, TempDirHandlePair}; +use crate::state_reader::StorageTestSetup; use crate::utils::{create_node_config, spawn_local_success_recorder}; #[derive(Debug, Copy, Clone)] @@ -81,7 +81,7 @@ pub struct ExecutableSetup { #[allow(dead_code)] state_sync_storage_handle: Option, #[allow(dead_code)] - class_manager_storage_handles: TempDirHandlePair, + class_manager_storage_handles: Option, } // TODO(Tsabary/ Nadin): reduce number of args. diff --git a/crates/starknet_integration_tests/src/state_reader.rs b/crates/starknet_integration_tests/src/state_reader.rs index 1ea965aa31e..2bb18beb110 100644 --- a/crates/starknet_integration_tests/src/state_reader.rs +++ b/crates/starknet_integration_tests/src/state_reader.rs @@ -9,7 +9,7 @@ use blockifier::test_utils::contracts::FeatureContract; use blockifier::test_utils::{CairoVersion, RunnableCairo1, BALANCE}; use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass; use indexmap::IndexMap; -use itertools::Itertools; +use itertools::{zip_eq, Itertools}; use mempool_test_utils::starknet_api_test_utils::{AccountTransactionGenerator, Contract}; use papyrus_storage::body::BodyStorageWriter; use papyrus_storage::class::ClassStorageWriter; @@ -28,6 +28,7 @@ use starknet_api::block::{ FeeType, GasPricePerToken, }; +use starknet_api::contract_class::{ContractClass, SierraVersion}; use starknet_api::core::{ClassHash, ContractAddress, Nonce, SequencerContractAddress}; use starknet_api::deprecated_contract_class::ContractClass as DeprecatedContractClass; use starknet_api::state::{SierraContractClass, StorageKey, ThinStateDiff}; @@ -39,6 +40,7 @@ use starknet_api::test_utils::{ }; use starknet_api::transaction::fields::Fee; use starknet_api::{contract_address, felt}; +use starknet_class_manager::class_storage::{ClassStorage, FsClassStorage}; use starknet_class_manager::config::FsClassStorageConfig; use starknet_class_manager::test_utils::FsClassStorageBuilderForTesting; use starknet_types_core::felt::Felt; @@ -108,8 +110,13 @@ impl StorageTestSetup { fs_class_storage_builder = fs_class_storage_builder .with_existing_paths(class_hash_storage_path_prefix, persistent_root); } - let (_class_manager_storage, class_manager_storage_config, class_manager_storage_handles) = - fs_class_storage_builder.build(); + let ( + mut class_manager_storage, + class_manager_storage_config, + class_manager_storage_handles, + ) = fs_class_storage_builder.build(); + + initialize_class_manager_test_state(&mut class_manager_storage, classes); Self { batcher_storage_config, @@ -170,6 +177,7 @@ impl PresetTestContracts { struct TestClasses { pub cairo0_contract_classes: Vec<(ClassHash, DeprecatedContractClass)>, + // TODO(yair): Merge the two vectors into a single one. pub sierra_vec: Vec<(ClassHash, SierraContractClass)>, pub cairo1_contract_classes: Vec<(ClassHash, CasmContractClass)>, } @@ -193,6 +201,35 @@ impl TestClasses { } } +fn initialize_class_manager_test_state( + class_manager_storage: &mut FsClassStorage, + classes: TestClasses, +) { + let TestClasses { cairo0_contract_classes, sierra_vec, cairo1_contract_classes } = classes; + + for (class_hash, cairo_0_class) in cairo0_contract_classes { + class_manager_storage + .set_deprecated_class(class_hash, cairo_0_class.try_into().unwrap()) + .unwrap(); + } + for ((sierra_class_hash, sierra), (casm_class_hash, casm)) in + zip_eq(sierra_vec, cairo1_contract_classes) + { + assert_eq!(sierra_class_hash, casm_class_hash, "Class hashes must match"); + let sierra_version = SierraVersion::extract_from_program(&sierra.sierra_program).unwrap(); + let class = ContractClass::V1((casm, sierra_version)); + let compiled_class_hash = class.compiled_class_hash(); + class_manager_storage + .set_class( + sierra_class_hash, + sierra.try_into().unwrap(), + compiled_class_hash, + class.try_into().unwrap(), + ) + .unwrap(); + } +} + fn initialize_papyrus_test_state( storage_writer: &mut StorageWriter, chain_info: &ChainInfo,