Use currentDifficulty on sidechain for too low diff checks

This commit is contained in:
DataHoarder 2023-03-27 15:27:29 +02:00
parent 170db02ba1
commit 11a270e547
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk

View file

@ -72,13 +72,16 @@ type SideChain struct {
} }
func NewSideChain(server P2PoolInterface) *SideChain { func NewSideChain(server P2PoolInterface) *SideChain {
return &SideChain{ s := &SideChain{
derivationCache: NewDerivationCache(), derivationCache: NewDerivationCache(),
server: server, server: server,
blocksByTemplateId: make(map[types.Hash]*PoolBlock), blocksByTemplateId: make(map[types.Hash]*PoolBlock),
blocksByHeight: make(map[uint64][]*PoolBlock), blocksByHeight: make(map[uint64][]*PoolBlock),
sharesCache: make(Shares, 0, server.Consensus().ChainWindowSize*2), sharesCache: make(Shares, 0, server.Consensus().ChainWindowSize*2),
} }
minDiff := types.DifficultyFrom64(server.Consensus().MinimumDifficulty)
s.currentDifficulty.Store(&minDiff)
return s
} }
func (c *SideChain) Consensus() *Consensus { func (c *SideChain) Consensus() *Consensus {
@ -89,6 +92,10 @@ func (c *SideChain) DerivationCache() *DerivationCache {
return c.derivationCache return c.derivationCache
} }
func (c *SideChain) Difficulty() types.Difficulty {
return *c.currentDifficulty.Load()
}
func (c *SideChain) PreCalcFinished() bool { func (c *SideChain) PreCalcFinished() bool {
return c.precalcFinished.Load() return c.precalcFinished.Load()
} }
@ -162,10 +169,8 @@ func (c *SideChain) AddPoolBlockExternal(block *PoolBlock) (missingBlocks []type
} }
//TODO: cache? //TODO: cache?
//expectedDifficulty := c.GetDifficulty(block) expectedDifficulty := c.Difficulty()
//tooLowDiff := block.Side.Difficulty.Cmp(expectedDifficulty) < 0 tooLowDiff := block.Side.Difficulty.Cmp(expectedDifficulty) < 0
tooLowDiff := false
var expectedDifficulty types.Difficulty
if otherBlock := c.GetPoolBlockByTemplateId(templateId); otherBlock != nil { if otherBlock := c.GetPoolBlockByTemplateId(templateId); otherBlock != nil {
//already added //already added
@ -186,8 +191,6 @@ func (c *SideChain) AddPoolBlockExternal(block *PoolBlock) (missingBlocks []type
} }
} }
//TODO log
if tooLowDiff { if tooLowDiff {
return nil, fmt.Errorf("block mined by %s has too low difficulty %s, expected >= %s", block.GetAddress().ToBase58(), block.Side.Difficulty.StringNumeric(), expectedDifficulty.StringNumeric()) return nil, fmt.Errorf("block mined by %s has too low difficulty %s, expected >= %s", block.GetAddress().ToBase58(), block.Side.Difficulty.StringNumeric(), expectedDifficulty.StringNumeric())
} }
@ -501,7 +504,7 @@ func (c *SideChain) verifyBlock(block *PoolBlock) (verification error, invalid e
if parent == c.GetChainTip() { if parent == c.GetChainTip() {
// built on top of the current chain tip, using current difficulty for verification // built on top of the current chain tip, using current difficulty for verification
diff = *c.currentDifficulty.Load() diff = c.Difficulty()
} else if diff = c.getDifficulty(parent); diff == types.ZeroDifficulty { } else if diff = c.getDifficulty(parent); diff == types.ZeroDifficulty {
return nil, errors.New("could not get difficulty") return nil, errors.New("could not get difficulty")
} }