@@ -24,7 +24,7 @@ use crate::{
2424} ;
2525use codec:: { Decode , Encode } ;
2626use log:: debug;
27- use sc_client_api:: { CompactProof , KeyValueStates , ProofProvider } ;
27+ use sc_client_api:: { CompactProof , KeyValueStates , KeyValueStorageLevel , ProofProvider } ;
2828use sc_consensus:: ImportedState ;
2929use smallvec:: SmallVec ;
3030use sp_core:: storage:: well_known_keys;
@@ -138,31 +138,40 @@ where
138138 self . state . entry ( key_value. 1 ) . or_default ( ) . 1 . push ( key_value. 0 ) ;
139139 }
140140
141- fn process_state_verified ( & mut self , values : KeyValueStates ) {
142- for values in values. 0 {
143- let is_top = values. state_root . is_empty ( ) ;
141+ fn process_state_key_values (
142+ & mut self ,
143+ state_root : Vec < u8 > ,
144+ key_values : impl IntoIterator < Item = ( Vec < u8 > , Vec < u8 > ) > ,
145+ ) {
146+ let is_top = state_root. is_empty ( ) ;
144147
145- let ( child_key_values, top_key_values) : ( Vec < _ > , Vec < _ > ) =
146- values . key_values . into_iter ( ) . partition ( |key_value| {
147- is_top && well_known_keys:: is_child_storage_key ( key_value. 0 . as_slice ( ) )
148- } ) ;
148+ let ( child_key_values, top_key_values) : ( Vec < _ > , Vec < _ > ) =
149+ key_values. into_iter ( ) . partition ( |key_value| {
150+ is_top && well_known_keys:: is_child_storage_key ( key_value. 0 . as_slice ( ) )
151+ } ) ;
149152
150- for key_value in child_key_values {
151- self . insert_child_trie_roots ( key_value) ;
152- }
153-
154- let entry = self . state . entry ( values. state_root ) . or_default ( ) ;
153+ for key_value in child_key_values {
154+ self . insert_child_trie_roots ( key_value) ;
155+ }
155156
156- if entry. 0 . len ( ) > 0 && entry. 1 . len ( ) > 1 {
157- // Already imported child_trie with same root.
158- // Warning this will not work with parallel download.
159- } else {
160- for ( key, _value) in & top_key_values {
161- self . imported_bytes += key. len ( ) as u64 ;
162- }
157+ let entry = self . state . entry ( state_root) . or_default ( ) ;
163158
164- entry. 0 . extend ( top_key_values) ;
159+ if entry. 0 . len ( ) > 0 && entry. 1 . len ( ) > 1 {
160+ // Already imported child_trie with same root.
161+ // Warning this will not work with parallel download.
162+ } else {
163+ for ( key, _value) in & top_key_values {
164+ self . imported_bytes += key. len ( ) as u64 ;
165165 }
166+
167+ entry. 0 . extend ( top_key_values) ;
168+ }
169+ }
170+
171+ fn process_state_verified ( & mut self , values : KeyValueStates ) {
172+ for values in values. 0 {
173+ let KeyValueStorageLevel { state_root, parent_storage_keys : _, key_values } = values;
174+ self . process_state_key_values ( state_root, key_values) ;
166175 }
167176 }
168177
0 commit comments