@@ -4,9 +4,10 @@ use katana_primitives::Felt;
44use katana_provider:: api:: block:: HeaderProvider ;
55use katana_provider:: api:: state_update:: StateUpdateProvider ;
66use katana_provider:: api:: trie:: TrieWriter ;
7+ use katana_rpc_types:: class;
78use starknet:: macros:: short_string;
89use starknet_types_core:: hash:: { Poseidon , StarkHash } ;
9- use tracing:: { error, info_span, trace, trace_span} ;
10+ use tracing:: { debug , error, info_span, trace, trace_span} ;
1011
1112use crate :: { Stage , StageExecutionInput , StageExecutionOutput , StageResult } ;
1213
4142 fn execute < ' a > ( & ' a mut self , input : & ' a StageExecutionInput ) -> BoxFuture < ' a , StageResult > {
4243 Box :: pin ( async move {
4344 for block_number in input. from ( ) ..=input. to ( ) {
44- let span = info_span ! ( "compute_state_root" , %block_number) ;
45+ let span = info_span ! ( "state_trie. compute_state_root" , %block_number) ;
4546 let _enter = span. enter ( ) ;
4647
4748 let expected_state_root = self
@@ -55,20 +56,27 @@ where
5556 . state_update ( block_number. into ( ) ) ?
5657 . ok_or ( Error :: MissingStateUpdate ( block_number) ) ?;
5758
58- let class_trie_root = self
59- . provider
60- . trie_insert_declared_classes ( block_number, & state_update. declared_classes ) ?;
61-
6259 let contract_trie_root =
6360 self . provider . trie_insert_contract_updates ( block_number, & state_update) ?;
6461
65- // Compute the state root:
66- // hash("STARKNET_STATE_V0", contract_trie_root, class_trie_root)
67- let computed_state_root = Poseidon :: hash_array ( & [
68- short_string ! ( "STARKNET_STATE_V0" ) ,
69- contract_trie_root,
70- class_trie_root,
71- ] ) ;
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+ ) ?;
67+
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+ ] ) ;
75+
76+ computed_state_root
77+ } else {
78+ contract_trie_root
79+ } ;
7280
7381 // Verify that the computed state root matches the expected state root from the
7482 // block header
8896 . into ( ) ) ;
8997 }
9098
91- trace ! (
92- block = %block_number,
93- state_root = %format!( "{computed_state_root:#x}" ) ,
94- "State root verified successfully."
95- ) ;
99+ debug ! ( block = %block_number, "State root verified successfully." ) ;
96100 }
97101
98102 Ok ( StageExecutionOutput { last_block_processed : input. to ( ) } )
0 commit comments