@@ -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.
0 commit comments