From 87c5b5360587b701509b5313895c0c6577241009 Mon Sep 17 00:00:00 2001 From: Nimrod Weiss Date: Sun, 21 Apr 2024 11:17:13 +0300 Subject: [PATCH] refactor: removed duplicate definitions of storage prefixes --- .../src/patricia_merkle_tree/filled_node.rs | 15 +++++++------- .../original_skeleton_calc.rs | 4 ++-- .../original_skeleton_calc_test.rs | 2 +- .../patricia_merkle_tree/serialized_node.rs | 6 ------ crates/committer/src/storage/storage_trait.rs | 20 ++++++++++++------- 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/crates/committer/src/patricia_merkle_tree/filled_node.rs b/crates/committer/src/patricia_merkle_tree/filled_node.rs index b1e5f280..88394a25 100644 --- a/crates/committer/src/patricia_merkle_tree/filled_node.rs +++ b/crates/committer/src/patricia_merkle_tree/filled_node.rs @@ -3,13 +3,12 @@ use crate::patricia_merkle_tree::errors::FilledTreeError; use crate::patricia_merkle_tree::filled_tree::FilledTreeResult; use crate::patricia_merkle_tree::original_skeleton_tree::OriginalSkeletonTreeResult; use crate::patricia_merkle_tree::serialized_node::{ - LeafCompiledClassToSerialize, SerializeNode, COMPLIED_CLASS_PREFIX, INNER_NODE_PREFIX, - SERIALIZE_HASH_BYTES, STATE_TREE_LEAF_PREFIX, STORAGE_LEAF_PREFIX, + LeafCompiledClassToSerialize, SerializeNode, SERIALIZE_HASH_BYTES, }; use crate::patricia_merkle_tree::serialized_node::{BINARY_BYTES, EDGE_BYTES, EDGE_PATH_BYTES}; use crate::patricia_merkle_tree::types::{EdgeData, LeafDataTrait}; use crate::patricia_merkle_tree::types::{EdgePath, EdgePathLength, PathToBottom}; -use crate::storage::storage_trait::{create_db_key, StorageKey, StorageValue}; +use crate::storage::storage_trait::{create_db_key, StorageKey, StoragePrefix, StorageValue}; use crate::types::Felt; // TODO(Nimrod, 1/6/2024): Swap to starknet-types-core types once implemented. @@ -207,15 +206,17 @@ impl FilledNode { let suffix = self.suffix(); match &self.data { - NodeData::Binary(_) | NodeData::Edge(_) => create_db_key(INNER_NODE_PREFIX, &suffix), + NodeData::Binary(_) | NodeData::Edge(_) => { + create_db_key(StoragePrefix::InnerNode, &suffix) + } NodeData::Leaf(LeafData::StorageValue(_)) => { - create_db_key(STORAGE_LEAF_PREFIX, &suffix) + create_db_key(StoragePrefix::StorageLeaf, &suffix) } NodeData::Leaf(LeafData::CompiledClassHash(_)) => { - create_db_key(COMPLIED_CLASS_PREFIX, &suffix) + create_db_key(StoragePrefix::CompiledClassLeaf, &suffix) } NodeData::Leaf(LeafData::StateTreeTuple { .. }) => { - create_db_key(STATE_TREE_LEAF_PREFIX, &suffix) + create_db_key(StoragePrefix::StateTreeLeaf, &suffix) } } } diff --git a/crates/committer/src/patricia_merkle_tree/original_skeleton_calc.rs b/crates/committer/src/patricia_merkle_tree/original_skeleton_calc.rs index f75c02e1..baaa2eb3 100644 --- a/crates/committer/src/patricia_merkle_tree/original_skeleton_calc.rs +++ b/crates/committer/src/patricia_merkle_tree/original_skeleton_calc.rs @@ -12,6 +12,7 @@ use crate::patricia_merkle_tree::{ filled_node::LeafData, original_skeleton_node::OriginalSkeletonNode, types::NodeIndex, }; use crate::storage::errors::StorageError; +use crate::storage::storage_trait::create_db_key; use crate::storage::storage_trait::Storage; use crate::storage::storage_trait::StorageKey; use crate::storage::storage_trait::StoragePrefix; @@ -188,8 +189,7 @@ impl OriginalSkeletonTreeImpl { ) -> OriginalSkeletonTreeResult>> { let mut subtrees_roots = vec![]; for subtree in subtrees.iter() { - let key = - StorageKey::from(subtree.root_hash.0).with_prefix(StoragePrefix::PatriciaNode); + let key = create_db_key(StoragePrefix::InnerNode, &subtree.root_hash.0.as_bytes()); let val = storage.get(&key).ok_or(StorageError::MissingKey(key))?; subtrees_roots.push(FilledNode::deserialize( &StorageKey::from(subtree.root_hash.0), diff --git a/crates/committer/src/patricia_merkle_tree/original_skeleton_calc_test.rs b/crates/committer/src/patricia_merkle_tree/original_skeleton_calc_test.rs index 6843d9ce..f72f8188 100644 --- a/crates/committer/src/patricia_merkle_tree/original_skeleton_calc_test.rs +++ b/crates/committer/src/patricia_merkle_tree/original_skeleton_calc_test.rs @@ -259,7 +259,7 @@ fn create_32_bytes_entry(simple_val: u8) -> Vec { } fn create_patricia_key(val: u8) -> StorageKey { - StorageKey(create_32_bytes_entry(val)).with_prefix(StoragePrefix::PatriciaNode) + StorageKey(create_32_bytes_entry(val)).with_prefix(StoragePrefix::InnerNode) } fn create_binary_val(left: u8, right: u8) -> StorageValue { diff --git a/crates/committer/src/patricia_merkle_tree/serialized_node.rs b/crates/committer/src/patricia_merkle_tree/serialized_node.rs index 03ab1b36..65fbd28f 100644 --- a/crates/committer/src/patricia_merkle_tree/serialized_node.rs +++ b/crates/committer/src/patricia_merkle_tree/serialized_node.rs @@ -17,12 +17,6 @@ pub(crate) const STORAGE_LEAF_SIZE: usize = SERIALIZE_HASH_BYTES; // TODO(Aviv, 17/4/2024): add CompiledClassLeaf size. // TODO(Aviv, 17/4/2024): add StateTreeLeaf size. -// Const describe the prefix of the serialized node. -pub(crate) const STORAGE_LEAF_PREFIX: &[u8; 21] = b"starknet_storage_leaf"; -pub(crate) const STATE_TREE_LEAF_PREFIX: &[u8; 14] = b"contract_state"; -pub(crate) const COMPLIED_CLASS_PREFIX: &[u8; 19] = b"contract_class_leaf"; -pub(crate) const INNER_NODE_PREFIX: &[u8; 13] = b"patricia_node"; - /// Enum to describe the serialized node. #[allow(dead_code)] pub(crate) enum SerializeNode { diff --git a/crates/committer/src/storage/storage_trait.rs b/crates/committer/src/storage/storage_trait.rs index f143b501..7518663d 100644 --- a/crates/committer/src/storage/storage_trait.rs +++ b/crates/committer/src/storage/storage_trait.rs @@ -29,22 +29,28 @@ pub(crate) trait Storage { } pub(crate) enum StoragePrefix { - PatriciaNode, + InnerNode, + StorageLeaf, + StateTreeLeaf, + CompiledClassLeaf, } +/// Describes a storage prefix as used in Aerospike DB. impl StoragePrefix { pub(crate) fn to_bytes(&self) -> &[u8] { match self { - Self::PatriciaNode => "patricia_node:".as_bytes(), + Self::InnerNode => b"patricia_node", + Self::StorageLeaf => b"starknet_storage_leaf", + Self::StateTreeLeaf => b"contract_state", + Self::CompiledClassLeaf => b"contract_class_leaf", } } } +#[allow(dead_code)] impl StorageKey { pub(crate) fn with_prefix(&self, prefix: StoragePrefix) -> Self { - let mut prefix = prefix.to_bytes().to_vec(); - prefix.extend(&self.0); - StorageKey(prefix) + create_db_key(prefix, &self.0) } } @@ -55,6 +61,6 @@ impl From for StorageKey { } /// Returns a `StorageKey` from a prefix and a suffix. -pub(crate) fn create_db_key(prefix: &[u8], suffix: &[u8]) -> StorageKey { - StorageKey([prefix.to_vec(), b":".to_vec(), suffix.to_vec()].concat()) +pub(crate) fn create_db_key(prefix: StoragePrefix, suffix: &[u8]) -> StorageKey { + StorageKey([prefix.to_bytes().to_vec(), b":".to_vec(), suffix.to_vec()].concat()) }