From 6722a83ba66cc87a21111061c575fbfb6da60102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= <bkchr@users.noreply.github.com> Date: Fri, 27 Nov 2020 17:36:58 +0100 Subject: [PATCH] Forward storage changes in manual seal (#7614) This prevents nodes from executing the same block 2 times. --- substrate/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/substrate/client/consensus/manual-seal/src/lib.rs b/substrate/client/consensus/manual-seal/src/lib.rs index 5a1cd0f79b4..9c4465f82fd 100644 --- a/substrate/client/consensus/manual-seal/src/lib.rs +++ b/substrate/client/consensus/manual-seal/src/lib.rs @@ -163,10 +163,10 @@ pub async fn run_manual_seal<B, BI, CB, E, C, A, SC, CS>( C: HeaderBackend<B> + Finalizer<B, CB> + ProvideRuntimeApi<B> + 'static, CB: ClientBackend<B> + 'static, E: Environment<B> + 'static, - E::Error: std::fmt::Display, - <E::Proposer as Proposer<B>>::Error: std::fmt::Display, + E::Proposer: Proposer<B, Transaction = TransactionFor<C, B>>, CS: Stream<Item=EngineCommand<<B as BlockT>::Hash>> + Unpin + 'static, SC: SelectChain<B> + 'static, + TransactionFor<C, B>: 'static, { while let Some(command) = commands_stream.next().await { match command { @@ -230,9 +230,9 @@ pub async fn run_instant_seal<B, BI, CB, E, C, A, SC>( C: HeaderBackend<B> + Finalizer<B, CB> + ProvideRuntimeApi<B> + 'static, CB: ClientBackend<B> + 'static, E: Environment<B> + 'static, - E::Error: std::fmt::Display, - <E::Proposer as Proposer<B>>::Error: std::fmt::Display, - SC: SelectChain<B> + 'static + E::Proposer: Proposer<B, Transaction = TransactionFor<C, B>>, + SC: SelectChain<B> + 'static, + TransactionFor<C, B>: 'static, { // instant-seal creates blocks as soon as transactions are imported // into the transaction pool. diff --git a/substrate/client/consensus/manual-seal/src/seal_block.rs b/substrate/client/consensus/manual-seal/src/seal_block.rs index 58f017f2d41..a4afaa343e9 100644 --- a/substrate/client/consensus/manual-seal/src/seal_block.rs +++ b/substrate/client/consensus/manual-seal/src/seal_block.rs @@ -87,10 +87,10 @@ pub async fn seal_block<B, BI, SC, C, E, P>( + Send + Sync + 'static, C: HeaderBackend<B> + ProvideRuntimeApi<B>, E: Environment<B>, - <E as Environment<B>>::Error: std::fmt::Display, - <E::Proposer as Proposer<B>>::Error: std::fmt::Display, + E::Proposer: Proposer<B, Transaction = TransactionFor<C, B>>, P: txpool::ChainApi<Block=B>, SC: SelectChain<B>, + TransactionFor<C, B>: 'static, { let future = async { if pool.validated_pool().status().ready == 0 && !create_empty { @@ -111,7 +111,7 @@ pub async fn seal_block<B, BI, SC, C, E, P>( }; 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<B, BI, SC, C, E, P>( }; 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<B, BI, SC, C, E, P>( 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)?; -- GitLab