client: hack around fork blocks deserialization issue (#4539)

This commit is contained in:
André Silva
2020-01-06 12:43:25 +00:00
committed by Bastian Köcher
parent 7efa62725e
commit c72619ed71
2 changed files with 7 additions and 5 deletions
+3 -4
View File
@@ -16,12 +16,11 @@
//! A set of APIs supported by the client along with their primitives.
use std::collections::HashMap;
use futures::channel::mpsc;
use sp_core::storage::StorageKey;
use sp_runtime::{
traits::{Block as BlockT, NumberFor},
generic::BlockId
traits::{Block as BlockT, NumberFor},
generic::BlockId
};
use sp_consensus::BlockOrigin;
@@ -38,7 +37,7 @@ pub type FinalityNotifications<Block> = mpsc::UnboundedReceiver<FinalityNotifica
/// Expected hashes of blocks at given heights.
///
/// This may be used as chain spec extension to filter out known, unwanted forks.
pub type ForkBlocks<Block> = Option<HashMap<NumberFor<Block>, <Block as BlockT>::Hash>>;
pub type ForkBlocks<Block> = Option<Vec<(NumberFor<Block>, <Block as BlockT>::Hash)>>;
/// Figure out the block type for a given type (for now, just a `Client`).
pub trait BlockOf {
+4 -1
View File
@@ -1472,7 +1472,10 @@ impl<'a, B, E, Block, RA> sp_consensus::BlockImport<Block> for &'a Client<B, E,
) -> Result<ImportResult, Self::Error> {
let BlockCheckParams { hash, number, parent_hash, allow_missing_state, import_existing } = block;
if let Some(h) = self.fork_blocks.as_ref().and_then(|x| x.get(&number)) {
let fork_block = self.fork_blocks.as_ref()
.and_then(|fs| fs.iter().find(|(n, _)| *n == number));
if let Some((_, h)) = fork_block {
if &hash != h {
trace!(
"Rejecting block from known invalid fork. Got {:?}, expected: {:?} at height {}",