Use correct CreateInherentDataProviders impl for manual seal (#8852)

* use correct CreateInherentDataProviders impl for manual seal

* add babe inherent provider

* move client into factory fn
This commit is contained in:
Seun Lanlege
2021-05-31 16:31:47 +01:00
committed by GitHub
parent aa76b4c355
commit 6d13520da4
3 changed files with 17 additions and 20 deletions
@@ -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, sp_consensus_babe::inherents::InherentDataProvider);
fn signed_extras(from: <Self::Runtime as frame_system::Config>::AccountId) -> Self::SignedExtras {
(
@@ -139,20 +138,16 @@ impl ChainInfo for NodeTemplateChainInfo {
.expect("failed to create ConsensusDataProvider");
Ok((
client,
client.clone(),
backend,
keystore.sync_keystore(),
task_manager,
Box::new(move |_, _| {
let slot_duration = slot_duration.clone();
let client = client.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))
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)),
@@ -268,7 +268,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::<B>(&header).unwrap().slot();
// add the slot duration so there's no collision of slots
@@ -282,10 +282,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]
@@ -111,10 +111,7 @@ pub async fn seal_block<B, BI, SC, C, E, P, CIDP>(
let inherent_data_providers =
create_inherent_data_providers
.create_inherent_data_providers(
parent.hash(),
(),
)
.create_inherent_data_providers(parent.hash(), ())
.await
.map_err(|e| Error::Other(e))?;