From f00a63c2c058340ab39b707c11ab327b93adef76 Mon Sep 17 00:00:00 2001 From: Seun Lanlege Date: Tue, 18 May 2021 17:05:57 +0100 Subject: [PATCH 1/3] use correct CreateInherentDataProviders impl for manual seal --- bin/node/test-runner-example/src/lib.rs | 26 +++++++------------ client/consensus/manual-seal/src/lib.rs | 4 +-- .../consensus/manual-seal/src/seal_block.rs | 7 ++--- test-utils/test-runner/src/lib.rs | 2 +- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/bin/node/test-runner-example/src/lib.rs b/bin/node/test-runner-example/src/lib.rs index 8a5fbdad885c9..7a5516be15c06 100644 --- a/bin/node/test-runner-example/src/lib.rs +++ b/bin/node/test-runner-example/src/lib.rs @@ -27,7 +27,9 @@ use sc_consensus_babe::BabeBlockImport; use sp_keystore::SyncCryptoStorePtr; use sp_keyring::sr25519::Keyring::Alice; use sp_consensus_babe::AuthorityId; -use sc_consensus_manual_seal::{ConsensusDataProvider, consensus::babe::BabeConsensusDataProvider}; +use sc_consensus_manual_seal::{ + ConsensusDataProvider, consensus::babe::{BabeConsensusDataProvider, SlotTimestampProvider}, +}; use sp_runtime::{traits::IdentifyAccount, MultiSigner, generic::Era}; use node_cli::chain_spec::development_config; @@ -59,10 +61,7 @@ impl ChainInfo for NodeTemplateChainInfo { Self::SelectChain, >; type SignedExtras = node_runtime::SignedExtra; - type InherentDataProviders = ( - sp_timestamp::InherentDataProvider, - sp_consensus_babe::inherents::InherentDataProvider, - ); + type InherentDataProviders = SlotTimestampProvider; fn signed_extras(from: ::AccountId) -> Self::SignedExtras { ( @@ -90,7 +89,7 @@ impl ChainInfo for NodeTemplateChainInfo { TaskManager, Box>, InherentDataProviders = Self::InherentDataProviders >>, Option< @@ -143,17 +142,10 @@ impl ChainInfo for NodeTemplateChainInfo { backend, keystore.sync_keystore(), task_manager, - Box::new(move |_, _| { - let slot_duration = slot_duration.clone(); - async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_duration( - *timestamp, - slot_duration.slot_duration(), - ); - - Ok((timestamp, slot)) - } + Box::new(|_, client| async move { + let provider = SlotTimestampProvider::new(client) + .map_err(|err| format!("{:?}", err))?; + Ok(provider) }), Some(Box::new(consensus_data_provider)), select_chain, diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index 45628e90a6f9c..08028a20f5d5e 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -170,7 +170,7 @@ pub async fn run_manual_seal( CS: Stream::Hash>> + Unpin + 'static, SC: SelectChain + 'static, TransactionFor: 'static, - CIDP: CreateInherentDataProviders, + CIDP: CreateInherentDataProviders>, { while let Some(command) = commands_stream.next().await { match command { @@ -237,7 +237,7 @@ pub async fn run_instant_seal( E::Proposer: Proposer>, SC: SelectChain + 'static, TransactionFor: 'static, - CIDP: CreateInherentDataProviders, + CIDP: CreateInherentDataProviders>, { // instant-seal creates blocks as soon as transactions are imported // into the transaction pool. diff --git a/client/consensus/manual-seal/src/seal_block.rs b/client/consensus/manual-seal/src/seal_block.rs index 6f2b613cd939a..600ff7406112e 100644 --- a/client/consensus/manual-seal/src/seal_block.rs +++ b/client/consensus/manual-seal/src/seal_block.rs @@ -92,7 +92,7 @@ pub async fn seal_block( P: txpool::ChainApi, SC: SelectChain, TransactionFor: 'static, - CIDP: CreateInherentDataProviders, + CIDP: CreateInherentDataProviders>, { let future = async { if pool.validated_pool().status().ready == 0 && !create_empty { @@ -111,10 +111,7 @@ pub async fn seal_block( let inherent_data_providers = create_inherent_data_providers - .create_inherent_data_providers( - parent.hash(), - (), - ) + .create_inherent_data_providers(parent.hash(), client.clone()) .await .map_err(|e| Error::Other(e))?; diff --git a/test-utils/test-runner/src/lib.rs b/test-utils/test-runner/src/lib.rs index 000d3efc3e96f..37d9391900490 100644 --- a/test-utils/test-runner/src/lib.rs +++ b/test-utils/test-runner/src/lib.rs @@ -299,7 +299,7 @@ pub trait ChainInfo: Sized { Box< dyn CreateInherentDataProviders< Self::Block, - (), + Arc>, InherentDataProviders = Self::InherentDataProviders > >, From 0411312f08f635a8d875cb4d3c6ac3411d3aaf96 Mon Sep 17 00:00:00 2001 From: Seun Lanlege Date: Wed, 19 May 2021 13:43:52 +0100 Subject: [PATCH 2/3] add babe inherent provider --- bin/node/test-runner-example/src/lib.rs | 8 ++++---- client/consensus/manual-seal/src/consensus/babe.rs | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/bin/node/test-runner-example/src/lib.rs b/bin/node/test-runner-example/src/lib.rs index 7a5516be15c06..59aa0c1aa5eb1 100644 --- a/bin/node/test-runner-example/src/lib.rs +++ b/bin/node/test-runner-example/src/lib.rs @@ -61,7 +61,7 @@ impl ChainInfo for NodeTemplateChainInfo { Self::SelectChain, >; type SignedExtras = node_runtime::SignedExtra; - type InherentDataProviders = SlotTimestampProvider; + type InherentDataProviders = (SlotTimestampProvider, sp_consensus_babe::inherents::InherentDataProvider); fn signed_extras(from: ::AccountId) -> Self::SignedExtras { ( @@ -143,9 +143,9 @@ impl ChainInfo for NodeTemplateChainInfo { keystore.sync_keystore(), task_manager, Box::new(|_, client| async move { - let provider = SlotTimestampProvider::new(client) - .map_err(|err| format!("{:?}", err))?; - Ok(provider) + let provider = SlotTimestampProvider::new(client).map_err(|err| format!("{:?}", err))?; + let babe = sp_consensus_babe::inherents::InherentDataProvider::new(provider.slot().into()); + Ok((provider, babe)) }), Some(Box::new(consensus_data_provider)), select_chain, diff --git a/client/consensus/manual-seal/src/consensus/babe.rs b/client/consensus/manual-seal/src/consensus/babe.rs index 29fea05d8366a..949e1b6fd7193 100644 --- a/client/consensus/manual-seal/src/consensus/babe.rs +++ b/client/consensus/manual-seal/src/consensus/babe.rs @@ -260,7 +260,7 @@ impl SlotTimestampProvider { // looks like this isn't the first block, rehydrate the fake time. // otherwise we'd be producing blocks for older slots. - let duration = if info.best_number != Zero::zero() { + let time = if info.best_number != Zero::zero() { let header = client.header(BlockId::Hash(info.best_hash))?.unwrap(); let slot = find_pre_digest::(&header).unwrap().slot(); // add the slot duration so there's no collision of slots @@ -274,10 +274,15 @@ impl SlotTimestampProvider { }; Ok(Self { - time: atomic::AtomicU64::new(duration), + time: atomic::AtomicU64::new(time), slot_duration, }) } + + /// Get the current slot number + pub fn slot(&self) -> u64 { + self.time.load(atomic::Ordering::SeqCst) / self.slot_duration + } } #[async_trait::async_trait] From 9d2930e4faab8b33c7a9a03d78d3260a4575523e Mon Sep 17 00:00:00 2001 From: Seun Lanlege Date: Thu, 27 May 2021 17:30:05 +0100 Subject: [PATCH 3/3] move client into factory fn --- bin/node/test-runner-example/src/lib.rs | 15 +++++++++------ client/consensus/manual-seal/src/lib.rs | 4 ++-- client/consensus/manual-seal/src/seal_block.rs | 4 ++-- test-utils/test-runner/src/lib.rs | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/bin/node/test-runner-example/src/lib.rs b/bin/node/test-runner-example/src/lib.rs index 59aa0c1aa5eb1..8a3f5560ec86e 100644 --- a/bin/node/test-runner-example/src/lib.rs +++ b/bin/node/test-runner-example/src/lib.rs @@ -89,7 +89,7 @@ impl ChainInfo for NodeTemplateChainInfo { TaskManager, Box>, + (), InherentDataProviders = Self::InherentDataProviders >>, Option< @@ -138,14 +138,17 @@ impl ChainInfo for NodeTemplateChainInfo { .expect("failed to create ConsensusDataProvider"); Ok(( - client, + client.clone(), backend, keystore.sync_keystore(), task_manager, - Box::new(|_, client| async move { - let provider = SlotTimestampProvider::new(client).map_err(|err| format!("{:?}", err))?; - let babe = sp_consensus_babe::inherents::InherentDataProvider::new(provider.slot().into()); - Ok((provider, babe)) + Box::new(move |_, _| { + let client = client.clone(); + async move { + let timestamp = SlotTimestampProvider::new(client.clone()).map_err(|err| format!("{:?}", err))?; + let babe = sp_consensus_babe::inherents::InherentDataProvider::new(timestamp.slot().into()); + Ok((timestamp, babe)) + } }), Some(Box::new(consensus_data_provider)), select_chain, diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index 08028a20f5d5e..45628e90a6f9c 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -170,7 +170,7 @@ pub async fn run_manual_seal( CS: Stream::Hash>> + Unpin + 'static, SC: SelectChain + 'static, TransactionFor: 'static, - CIDP: CreateInherentDataProviders>, + CIDP: CreateInherentDataProviders, { while let Some(command) = commands_stream.next().await { match command { @@ -237,7 +237,7 @@ pub async fn run_instant_seal( E::Proposer: Proposer>, SC: SelectChain + 'static, TransactionFor: 'static, - CIDP: CreateInherentDataProviders>, + CIDP: CreateInherentDataProviders, { // instant-seal creates blocks as soon as transactions are imported // into the transaction pool. diff --git a/client/consensus/manual-seal/src/seal_block.rs b/client/consensus/manual-seal/src/seal_block.rs index 600ff7406112e..4aecfc213ab45 100644 --- a/client/consensus/manual-seal/src/seal_block.rs +++ b/client/consensus/manual-seal/src/seal_block.rs @@ -92,7 +92,7 @@ pub async fn seal_block( P: txpool::ChainApi, SC: SelectChain, TransactionFor: 'static, - CIDP: CreateInherentDataProviders>, + CIDP: CreateInherentDataProviders, { let future = async { if pool.validated_pool().status().ready == 0 && !create_empty { @@ -111,7 +111,7 @@ pub async fn seal_block( let inherent_data_providers = create_inherent_data_providers - .create_inherent_data_providers(parent.hash(), client.clone()) + .create_inherent_data_providers(parent.hash(), ()) .await .map_err(|e| Error::Other(e))?; diff --git a/test-utils/test-runner/src/lib.rs b/test-utils/test-runner/src/lib.rs index 37d9391900490..000d3efc3e96f 100644 --- a/test-utils/test-runner/src/lib.rs +++ b/test-utils/test-runner/src/lib.rs @@ -299,7 +299,7 @@ pub trait ChainInfo: Sized { Box< dyn CreateInherentDataProviders< Self::Block, - Arc>, + (), InherentDataProviders = Self::InherentDataProviders > >,