Skip to content

Commit 66e6f67

Browse files
starknet_os: convert StateCommitmentInfos::new into a free function (#14488)
1 parent 22d4c04 commit 66e6f67

3 files changed

Lines changed: 76 additions & 77 deletions

File tree

crates/starknet_os/src/commitment_infos.rs

Lines changed: 68 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -66,83 +66,78 @@ pub enum CommitmentInfosError {
6666
FetchStorageProofs(#[from] TraversalError),
6767
}
6868

69-
impl StateCommitmentInfos {
70-
/// Creates the commitment infos for the OS from previous and new state roots and the
71-
/// keys that were read during execution.
72-
pub async fn new(
73-
previous_state_roots: &StateRoots,
74-
new_state_roots: &StateRoots,
75-
commitments: &mut MapStorage,
76-
accessed_keys: &AccessedKeys,
77-
) -> Result<Self, CommitmentInfosError> {
78-
let addresses: Vec<ContractAddress> =
79-
accessed_keys.accessed_contracts.iter().copied().collect();
80-
81-
let previous_storage_roots = get_storage_roots(
82-
&addresses,
83-
previous_state_roots.contracts_trie_root_hash,
84-
commitments,
85-
)
86-
.await?;
87-
let new_storage_roots =
88-
get_storage_roots(&addresses, new_state_roots.contracts_trie_root_hash, commitments)
89-
.await?;
69+
/// Creates the commitment infos for the OS from previous and new state roots and the
70+
/// keys that were read during execution.
71+
pub async fn build_state_commitment_infos(
72+
previous_state_roots: &StateRoots,
73+
new_state_roots: &StateRoots,
74+
commitments: &mut MapStorage,
75+
accessed_keys: &AccessedKeys,
76+
) -> Result<StateCommitmentInfos, CommitmentInfosError> {
77+
let addresses: Vec<ContractAddress> =
78+
accessed_keys.accessed_contracts.iter().copied().collect();
9079

91-
let storage_proofs = fetch_previous_and_new_patricia_paths(
92-
commitments,
93-
RootHashes {
94-
previous_root_hash: previous_state_roots.classes_trie_root_hash,
95-
new_root_hash: new_state_roots.classes_trie_root_hash,
96-
},
97-
RootHashes {
98-
previous_root_hash: previous_state_roots.contracts_trie_root_hash,
99-
new_root_hash: new_state_roots.contracts_trie_root_hash,
100-
},
101-
accessed_keys,
102-
)
103-
.await?;
80+
let previous_storage_roots =
81+
get_storage_roots(&addresses, previous_state_roots.contracts_trie_root_hash, commitments)
82+
.await?;
83+
let new_storage_roots =
84+
get_storage_roots(&addresses, new_state_roots.contracts_trie_root_hash, commitments)
85+
.await?;
10486

105-
let contracts_trie_commitment_info = CommitmentInfo {
106-
previous_root: previous_state_roots.contracts_trie_root_hash,
107-
updated_root: new_state_roots.contracts_trie_root_hash,
108-
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
109-
commitment_facts: flatten_preimages(&storage_proofs.contracts_trie_proof.nodes),
110-
};
111-
let classes_trie_commitment_info = CommitmentInfo {
112-
previous_root: previous_state_roots.classes_trie_root_hash,
113-
updated_root: new_state_roots.classes_trie_root_hash,
114-
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
115-
commitment_facts: flatten_preimages(&storage_proofs.classes_trie_proof),
116-
};
117-
let storage_tries_commitment_infos = previous_storage_roots
118-
.iter()
119-
.map(|(address, previous_root_hash)| {
120-
// Not all contracts in `previous_storage_roots` have storage proofs. For
121-
// example, a contract that only had its nonce changed.
122-
let storage_proof = flatten_preimages(
123-
storage_proofs
124-
.contracts_trie_storage_proofs
125-
.get(address)
126-
.unwrap_or(&HashMap::new()),
127-
);
128-
(
129-
*address,
130-
CommitmentInfo {
131-
previous_root: *previous_root_hash,
132-
updated_root: new_storage_roots[address],
133-
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
134-
commitment_facts: storage_proof,
135-
},
136-
)
137-
})
138-
.collect();
87+
let storage_proofs = fetch_previous_and_new_patricia_paths(
88+
commitments,
89+
RootHashes {
90+
previous_root_hash: previous_state_roots.classes_trie_root_hash,
91+
new_root_hash: new_state_roots.classes_trie_root_hash,
92+
},
93+
RootHashes {
94+
previous_root_hash: previous_state_roots.contracts_trie_root_hash,
95+
new_root_hash: new_state_roots.contracts_trie_root_hash,
96+
},
97+
accessed_keys,
98+
)
99+
.await?;
139100

140-
Ok(Self {
141-
contracts_trie_commitment_info,
142-
classes_trie_commitment_info,
143-
storage_tries_commitment_infos,
101+
let contracts_trie_commitment_info = CommitmentInfo {
102+
previous_root: previous_state_roots.contracts_trie_root_hash,
103+
updated_root: new_state_roots.contracts_trie_root_hash,
104+
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
105+
commitment_facts: flatten_preimages(&storage_proofs.contracts_trie_proof.nodes),
106+
};
107+
let classes_trie_commitment_info = CommitmentInfo {
108+
previous_root: previous_state_roots.classes_trie_root_hash,
109+
updated_root: new_state_roots.classes_trie_root_hash,
110+
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
111+
commitment_facts: flatten_preimages(&storage_proofs.classes_trie_proof),
112+
};
113+
let storage_tries_commitment_infos = previous_storage_roots
114+
.iter()
115+
.map(|(address, previous_root_hash)| {
116+
// Not all contracts in `previous_storage_roots` have storage proofs. For
117+
// example, a contract that only had its nonce changed.
118+
let storage_proof = flatten_preimages(
119+
storage_proofs
120+
.contracts_trie_storage_proofs
121+
.get(address)
122+
.unwrap_or(&HashMap::new()),
123+
);
124+
(
125+
*address,
126+
CommitmentInfo {
127+
previous_root: *previous_root_hash,
128+
updated_root: new_storage_roots[address],
129+
tree_height: SubTreeHeight::ACTUAL_HEIGHT,
130+
commitment_facts: storage_proof,
131+
},
132+
)
144133
})
145-
}
134+
.collect();
135+
136+
Ok(StateCommitmentInfos {
137+
contracts_trie_commitment_info,
138+
classes_trie_commitment_info,
139+
storage_tries_commitment_infos,
140+
})
146141
}
147142

148143
/// Fetches the storage root hash of each contract from the contracts trie at the given root.

crates/starknet_os_flow_tests/src/test_manager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ use starknet_committer::block_committer::input::{
6565
};
6666
use starknet_committer::db::facts_db::FactsDb;
6767
use starknet_committer::db::forest_trait::StorageInitializer;
68-
use starknet_os::commitment_infos::StateCommitmentInfos;
68+
use starknet_os::commitment_infos::build_state_commitment_infos;
6969
use starknet_os::hints::hint_implementation::state_diff_encryption::utils::compute_public_keys;
7070
use starknet_os::io::os_input::{OsBlockInput, OsHints, OsHintsConfig, StarknetOsInput};
7171
use starknet_os::io::os_output::{MessageToL2, OsStateDiff, StarknetOsRunnerOutput};
@@ -940,7 +940,7 @@ impl<S: FlowTestState> TestBuilder<S> {
940940
.expect("Failed to commit state diff.");
941941
map_storage = db.consume_storage();
942942

943-
let commitment_infos = StateCommitmentInfos::new(
943+
let commitment_infos = build_state_commitment_infos(
944944
&previous_state_roots,
945945
&new_state_roots,
946946
&mut map_storage,

crates/starknet_transaction_prover/src/running/storage_proofs.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ use serde::{Deserialize, Serialize};
88
use starknet_api::block::BlockNumber;
99
use starknet_api::core::{ClassHash, ContractAddress, Nonce};
1010
use starknet_api::hash::{HashOutput, StateRoots};
11-
use starknet_os::commitment_infos::{CommitmentInfo, StateCommitmentInfos};
11+
use starknet_os::commitment_infos::{
12+
build_state_commitment_infos,
13+
CommitmentInfo,
14+
StateCommitmentInfos,
15+
};
1216
use starknet_patricia::patricia_merkle_tree::node_data::inner_node::{
1317
flatten_preimages,
1418
Preimage,
@@ -348,7 +352,7 @@ impl RpcStorageProofsProvider {
348352

349353
// TODO(Aviv): Try to undertand if we can create classes trie commitment info
350354
// without the compiled class hashes.
351-
let mut commitment_infos = StateCommitmentInfos::new(
355+
let mut commitment_infos = build_state_commitment_infos(
352356
&previous_state_roots,
353357
&new_roots,
354358
&mut map_storage,

0 commit comments

Comments
 (0)