From 6a36944212f21e3c966c14c42474b49777b3c871 Mon Sep 17 00:00:00 2001 From: Dori Medini Date: Wed, 5 Feb 2025 17:18:34 +0200 Subject: [PATCH] feat(starknet_os,starknet_patricia,starknet_committer): deserializable commitment info --- Cargo.lock | 5 ++++ Cargo.toml | 1 + crates/starknet_committer/Cargo.toml | 1 - crates/starknet_os/Cargo.toml | 3 +++ crates/starknet_os/src/io/os_input.rs | 27 ++++++++++++++++++- crates/starknet_patricia/Cargo.toml | 1 + .../starknet_patricia/src/hash/hash_trait.rs | 1 + .../src/patricia_merkle_tree/types.rs | 1 + 8 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3517d03e20..2c8ff286616 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4134,6 +4134,9 @@ name = "ethnum" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +dependencies = [ + "serde", +] [[package]] name = "event-listener" @@ -11240,8 +11243,10 @@ dependencies = [ "blockifier", "cairo-vm", "indoc 2.0.5", + "serde", "starknet-types-core", "starknet_api", + "starknet_patricia", "strum 0.25.0", "strum_macros 0.25.3", "thiserror 1.0.69", diff --git a/Cargo.toml b/Cargo.toml index 65d7f366534..a281a471e2d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -241,6 +241,7 @@ starknet_mempool_p2p = { path = "crates/starknet_mempool_p2p", version = "0.0.0" starknet_mempool_p2p_types = { path = "crates/starknet_mempool_p2p_types", version = "0.0.0" } starknet_mempool_types = { path = "crates/starknet_mempool_types", version = "0.0.0" } starknet_monitoring_endpoint = { path = "crates/starknet_monitoring_endpoint", version = "0.0.0" } +starknet_os = { path = "crates/starknet_os", version = "0.0.0" } starknet_patricia = { path = "crates/starknet_patricia", version = "0.0.0" } starknet_sequencer_infra = { path = "crates/starknet_sequencer_infra", version = "0.0.0" } starknet_sequencer_metrics = { path = "crates/starknet_sequencer_metrics", version = "0.0.0" } diff --git a/crates/starknet_committer/Cargo.toml b/crates/starknet_committer/Cargo.toml index bc354434e19..16aa7e0d444 100644 --- a/crates/starknet_committer/Cargo.toml +++ b/crates/starknet_committer/Cargo.toml @@ -6,7 +6,6 @@ repository.workspace = true license.workspace = true description = "Computes and manages Starknet state." - [dependencies] hex.workspace = true pretty_assertions.workspace = true diff --git a/crates/starknet_os/Cargo.toml b/crates/starknet_os/Cargo.toml index 34b3eb02eba..1bf0599def8 100644 --- a/crates/starknet_os/Cargo.toml +++ b/crates/starknet_os/Cargo.toml @@ -7,14 +7,17 @@ license-file.workspace = true description = "The Starknet OS." [features] +deserialize = ["serde", "starknet-types-core/serde", "starknet_patricia/deserialize"] testing = ["dep:strum", "dep:strum_macros"] [dependencies] blockifier.workspace = true cairo-vm.workspace = true indoc.workspace = true +serde = { workspace = true, optional = true, features = ["derive"] } starknet-types-core.workspace = true starknet_api.workspace = true +starknet_patricia.workspace = true strum = { workspace = true, optional = true } strum_macros = { workspace = true, optional = true } thiserror.workspace = true diff --git a/crates/starknet_os/src/io/os_input.rs b/crates/starknet_os/src/io/os_input.rs index afb6037723f..b942b5bb8db 100644 --- a/crates/starknet_os/src/io/os_input.rs +++ b/crates/starknet_os/src/io/os_input.rs @@ -1,4 +1,29 @@ +use std::collections::HashMap; + +use starknet_api::core::ContractAddress; +use starknet_patricia::hash::hash_trait::HashOutput; +use starknet_patricia::patricia_merkle_tree::types::SubTreeHeight; +use starknet_types_core::felt::Felt; + +#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] +pub struct CommitmentInfo { + _previous_root: HashOutput, + _updated_root: HashOutput, + _tree_height: SubTreeHeight, + // TODO(Dori, 1/8/2025): The value type here should probably be more specific (NodeData for + // L: Leaf). This poses a problem in deserialization, as a serialized edge node and a + // serialized contract state leaf are both currently vectors of 3 field elements; as the + // semantics of the values are unimportant for the OS commitments, we make do with a vector + // of field elements as values for now. + _commitment_facts: HashMap>, +} + /// All input needed to initialize the execution helper. // TODO(Dori): Add all fields needed to compute commitments, initialize a CachedState and other data // required by the execution helper. -pub struct StarknetOsInput {} +#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] +pub struct StarknetOsInput { + _contract_state_commitment_info: CommitmentInfo, + _address_to_storage_commitment_info: HashMap, + _contract_class_commitment_info: CommitmentInfo, +} diff --git a/crates/starknet_patricia/Cargo.toml b/crates/starknet_patricia/Cargo.toml index f636ebd8629..91c9cceba1d 100644 --- a/crates/starknet_patricia/Cargo.toml +++ b/crates/starknet_patricia/Cargo.toml @@ -10,6 +10,7 @@ description = "Library for computing and updating Patricia trees." workspace = true [features] +deserialize = ["ethnum/serde"] testing = [] [dev-dependencies] diff --git a/crates/starknet_patricia/src/hash/hash_trait.rs b/crates/starknet_patricia/src/hash/hash_trait.rs index c7ace47813e..ccc464f85f8 100644 --- a/crates/starknet_patricia/src/hash/hash_trait.rs +++ b/crates/starknet_patricia/src/hash/hash_trait.rs @@ -3,6 +3,7 @@ use starknet_types_core::felt::FromStrError; use crate::felt::Felt; use crate::impl_from_hex_for_felt_wrapper; +#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] pub struct HashOutput(pub Felt); diff --git a/crates/starknet_patricia/src/patricia_merkle_tree/types.rs b/crates/starknet_patricia/src/patricia_merkle_tree/types.rs index 370731e0bd1..6653213d2b8 100644 --- a/crates/starknet_patricia/src/patricia_merkle_tree/types.rs +++ b/crates/starknet_patricia/src/patricia_merkle_tree/types.rs @@ -8,6 +8,7 @@ use crate::patricia_merkle_tree::node_data::inner_node::{EdgePathLength, PathToB #[path = "types_test.rs"] pub mod types_test; +#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] #[derive(Clone, Copy, Debug, Eq, PartialEq, derive_more::Sub, derive_more::Display)] pub struct SubTreeHeight(pub(crate) u8);