Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Only calculate tree route during finalization when there are multiple leaves #14067

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 18 additions & 13 deletions client/service/src/client/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 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 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 {
skunert marked this conversation as resolved.
Show resolved Hide resolved
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)?;
}
}

let enacted = route_from_finalized.enacted();
Expand Down