Skip to content

Commit

Permalink
feat(starknet_patricia,starknet_committer): stop using custom ClassHa…
Browse files Browse the repository at this point in the history
…sh type
  • Loading branch information
dorimedini-starkware committed Feb 19, 2025
1 parent 90f3bea commit 1e3413d
Show file tree
Hide file tree
Showing 15 changed files with 47 additions and 43 deletions.
1 change: 1 addition & 0 deletions crates/starknet_committer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ tokio = { workspace = true, features = ["rt"] }
tracing.workspace = true

[dev-dependencies]
starknet_api = { workspace = true, features = ["testing"] }
starknet_patricia = { workspace = true, features = ["testing"] }

[lints]
Expand Down
11 changes: 7 additions & 4 deletions crates/starknet_committer/src/block_committer/commit.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashMap;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::patricia_merkle_tree::types::{NodeIndex, SortedLeafIndices};
use starknet_patricia_storage::map_storage::MapStorage;
use tracing::{info, warn};
Expand All @@ -18,7 +18,7 @@ use crate::forest::original_skeleton_forest::{ForestSortedIndices, OriginalSkele
use crate::forest::updated_skeleton_forest::UpdatedSkeletonForest;
use crate::hash_function::hash::TreeHashFunctionImpl;
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{ClassHash, Nonce};
use crate::patricia_merkle_tree::types::{from_class_hash_for_node_index, Nonce};

type BlockCommitmentResult<T> = Result<T, BlockCommitmentError>;

Expand Down Expand Up @@ -119,8 +119,11 @@ pub(crate) fn get_all_modified_indices(
.iter()
.map(|address| from_contract_address_for_node_index(address))
.collect();
let classes_trie_indices: Vec<NodeIndex> =
state_diff.class_hash_to_compiled_class_hash.keys().map(NodeIndex::from).collect();
let classes_trie_indices: Vec<NodeIndex> = state_diff
.class_hash_to_compiled_class_hash
.keys()
.map(from_class_hash_for_node_index)
.collect();
let storage_tries_indices: HashMap<ContractAddress, Vec<NodeIndex>> = accessed_addresses
.iter()
.map(|address| {
Expand Down
17 changes: 13 additions & 4 deletions crates/starknet_committer/src/block_committer/input.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
use std::collections::{HashMap, HashSet};
use std::fmt::Debug;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::node_data::leaf::{LeafModifications, SkeletonLeaf};
use starknet_patricia::patricia_merkle_tree::types::NodeIndex;
use starknet_patricia_storage::storage_trait::{DbKey, DbValue};
use starknet_types_core::felt::Felt;
use tracing::level_filters::LevelFilter;

use crate::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use crate::patricia_merkle_tree::types::{
from_class_hash_for_node_index,
CompiledClassHash,
Nonce,
};

#[cfg(test)]
#[path = "input_test.rs"]
Expand Down Expand Up @@ -134,7 +138,10 @@ impl StateDiff {
self.class_hash_to_compiled_class_hash
.iter()
.map(|(class_hash, compiled_class_hash)| {
(class_hash.into(), SkeletonLeaf::from(compiled_class_hash.0))
(
from_class_hash_for_node_index(class_hash),
SkeletonLeaf::from(compiled_class_hash.0),
)
})
.collect()
}
Expand All @@ -159,7 +166,9 @@ impl StateDiff {
pub(crate) fn actual_classes_updates(&self) -> LeafModifications<CompiledClassHash> {
self.class_hash_to_compiled_class_hash
.iter()
.map(|(class_hash, compiled_class_hash)| (class_hash.into(), *compiled_class_hash))
.map(|(class_hash, compiled_class_hash)| {
(from_class_hash_for_node_index(class_hash), *compiled_class_hash)
})
.collect()
}
}
3 changes: 1 addition & 2 deletions crates/starknet_committer/src/forest/filled_forest.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashMap;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::filled_tree::tree::FilledTree;
use starknet_patricia::patricia_merkle_tree::node_data::leaf::LeafModifications;
Expand All @@ -19,7 +19,6 @@ use crate::forest::updated_skeleton_forest::UpdatedSkeletonForest;
use crate::hash_function::hash::ForestHashFunction;
use crate::patricia_merkle_tree::leaf::leaf_impl::{ContractState, ContractStateInput};
use crate::patricia_merkle_tree::types::{
ClassHash,
ClassesTrie,
CompiledClassHash,
ContractsTrie,
Expand Down
4 changes: 2 additions & 2 deletions crates/starknet_committer/src/forest/skeleton_forest_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::collections::HashMap;

use pretty_assertions::assert_eq;
use rstest::rstest;
use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::external_test_utils::{
create_32_bytes_entry,
Expand Down Expand Up @@ -33,7 +33,7 @@ use crate::block_committer::input::{
};
use crate::forest::original_skeleton_forest::{ForestSortedIndices, OriginalSkeletonForest};
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use crate::patricia_merkle_tree::types::{CompiledClassHash, Nonce};

macro_rules! compare_skeleton_tree {
($actual_skeleton:expr, $expected_skeleton:expr, $expected_indices:expr) => {{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashMap;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::patricia_merkle_tree::node_data::leaf::{LeafModifications, SkeletonLeaf};
use starknet_patricia::patricia_merkle_tree::types::NodeIndex;
use starknet_patricia::patricia_merkle_tree::updated_skeleton_tree::tree::{
Expand All @@ -13,7 +13,7 @@ use crate::block_committer::input::from_contract_address_for_node_index;
use crate::forest::forest_errors::{ForestError, ForestResult};
use crate::forest::original_skeleton_forest::OriginalSkeletonForest;
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{ClassHash, Nonce};
use crate::patricia_merkle_tree::types::Nonce;

pub(crate) struct UpdatedSkeletonForest {
pub(crate) classes_trie: UpdatedSkeletonTreeImpl,
Expand Down
3 changes: 2 additions & 1 deletion crates/starknet_committer/src/hash_function/hash_test.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use hex;
use rstest::rstest;
use starknet_api::core::ClassHash;
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::node_data::inner_node::{
BinaryData,
Expand All @@ -15,7 +16,7 @@ use starknet_types_core::hash::Pedersen;
use crate::block_committer::input::StarknetStorageValue;
use crate::hash_function::hash::TreeHashFunctionImpl;
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use crate::patricia_merkle_tree::types::{CompiledClassHash, Nonce};

#[rstest]
// Random StateTreeTuples and the expected hash results were generated and computed elsewhere.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use starknet_api::core::ClassHash;
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::filled_tree::tree::{FilledTree, FilledTreeImpl};
use starknet_patricia::patricia_merkle_tree::node_data::errors::{LeafError, LeafResult};
Expand All @@ -11,7 +12,7 @@ use starknet_types_core::felt::Felt;
use super::leaf_serde::CommitterLeafPrefix;
use crate::block_committer::input::StarknetStorageValue;
use crate::hash_function::hash::TreeHashFunctionImpl;
use crate::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use crate::patricia_merkle_tree::types::{CompiledClassHash, Nonce};

#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ContractState {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::collections::HashMap;

use serde_json::Value;
use starknet_api::core::ClassHash;
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::types::SubTreeHeight;
use starknet_patricia_storage::db_object::{DBObject, Deserializable};
Expand All @@ -10,12 +11,7 @@ use starknet_types_core::felt::Felt;

use crate::block_committer::input::StarknetStorageValue;
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{
fixed_hex_string_no_prefix,
ClassHash,
CompiledClassHash,
Nonce,
};
use crate::patricia_merkle_tree::types::{fixed_hex_string_no_prefix, CompiledClassHash, Nonce};

#[derive(Clone, Debug)]
pub enum CommitterLeafPrefix {
Expand Down Expand Up @@ -101,7 +97,7 @@ impl Deserializable for ContractState {
Ok(Self {
nonce: Nonce::from_hex(&nonce_as_hex)?,
storage_root_hash: HashOutput::from_hex(&root_hash_as_hex)?,
class_hash: ClassHash::from_hex(&class_hash_as_hex)?,
class_hash: ClassHash(Felt::from_hex(&class_hash_as_hex)?),
})
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use std::fmt::Debug;

use rstest::rstest;
use starknet_api::core::ClassHash;
use starknet_api::felt;
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::node_data::leaf::Leaf;
use starknet_patricia_storage::db_object::Deserializable;
Expand All @@ -9,7 +11,7 @@ use starknet_types_core::felt::Felt;

use crate::block_committer::input::StarknetStorageValue;
use crate::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use crate::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use crate::patricia_merkle_tree::types::{CompiledClassHash, Nonce};

#[rstest]
#[case::zero_storage_leaf(StarknetStorageValue(Felt::ZERO))]
Expand Down Expand Up @@ -62,6 +64,6 @@ fn test_deserialize_contract_state_without_nonce() {

// Validate the fields (nonce should be the default "0")
assert_eq!(contract_state.nonce, Nonce::from_hex("0x0").unwrap());
assert_eq!(contract_state.class_hash, ClassHash::from_hex("0x1234abcd").unwrap());
assert_eq!(contract_state.class_hash, ClassHash(felt!("0x1234abcd")));
assert_eq!(contract_state.storage_root_hash, HashOutput::from_hex("0x5678").unwrap());
}
13 changes: 3 additions & 10 deletions crates/starknet_committer/src/patricia_merkle_tree/types.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashMap;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_patricia::impl_from_hex_for_felt_wrapper;
use starknet_patricia::patricia_merkle_tree::filled_tree::tree::FilledTreeImpl;
use starknet_patricia::patricia_merkle_tree::types::NodeIndex;
Expand All @@ -13,17 +13,10 @@ pub fn fixed_hex_string_no_prefix(felt: &Felt) -> String {
format!("{:064x}", felt)
}

// TODO(Nimrod, 1/6/2024): Use the ClassHash defined in starknet-types-core when available.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ClassHash(pub Felt);

impl From<&ClassHash> for NodeIndex {
fn from(val: &ClassHash) -> Self {
NodeIndex::from_leaf_felt(&val.0)
}
pub fn from_class_hash_for_node_index(class_hash: &ClassHash) -> NodeIndex {
NodeIndex::from_leaf_felt(&class_hash.0)
}

impl_from_hex_for_felt_wrapper!(ClassHash);
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct Nonce(pub Felt);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use std::collections::HashMap;

use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_committer::block_committer::input::{
ConfigImpl,
Input,
StarknetStorageKey,
StarknetStorageValue,
StateDiff,
};
use starknet_committer::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use starknet_committer::patricia_merkle_tree::types::{CompiledClassHash, Nonce};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia_storage::errors::DeserializationError;
use starknet_patricia_storage::storage_trait::{DbKey, DbValue};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ use std::collections::HashMap;

use assert_matches::assert_matches;
use pretty_assertions::assert_eq;
use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_committer::block_committer::input::{
ConfigImpl,
Input,
StarknetStorageKey,
StarknetStorageValue,
StateDiff,
};
use starknet_committer::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use starknet_committer::patricia_merkle_tree::types::{CompiledClassHash, Nonce};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia_storage::errors::DeserializationError;
use starknet_patricia_storage::storage_trait::{DbKey, DbValue};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::fmt::Debug;

use ethnum::U256;
use serde_json::json;
use starknet_api::core::ContractAddress;
use starknet_api::core::{ClassHash, ContractAddress};
use starknet_committer::block_committer::input::{
StarknetStorageKey,
StarknetStorageValue,
Expand All @@ -13,7 +13,7 @@ use starknet_committer::forest::filled_forest::FilledForest;
use starknet_committer::hash_function::hash::TreeHashFunctionImpl;
use starknet_committer::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use starknet_committer::patricia_merkle_tree::tree::OriginalSkeletonStorageTrieConfig;
use starknet_committer::patricia_merkle_tree::types::{ClassHash, CompiledClassHash, Nonce};
use starknet_committer::patricia_merkle_tree::types::{CompiledClassHash, Nonce};
use starknet_patricia::hash::hash_trait::HashOutput;
use starknet_patricia::patricia_merkle_tree::external_test_utils::single_tree_flow_test;
use starknet_patricia::patricia_merkle_tree::filled_tree::node::FilledNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ use rand::prelude::IteratorRandom;
use rand::Rng;
use rand_distr::num_traits::ToPrimitive;
use rand_distr::{Distribution, Geometric};
use starknet_api::core::{ContractAddress, PATRICIA_KEY_UPPER_BOUND};
use starknet_api::core::{ClassHash, ContractAddress, PATRICIA_KEY_UPPER_BOUND};
use starknet_committer::block_committer::input::StarknetStorageValue;
use starknet_committer::forest::filled_forest::FilledForest;
use starknet_committer::patricia_merkle_tree::leaf::leaf_impl::ContractState;
use starknet_committer::patricia_merkle_tree::types::{
ClassHash,
ClassesTrie,
CompiledClassHash,
ContractsTrie,
Expand Down

0 comments on commit 1e3413d

Please sign in to comment.