Skip to content
Snippets Groups Projects
Commit 6722a83b authored by Bastian Köcher's avatar Bastian Köcher Committed by GitHub
Browse files

Forward storage changes in manual seal (#7614)

This prevents nodes from executing the same block 2 times.
parent 07c173af
No related merge requests found
......@@ -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.
......
......@@ -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)?;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment