mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 02:51:08 +00:00
Only calculate tree route during finalization when there are multiple leaves (#14067)
* Only calculate tree route when there are multiple leaves * Update client/service/src/client/client.rs Co-authored-by: Bastian Köcher <git@kchr.de> --------- Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
@@ -936,19 +936,24 @@ where
|
||||
return Err(sp_blockchain::Error::NotInFinalizedChain)
|
||||
}
|
||||
|
||||
let route_from_best =
|
||||
sp_blockchain::tree_route(self.backend.blockchain(), best_block, block)?;
|
||||
// If there is only one leaf, best block is guaranteed to be
|
||||
// a descendant of the new finalized block. If not,
|
||||
// we need to check.
|
||||
if self.backend.blockchain().leaves()?.len() > 1 {
|
||||
let route_from_best =
|
||||
sp_blockchain::tree_route(self.backend.blockchain(), best_block, block)?;
|
||||
|
||||
// if the block is not a direct ancestor of the current best chain,
|
||||
// then some other block is the common ancestor.
|
||||
if route_from_best.common_block().hash != block {
|
||||
// NOTE: we're setting the finalized block as best block, this might
|
||||
// be slightly inaccurate since we might have a "better" block
|
||||
// further along this chain, but since best chain selection logic is
|
||||
// plugable we cannot make a better choice here. usages that need
|
||||
// an accurate "best" block need to go through `SelectChain`
|
||||
// instead.
|
||||
operation.op.mark_head(block)?;
|
||||
// if the block is not a direct ancestor of the current best chain,
|
||||
// then some other block is the common ancestor.
|
||||
if route_from_best.common_block().hash != block {
|
||||
// NOTE: we're setting the finalized block as best block, this might
|
||||
// be slightly inaccurate since we might have a "better" block
|
||||
// further along this chain, but since best chain selection logic is
|
||||
// plugable we cannot make a better choice here. usages that need
|
||||
// an accurate "best" block need to go through `SelectChain`
|
||||
// instead.
|
||||
operation.op.mark_head(block)?;
|
||||
}
|
||||
}
|
||||
|
||||
let enacted = route_from_finalized.enacted();
|
||||
|
||||
Reference in New Issue
Block a user