Skip to content

Commit d369daf

Browse files
committed
Do not panic when height, view or step is changed while creating a block
1 parent 7ab679a commit d369daf

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

core/src/consensus/tendermint/worker.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,23 @@ impl Worker {
11031103
}
11041104

11051105
fn proposal_generated(&mut self, sealed_block: &SealedBlock) {
1106+
let proposal_height = sealed_block.header().number();
1107+
let proposal_seal = sealed_block.header().seal();
1108+
let proposal_view = TendermintSealView::new(proposal_seal)
1109+
.consensus_view()
1110+
.expect("Generated proposal should have a valid seal");
1111+
if proposal_height < self.height || (proposal_height == self.height && proposal_view != self.view) {
1112+
ctrace!(
1113+
ENGINE,
1114+
"Proposal is generated on the height {} and view {}. Current height is {} and view is {}",
1115+
proposal_height,
1116+
proposal_view,
1117+
self.height,
1118+
self.view,
1119+
);
1120+
return
1121+
}
1122+
11061123
let header = sealed_block.header();
11071124
let hash = header.hash();
11081125
let parent_hash = header.parent_hash();
@@ -1117,7 +1134,12 @@ impl Worker {
11171134
parent_hash, expected_parent_hash
11181135
);
11191136
} else {
1120-
panic!("Block is generated at unexpected step {:?}", self.step);
1137+
ctrace!(
1138+
ENGINE,
1139+
"Proposal is generated after step is changed. Expected step is ProposeWaitBlockGeneration but current step is {:?}",
1140+
self.step,
1141+
);
1142+
return
11211143
}
11221144
let prev_proposer_idx = self.block_proposer_idx(*parent_hash).expect("Prev block must exists");
11231145

0 commit comments

Comments
 (0)