@@ -56,33 +56,40 @@ where
5656 . state_update ( block_number. into ( ) ) ?
5757 . ok_or ( Error :: MissingStateUpdate ( block_number) ) ?;
5858
59- let contract_trie_root =
59+ let computed_contract_trie_root =
6060 self . provider . trie_insert_contract_updates ( block_number, & state_update) ?;
6161
62- let computed_state_root = if dbg ! ( !state_update . declared_classes . is_empty ( ) ) {
63- let class_trie_root = self . provider . trie_insert_declared_classes (
64- block_number ,
65- dbg ! ( & state_update . declared_classes ) ,
66- ) ? ;
62+ debug ! (
63+ target : "stage" ,
64+ contract_trie_root = format! ( "{computed_contract_trie_root:#x}" ) ,
65+ "Computed contract trie root."
66+ ) ;
6767
68- // Compute the state root:
69- // hash("STARKNET_STATE_V0", contract_trie_root, class_trie_root)
70- let computed_state_root = Poseidon :: hash_array ( & [
71- short_string ! ( "STARKNET_STATE_V0" ) ,
72- dbg ! ( contract_trie_root) ,
73- dbg ! ( class_trie_root) ,
74- ] ) ;
68+ let computed_class_trie_root = self
69+ . provider
70+ . trie_insert_declared_classes ( block_number, & state_update. declared_classes ) ?;
7571
76- computed_state_root
72+ debug ! (
73+ target: "stage" ,
74+ classes_tri_root = format!( "{computed_class_trie_root:#x}" ) ,
75+ "Computed classes trie root."
76+ ) ;
77+
78+ let computed_state_root = if computed_class_trie_root == Felt :: ZERO {
79+ computed_contract_trie_root
7780 } else {
78- contract_trie_root
81+ Poseidon :: hash_array ( & [
82+ short_string ! ( "STARKNET_STATE_V0" ) ,
83+ computed_contract_trie_root,
84+ computed_class_trie_root,
85+ ] )
7986 } ;
8087
8188 // Verify that the computed state root matches the expected state root from the
8289 // block header
8390 if computed_state_root != expected_state_root {
8491 error ! (
85- block = %block_number ,
92+ target : "stage" ,
8693 state_root = %format!( "{computed_state_root:#x}" ) ,
8794 expected_state_root = %format!( "{expected_state_root:#x}" ) ,
8895 "Wrong trie root for block - computed state root does not match expected state root (from header)" ,
96103 . into ( ) ) ;
97104 }
98105
99- debug ! ( block = %block_number , "State root verified successfully." ) ;
106+ debug ! ( target : "stage" , "State root verified successfully." ) ;
100107 }
101108
102109 Ok ( StageExecutionOutput { last_block_processed : input. to ( ) } )
0 commit comments