From 0b4b85c97f393ade087d9e1715977f0393d73b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 27 Nov 2020 14:27:22 +0100 Subject: [PATCH] Forward storage changes in manual seal This prevents nodes from executing the same block 2 times. --- client/consensus/manual-seal/src/lib.rs | 10 +++++----- client/consensus/manual-seal/src/seal_block.rs | 9 +++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index 5a1cd0f79b47d..9c4465f82fda1 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -163,10 +163,10 @@ pub async fn run_manual_seal( C: HeaderBackend + Finalizer + ProvideRuntimeApi + 'static, CB: ClientBackend + 'static, E: Environment + 'static, - E::Error: std::fmt::Display, - >::Error: std::fmt::Display, + E::Proposer: Proposer>, CS: Stream::Hash>> + Unpin + 'static, SC: SelectChain + 'static, + TransactionFor: 'static, { while let Some(command) = commands_stream.next().await { match command { @@ -230,9 +230,9 @@ pub async fn run_instant_seal( C: HeaderBackend + Finalizer + ProvideRuntimeApi + 'static, CB: ClientBackend + 'static, E: Environment + 'static, - E::Error: std::fmt::Display, - >::Error: std::fmt::Display, - SC: SelectChain + 'static + E::Proposer: Proposer>, + SC: SelectChain + 'static, + TransactionFor: 'static, { // 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 58f017f2d41ad..a4afaa343e905 100644 --- a/client/consensus/manual-seal/src/seal_block.rs +++ b/client/consensus/manual-seal/src/seal_block.rs @@ -87,10 +87,10 @@ pub async fn seal_block( + Send + Sync + 'static, C: HeaderBackend + ProvideRuntimeApi, E: Environment, - >::Error: std::fmt::Display, - >::Error: std::fmt::Display, + E::Proposer: Proposer>, P: txpool::ChainApi, SC: SelectChain, + TransactionFor: 'static, { let future = async { if pool.validated_pool().status().ready == 0 && !create_empty { @@ -111,7 +111,7 @@ pub async fn seal_block( }; let proposer = env.init(&parent) - .map_err(|err| Error::StringError(format!("{}", err))).await?; + .map_err(|err| Error::StringError(format!("{:?}", err))).await?; let id = inherent_data_provider.create_inherent_data()?; let inherents_len = id.len(); @@ -122,7 +122,7 @@ pub async fn seal_block( }; let proposal = proposer.propose(id.clone(), digest, Duration::from_secs(MAX_PROPOSAL_DURATION), false.into()) - .map_err(|err| Error::StringError(format!("{}", err))).await?; + .map_err(|err| Error::StringError(format!("{:?}", err))).await?; if proposal.block.extrinsics().len() == inherents_len && !create_empty { return Err(Error::EmptyTransactionPool) @@ -133,6 +133,7 @@ pub async fn seal_block( params.body = Some(body); params.finalized = finalize; params.fork_choice = Some(ForkChoiceStrategy::LongestChain); + params.storage_changes = Some(proposal.storage_changes); if let Some(digest_provider) = digest_provider { digest_provider.append_block_import(&parent, &mut params, &id)?;