func (b *BlockProposer) generateBlocks() {
xpub := config.CommonConfig.PrivateKey().XPub()
xpubStr := hex.EncodeToString(xpub[:])
- ticker := time.NewTicker(consensus.BlockTimeInterval * time.Millisecond)
+ ticker := time.NewTicker(time.Duration(consensus.ActiveNetParams.BlockTimeInterval) * time.Millisecond)
defer ticker.Stop()
for {
bestBlockHeader := b.chain.BestBlockHeader()
bestBlockHash := bestBlockHeader.Hash()
- nextBlockTime := uint64(time.Now().UnixNano() / 1e6)
- if minNextBlockTime := bestBlockHeader.Timestamp + consensus.BlockTimeInterval; nextBlockTime < minNextBlockTime {
- nextBlockTime = minNextBlockTime
+
+ now := uint64(time.Now().UnixNano() / 1e6)
+ base := now
+ if now < bestBlockHeader.Timestamp {
+ base = bestBlockHeader.Timestamp
+ }
+ minTimeToNextBlock := consensus.ActiveNetParams.BlockTimeInterval - base%consensus.ActiveNetParams.BlockTimeInterval
+ nextBlockTime := base + minTimeToNextBlock
+ if (nextBlockTime - now) < consensus.ActiveNetParams.BlockTimeInterval/10 {
+ nextBlockTime += consensus.ActiveNetParams.BlockTimeInterval
+ }
+
+ blocker, err := b.chain.GetBlocker(&bestBlockHash, nextBlockTime)
+ if err != nil {
+ log.WithFields(log.Fields{"module": logModule, "error": err, "pubKey": xpubStr}).Error("fail on check is next blocker")
+ continue
}
- if isBlocker, err := b.chain.IsBlocker(&bestBlockHash, xpubStr, nextBlockTime); !isBlocker {
- log.WithFields(log.Fields{"module": logModule, "error": err, "pubKey": xpubStr}).Debug("fail on check is next blocker")
+ if xpubStr != blocker {
continue
}