make proposing block's crosslink selection based on the last processed crosslink, add crosslink logs

fix/crosslink_processing
“GheisMohammadi” 10 months ago
parent 0296abdbeb
commit cd0057474f
No known key found for this signature in database
GPG Key ID: 15073AED3829FE90
  1. 32
      node/node_newblock.go

@ -228,13 +228,31 @@ func (node *Node) ProposeNewBlock(commitSigs chan []byte) (*types.Block, error)
// Prepare cross links and slashing messages // Prepare cross links and slashing messages
var crossLinksToPropose types.CrossLinks var crossLinksToPropose types.CrossLinks
ten := big.NewInt(10) ten := big.NewInt(10)
crossLinkEpochThreshold := new(big.Int).Sub(currentHeader.Epoch(), ten) // map of shard id to last processed crosslink
var lastCrossLinkEpoch map[uint32]*big.Int
if isBeaconchainInCrossLinkEra { if isBeaconchainInCrossLinkEra {
allPending, err := node.Blockchain().ReadPendingCrossLinks() allPending, err := node.Blockchain().ReadPendingCrossLinks()
invalidToDelete := []types.CrossLink{} invalidToDelete := []types.CrossLink{}
if err == nil { if err == nil {
for _, pending := range allPending { for _, pending := range allPending {
// if pending crosslink is older than 10 epochs, ignore it // trying to retrieve last cross link of the shard
var crossLinkEpochThreshold *big.Int
if epoch, exist := lastCrossLinkEpoch[pending.ShardID()]; exist {
crossLinkEpochThreshold = epoch
} else {
if lscl, errC := node.Blockchain().ReadShardLastCrossLink(pending.ShardID()); errC == nil && lscl != nil {
lastCrossLinkEpoch[pending.ShardID()] = lscl.EpochF
crossLinkEpochThreshold = lscl.EpochF
} else {
lastCrossLinkEpoch[pending.ShardID()] = new(big.Int).Sub(currentHeader.Epoch(), ten)
crossLinkEpochThreshold = new(big.Int).Sub(currentHeader.Epoch(), ten)
}
utils.Logger().Debug().
Uint32("shard", pending.ShardID()).
Int64("crossLinkEpochThreshold", crossLinkEpochThreshold.Int64()).
Msg("calculating epoch for the last cross link of the shard")
}
// if pending crosslink is older than last shard cross link or it is older than 10 epochs, ignore it
if pending.EpochF.Cmp(crossLinkEpochThreshold) <= 0 { if pending.EpochF.Cmp(crossLinkEpochThreshold) <= 0 {
continue continue
} }
@ -254,8 +272,16 @@ func (node *Node) ProposeNewBlock(commitSigs chan []byte) (*types.Block, error)
AnErr("[ProposeNewBlock] pending crosslink that's before crosslink epoch", err) AnErr("[ProposeNewBlock] pending crosslink that's before crosslink epoch", err)
continue continue
} }
crossLinksToPropose = append(crossLinksToPropose, pending) crossLinksToPropose = append(crossLinksToPropose, pending)
utils.Logger().Debug().
Int64("crossLinkEpochThreshold", crossLinkEpochThreshold.Int64()).
Uint32("shard", pending.ShardID()).
Int64("epoch", pending.Epoch().Int64()).
Uint64("blockNum", pending.BlockNum()).
Int64("viewID", pending.ViewID().Int64()).
Interface("hash", pending.Hash()).
Msg("add cross link to proposing block")
if len(crossLinksToPropose) > 15 { if len(crossLinksToPropose) > 15 {
break break
} }

Loading…
Cancel
Save