From 83c17c7026a61bac82503152f7172db06a634a18 Mon Sep 17 00:00:00 2001 From: Juhyung Park Date: Wed, 25 Sep 2019 12:13:38 +0900 Subject: [PATCH 1/2] Remove unused `on_verified_proposal` in consensus --- core/src/client/importer.rs | 5 ----- core/src/consensus/mod.rs | 5 ----- 2 files changed, 10 deletions(-) diff --git a/core/src/client/importer.rs b/core/src/client/importer.rs index d039b36e22..b00e992e8f 100644 --- a/core/src/client/importer.rs +++ b/core/src/client/importer.rs @@ -30,7 +30,6 @@ use super::{BlockChainTrait, Client, ClientConfig}; use crate::block::{enact, IsBlock, LockedBlock}; use crate::blockchain::{BodyProvider, HeaderProvider, ImportRoute}; use crate::consensus::CodeChainEngine; -use crate::encoded; use crate::error::Error; use crate::miner::{Miner, MinerService}; use crate::service::ClientIoMessage; @@ -117,10 +116,6 @@ impl Importer { continue } if let Ok(closed_block) = self.check_and_close_block(&block, client) { - if self.engine.is_proposal(&block.header) { - self.engine.on_verified_proposal(encoded::Block::new(block.bytes.clone())) - } - imported_blocks.push(header.hash()); let route = self.commit_block(&closed_block, &header, &block.bytes, client); import_results.push(route); diff --git a/core/src/consensus/mod.rs b/core/src/consensus/mod.rs index bf92051d3b..37deaec6f0 100644 --- a/core/src/consensus/mod.rs +++ b/core/src/consensus/mod.rs @@ -54,7 +54,6 @@ use crate::account_provider::AccountProvider; use crate::block::{ExecutedBlock, SealedBlock}; use crate::client::ConsensusClient; use crate::codechain_machine::CodeChainMachine; -use crate::encoded; use crate::error::Error; use crate::transaction::UnverifiedTransaction; use crate::views::HeaderView; @@ -243,10 +242,6 @@ pub trait ConsensusEngine: Sync + Send { false } - /// Called when proposal block is verified. - /// Consensus many hold the verified proposal block until it should be imported. - fn on_verified_proposal(&self, _verified_block_data: encoded::Block) {} - /// Register an account which signs consensus messages. fn set_signer(&self, _ap: Arc, _address: Address) {} From 4afb73d0110e64c05ebfc1b77ac2284200a49c1d Mon Sep 17 00:00:00 2001 From: Juhyung Park Date: Thu, 26 Sep 2019 15:39:41 +0900 Subject: [PATCH 2/2] Do not panic when height, view or step is changed while creating a block --- core/src/consensus/tendermint/worker.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/core/src/consensus/tendermint/worker.rs b/core/src/consensus/tendermint/worker.rs index ea6c94a361..4a466bfee9 100644 --- a/core/src/consensus/tendermint/worker.rs +++ b/core/src/consensus/tendermint/worker.rs @@ -1102,6 +1102,24 @@ impl Worker { } fn proposal_generated(&mut self, sealed_block: &SealedBlock) { + let proposal_height = sealed_block.header().number(); + let proposal_seal = sealed_block.header().seal(); + let proposal_view = TendermintSealView::new(proposal_seal) + .consensus_view() + .expect("Generated proposal should have a valid seal"); + assert!(proposal_height <= self.height, "A proposal cannot be generated on the future height"); + if proposal_height < self.height || (proposal_height == self.height && proposal_view != self.view) { + ctrace!( + ENGINE, + "Proposal is generated on the height {} and view {}. Current height is {} and view is {}", + proposal_height, + proposal_view, + self.height, + self.view, + ); + return + } + let header = sealed_block.header(); let hash = header.hash(); let parent_hash = header.parent_hash(); @@ -1116,7 +1134,12 @@ impl Worker { parent_hash, expected_parent_hash ); } else { - panic!("Block is generated at unexpected step {:?}", self.step); + ctrace!( + ENGINE, + "Proposal is generated after step is changed. Expected step is ProposeWaitBlockGeneration but current step is {:?}", + self.step, + ); + return } let prev_proposer_idx = self.block_proposer_idx(*parent_hash).expect("Prev block must exists");