Skip to content

Commit 7b67beb

Browse files
committed
Extract process_state_key_values() out of process_state_verified()
1 parent f40e937 commit 7b67beb

2 files changed

Lines changed: 33 additions & 22 deletions

File tree

substrate/client/api/src/backend.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ pub use sp_trie::MerkleValue;
3737

3838
use crate::{blockchain::Backend as BlockchainBackend, UsageInfo};
3939

40-
pub use sp_state_machine::{Backend as StateBackend, BackendTransaction, KeyValueStates};
40+
pub use sp_state_machine::{
41+
Backend as StateBackend, BackendTransaction, KeyValueStates, KeyValueStorageLevel,
42+
};
4143

4244
/// Extracts the state backend type for the given backend.
4345
pub type StateBackendFor<B, Block> = <B as Backend<Block>>::State;

substrate/client/network/sync/src/strategy/state_sync.rs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use crate::{
2424
};
2525
use codec::{Decode, Encode};
2626
use log::debug;
27-
use sc_client_api::{CompactProof, KeyValueStates, ProofProvider};
27+
use sc_client_api::{CompactProof, KeyValueStates, KeyValueStorageLevel, ProofProvider};
2828
use sc_consensus::ImportedState;
2929
use smallvec::SmallVec;
3030
use 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

Comments
 (0)