OSDN Git Service

delete the key index (#335)
[bytom/vapor.git] / proposal / blockproposer / blockproposer.go
index afdc8d2..7f8c1da 100644 (file)
@@ -40,7 +40,7 @@ type BlockProposer struct {
 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 {
@@ -52,13 +52,25 @@ func (b *BlockProposer) generateBlocks() {
 
                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.GetBBFT().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
                }