diff --git a/substrate/core/finality-grandpa/src/lib.rs b/substrate/core/finality-grandpa/src/lib.rs index 0b8405a6fe..dd5f97f264 100644 --- a/substrate/core/finality-grandpa/src/lib.rs +++ b/substrate/core/finality-grandpa/src/lib.rs @@ -48,7 +48,7 @@ use client::{Client, error::Error as ClientError, ImportNotifications, backend:: use codec::{Encode, Decode}; use consensus_common::{BlockImport, ImportBlock, ImportResult}; use runtime_primitives::traits::{ - NumberFor, Block as BlockT, Header as HeaderT, DigestItemFor, + NumberFor, Block as BlockT, Header as HeaderT, DigestFor, }; use runtime_primitives::generic::BlockId; use substrate_primitives::{ed25519, AuthorityId, Blake2Hasher}; @@ -434,7 +434,6 @@ impl grandpa::Chain> for E N: Network + 'static, N::In: 'static, NumberFor: BlockNumberOps, - DigestItemFor: CompatibleDigestItem>, { fn ancestry(&self, base: Block::Hash, block: Block::Hash) -> Result, GrandpaError> { let tree_route_res = ::client::blockchain::tree_route( @@ -529,7 +528,6 @@ impl voter::Environment> f N: Network + 'static, N::In: 'static, NumberFor: BlockNumberOps, - DigestItemFor: CompatibleDigestItem>, { type Timer = Box>; type Id = AuthorityId; @@ -686,7 +684,7 @@ pub struct GrandpaBlockImport { impl BlockImport for GrandpaBlockImport where B: Backend + 'static, E: CallExecutor + 'static + Clone, - DigestItemFor: CompatibleDigestItem>, + DigestFor: Encode, { type Error = ClientError; @@ -696,13 +694,20 @@ impl BlockImport for GrandpaBlockImport use runtime_primitives::traits::Digest; use authorities::PendingChange; - let maybe_event = block.header.digest().logs().iter() - .filter_map(|log| log.scheduled_change()) - .next() - .map(|change| (block.header.hash(), *block.header.number(), change)); + let maybe_change: Option>> = self.inner.call_api_at( + &BlockId::hash(block.header.parent_hash().clone()), + ::fg_primitives::PENDING_CHANGE_CALL, + block.header.digest() + )?; + + let maybe_change = maybe_change.map(|change| ( + block.header.hash(), + block.header.number().clone(), + change + )); let result = self.inner.import_block(block, new_authorities); - if let (true, Some((hash, number, change))) = (result.is_ok(), maybe_event) { + if let (true, Some((hash, number, change))) = (result.is_ok(), maybe_change) { self.authority_set.add_pending_change(PendingChange { next_authorities: change.next_authorities, finalization_depth: number + change.delay, @@ -734,7 +739,7 @@ pub fn run_grandpa( N: Network + 'static, N::In: 'static, NumberFor: BlockNumberOps, - DigestItemFor: CompatibleDigestItem>, + DigestFor: Encode, { use futures::future::{self, Loop as FutureLoop}; @@ -826,8 +831,6 @@ mod tests { use keyring::Keyring; use client::BlockchainEvents; - impl CompatibleDigestItem> for DigestItemFor { } - #[derive(Clone)] struct TestGrandpaNetwork { inner: Arc>,