finality: dont require chain head to be in the chain (#10054)
This commit is contained in:
parent
696dc05dda
commit
ce5f704dd5
@ -1422,16 +1422,21 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
let mut finality_proof: Vec<_> = itertools::repeat_call(move || {
|
let mut finality_proof: Vec<_> = itertools::repeat_call(move || {
|
||||||
chain(hash).and_then(|header| {
|
chain(hash).and_then(|header| {
|
||||||
hash = *header.parent_hash();
|
hash = *header.parent_hash();
|
||||||
if header.number() == 0 { return None }
|
if header.number() == 0 { None }
|
||||||
else { return Some(header) }
|
else { Some(header) }
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.while_some()
|
.while_some()
|
||||||
.take_while(|h| h.hash() != *finalized_hash)
|
.take_while(|h| h.hash() != *finalized_hash)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let finalized_header = chain(*finalized_hash)
|
let finalized_header = if *finalized_hash == chain_head.hash() {
|
||||||
.expect("header is finalized; finalized headers must exist in the chain; qed");
|
// chain closure only stores ancestry, but the chain head is also unfinalized.
|
||||||
|
chain_head.clone()
|
||||||
|
} else {
|
||||||
|
chain(*finalized_hash)
|
||||||
|
.expect("header is finalized; finalized headers must exist in the chain; qed")
|
||||||
|
};
|
||||||
|
|
||||||
let signal_number = finalized_header.number();
|
let signal_number = finalized_header.number();
|
||||||
info!(target: "engine", "Applying validator set change signalled at block {}", signal_number);
|
info!(target: "engine", "Applying validator set change signalled at block {}", signal_number);
|
||||||
|
Loading…
Reference in New Issue
Block a user