mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 13:27:57 +00:00
Storage chains sync (#9171)
* Sync storage chains * Test * Apply suggestions from code review Co-authored-by: cheme <emericchevalier.pro@gmail.com> * Separate block body and indexed body * Update client/db/src/lib.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: cheme <emericchevalier.pro@gmail.com> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
This commit is contained in:
@@ -42,6 +42,7 @@ fn prepare_good_block() -> (TestClient, Hash, u64, PeerId, IncomingBlock<Block>)
|
||||
hash,
|
||||
header,
|
||||
body: Some(Vec::new()),
|
||||
indexed_body: None,
|
||||
justifications,
|
||||
origin: Some(peer_id.clone()),
|
||||
allow_missing_state: false,
|
||||
|
||||
@@ -660,6 +660,8 @@ pub struct FullPeerConfig {
|
||||
pub is_authority: bool,
|
||||
/// Syncing mode
|
||||
pub sync_mode: SyncMode,
|
||||
/// Enable transaction indexing.
|
||||
pub storage_chain: bool,
|
||||
}
|
||||
|
||||
pub trait TestNetFactory: Sized where <Self::BlockImport as BlockImport<Block>>::Transaction: Send {
|
||||
@@ -715,9 +717,11 @@ pub trait TestNetFactory: Sized where <Self::BlockImport as BlockImport<Block>>:
|
||||
|
||||
/// Add a full peer.
|
||||
fn add_full_peer_with_config(&mut self, config: FullPeerConfig) {
|
||||
let mut test_client_builder = match config.keep_blocks {
|
||||
Some(keep_blocks) => TestClientBuilder::with_pruning_window(keep_blocks),
|
||||
None => TestClientBuilder::with_default_backend(),
|
||||
let mut test_client_builder = match (config.keep_blocks, config.storage_chain) {
|
||||
(Some(keep_blocks), true) => TestClientBuilder::with_tx_storage(keep_blocks),
|
||||
(None, true) => TestClientBuilder::with_tx_storage(u32::MAX),
|
||||
(Some(keep_blocks), false) => TestClientBuilder::with_pruning_window(keep_blocks),
|
||||
(None, false) => TestClientBuilder::with_default_backend(),
|
||||
};
|
||||
if matches!(config.sync_mode, SyncMode::Fast{..}) {
|
||||
test_client_builder = test_client_builder.set_no_genesis();
|
||||
|
||||
@@ -1095,7 +1095,7 @@ fn syncs_state() {
|
||||
let mut net = TestNet::new(0);
|
||||
net.add_full_peer_with_config(Default::default());
|
||||
net.add_full_peer_with_config(FullPeerConfig {
|
||||
sync_mode: SyncMode::Fast { skip_proofs: *skip_proofs },
|
||||
sync_mode: SyncMode::Fast { skip_proofs: *skip_proofs, storage_chain_mode: false },
|
||||
..Default::default()
|
||||
});
|
||||
net.peer(0).push_blocks(64, false);
|
||||
@@ -1127,3 +1127,39 @@ fn syncs_state() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn syncs_indexed_blocks() {
|
||||
use sp_runtime::traits::Hash;
|
||||
sp_tracing::try_init_simple();
|
||||
let mut net = TestNet::new(0);
|
||||
let mut n: u64 = 0;
|
||||
net.add_full_peer_with_config(FullPeerConfig {
|
||||
storage_chain: true,
|
||||
..Default::default()
|
||||
});
|
||||
net.add_full_peer_with_config(FullPeerConfig {
|
||||
storage_chain: true,
|
||||
sync_mode: SyncMode::Fast { skip_proofs: false, storage_chain_mode: true },
|
||||
..Default::default()
|
||||
});
|
||||
net.peer(0).generate_blocks_at(
|
||||
BlockId::number(0),
|
||||
64,
|
||||
BlockOrigin::Own, |mut builder| {
|
||||
let ex = Extrinsic::Store(n.to_le_bytes().to_vec());
|
||||
n += 1;
|
||||
builder.push(ex).unwrap();
|
||||
builder.build().unwrap().block
|
||||
},
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
let indexed_key = sp_runtime::traits::BlakeTwo256::hash(&42u64.to_le_bytes());
|
||||
assert!(net.peer(0).client().as_full().unwrap().indexed_transaction(&indexed_key).unwrap().is_some());
|
||||
assert!(net.peer(1).client().as_full().unwrap().indexed_transaction(&indexed_key).unwrap().is_none());
|
||||
|
||||
net.block_until_sync();
|
||||
assert!(net.peer(1).client().as_full().unwrap().indexed_transaction(&indexed_key).unwrap().is_some());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user