From c903a65defda9a8be0d2ef3c0f174b6f167535a6 Mon Sep 17 00:00:00 2001 From: msutton Date: Tue, 8 Mar 2022 03:51:06 +0200 Subject: [PATCH] a temp patch for fixing IBD issues for all side-chains --- app/protocol/flows/v4/blockrelay/ibd.go | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app/protocol/flows/v4/blockrelay/ibd.go b/app/protocol/flows/v4/blockrelay/ibd.go index b428845fa..c722e809e 100644 --- a/app/protocol/flows/v4/blockrelay/ibd.go +++ b/app/protocol/flows/v4/blockrelay/ibd.go @@ -13,7 +13,9 @@ import ( "github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + "github.com/kaspanet/kaspad/util/difficulty" "github.com/pkg/errors" + "math/big" "time" ) @@ -85,25 +87,25 @@ func (flow *handleIBDFlow) runIBDIfNotRunning(block *externalapi.DomainBlock) er return err } log.Criticalf("Found highest shared chain block %s with peer %s", highestSharedBlockHash, flow.peer) + if highestSharedBlockFound { - checkpoint, err := externalapi.NewDomainHashFromString("f4a415f28990806a899a208b77930fa5a58f3a94876c3cbe814e60a7ed22824f") + virtualSelectedParent, err := flow.Domain().Consensus().GetVirtualSelectedParent() if err != nil { return err } - - info, err := flow.Domain().Consensus().GetBlockInfo(checkpoint) + virtualSelectedParentHeader, err := flow.Domain().Consensus().GetBlockHeader(virtualSelectedParent) if err != nil { return err } - - if info.Exists { - isInSelectedParentChainOf, err := flow.Domain().Consensus().IsInSelectedParentChainOf(checkpoint, highestSharedBlockHash) - if err != nil { - return err - } - - if !isInSelectedParentChainOf { - log.Criticalf("Stopped IBD because the checkpoint %s is not in the selected chain of %s", checkpoint, highestSharedBlockHash) + if virtualSelectedParentHeader.DAAScore() > block.Header.DAAScore()+2641*3 { + virtualDifficulty := difficulty.CalcWork(virtualSelectedParentHeader.Bits()) + var virtualSub, difficultyMul big.Int + if difficultyMul.Mul(virtualDifficulty, big.NewInt(180)). + Cmp(virtualSub.Sub(virtualSelectedParentHeader.BlueWork(), block.Header.BlueWork())) < 0 { + log.Criticalf("Stopped IBD because it is coming from a deep (%d DAA score depth) "+ + "side-chain which split at %s and has lower blue work (%d, %d)", + virtualSelectedParentHeader.DAAScore()-block.Header.DAAScore(), + highestSharedBlockHash, virtualSelectedParentHeader.BlueWork(), block.Header.BlueWork()) return nil } }