diff --git a/substrate/core/consensus/babe/src/lib.rs b/substrate/core/consensus/babe/src/lib.rs index b4f376b50d..683425e815 100644 --- a/substrate/core/consensus/babe/src/lib.rs +++ b/substrate/core/consensus/babe/src/lib.rs @@ -896,7 +896,7 @@ impl BlockImport for BabeBlockImport(&finalized_header) + find_pre_digest::(&finalized_header) .expect("finalized header must be valid; \ valid blocks have a pre-digest; qed") .slot_number() diff --git a/substrate/core/consensus/babe/src/tests.rs b/substrate/core/consensus/babe/src/tests.rs index f06cc6f46c..46c038b187 100644 --- a/substrate/core/consensus/babe/src/tests.rs +++ b/substrate/core/consensus/babe/src/tests.rs @@ -625,7 +625,7 @@ fn importing_epoch_change_block_prunes_tree() { }; let mut proposer = environ.init(&parent_header).unwrap(); - let parent_pre_digest = find_pre_digest::(&parent_header).unwrap(); + let parent_pre_digest = find_pre_digest(&parent_header).unwrap(); let pre_digest = sr_primitives::generic::Digest { logs: vec![ diff --git a/substrate/core/utils/fork-tree/src/lib.rs b/substrate/core/utils/fork-tree/src/lib.rs index b0258a9ca2..f192ee5478 100644 --- a/substrate/core/utils/fork-tree/src/lib.rs +++ b/substrate/core/utils/fork-tree/src/lib.rs @@ -115,10 +115,11 @@ impl ForkTree where // we found the deepest ancestor of the finalized block, so we prune // out any children that don't include the finalized block. - root.children.retain(|node| { + let children = std::mem::replace(&mut root.children, Vec::new()); + root.children = children.into_iter().filter(|node| { node.number == *number && node.hash == *hash || node.number < *number && is_descendent_of(&node.hash, hash).unwrap_or(false) - }); + }).take(1).collect(); self.roots = vec![root]; }