diff --git a/Cargo.lock b/Cargo.lock index b7ce6e6c10b..6c8217c3a7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12690,6 +12690,7 @@ version = "0.0.0" dependencies = [ "blockifier", "blockifier_reexecution", + "cairo-lang-starknet-classes", "indexmap 2.12.0", "rstest", "starknet-rust", diff --git a/crates/starknet_os_runner/Cargo.toml b/crates/starknet_os_runner/Cargo.toml index 194798919ff..7331c690fa1 100644 --- a/crates/starknet_os_runner/Cargo.toml +++ b/crates/starknet_os_runner/Cargo.toml @@ -9,6 +9,7 @@ description = "Runs transactions through the Starknet OS and returns Cairo PIE a [dependencies] blockifier.workspace = true blockifier_reexecution.workspace = true +cairo-lang-starknet-classes.workspace = true indexmap.workspace = true starknet-rust.workspace = true starknet-rust-core.workspace = true diff --git a/crates/starknet_os_runner/src/classes_provider.rs b/crates/starknet_os_runner/src/classes_provider.rs new file mode 100644 index 00000000000..88c9a9accaf --- /dev/null +++ b/crates/starknet_os_runner/src/classes_provider.rs @@ -0,0 +1,26 @@ +use std::collections::{BTreeMap, HashSet}; + +use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass; +use starknet_api::core::{ClassHash, CompiledClassHash}; +use starknet_api::deprecated_contract_class::ContractClass; + +use crate::errors::ClassesProviderError; + +/// The classes required for a Starknet OS run. +/// Matches the fields in `StarknetOsInput` and `OsBlockInput`. +pub struct ClassesInput { + /// Deprecated (Cairo 0) contract classes. + /// Maps ClassHash to the contract class definition. + pub deprecated_compiled_classes: BTreeMap, + /// Cairo 1+ contract classes (CASM). + /// Maps CompiledClassHash to the CASM contract class definition. + pub compiled_classes: BTreeMap, +} + +pub trait ClassesProvider { + /// Fetches all classes required for the OS run based on the executed class hashes. + fn get_classes( + &self, + executed_class_hashes: HashSet, + ) -> Result; +} diff --git a/crates/starknet_os_runner/src/errors.rs b/crates/starknet_os_runner/src/errors.rs index 5b84cf13557..2c100af2d85 100644 --- a/crates/starknet_os_runner/src/errors.rs +++ b/crates/starknet_os_runner/src/errors.rs @@ -26,3 +26,9 @@ pub enum ProofProviderError { #[error("Invalid RPC proof response: {0}")] InvalidProofResponse(String), } + +#[derive(Debug, Error)] +pub enum ClassesProviderError { + #[error("Failed to get classes: {0}")] + GetClassesError(String), +} diff --git a/crates/starknet_os_runner/src/lib.rs b/crates/starknet_os_runner/src/lib.rs index 09d787718ad..1b836ca42de 100644 --- a/crates/starknet_os_runner/src/lib.rs +++ b/crates/starknet_os_runner/src/lib.rs @@ -1,3 +1,4 @@ +pub mod classes_provider; pub mod errors; pub mod storage_proofs; pub mod virtual_block_executor;