OSDN Git Service

Mov (#518)
[bytom/vapor.git] / proposal / blockproposer / blockproposer.go
index 32105db..f7d08b0 100644 (file)
@@ -7,16 +7,20 @@ import (
 
        log "github.com/sirupsen/logrus"
 
-       "github.com/vapor/account"
-       "github.com/vapor/config"
-       "github.com/vapor/consensus"
-       "github.com/vapor/event"
-       "github.com/vapor/proposal"
-       "github.com/vapor/protocol"
+       "github.com/bytom/vapor/account"
+       "github.com/bytom/vapor/config"
+       "github.com/bytom/vapor/consensus"
+       "github.com/bytom/vapor/event"
+       "github.com/bytom/vapor/proposal"
+       "github.com/bytom/vapor/protocol"
 )
 
 const (
-       logModule = "blockproposer"
+       logModule         = "blockproposer"
+       warnTimeNum       = 2
+       warnTimeDenom     = 5
+       criticalTimeNum   = 4
+       criticalTimeDenom = 5
 )
 
 // BlockProposer propose several block in specified time range
@@ -40,7 +44,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 {
@@ -58,23 +62,25 @@ func (b *BlockProposer) generateBlocks() {
                if now < bestBlockHeader.Timestamp {
                        base = bestBlockHeader.Timestamp
                }
-               minTimeToNextBlock := consensus.BlockTimeInterval - base%consensus.BlockTimeInterval
+               minTimeToNextBlock := consensus.ActiveNetParams.BlockTimeInterval - base%consensus.ActiveNetParams.BlockTimeInterval
                nextBlockTime := base + minTimeToNextBlock
-               if (nextBlockTime - now) < consensus.BlockTimeInterval/10 {
-                       nextBlockTime += consensus.BlockTimeInterval
+               if (nextBlockTime - now) < consensus.ActiveNetParams.BlockTimeInterval/10 {
+                       nextBlockTime += consensus.ActiveNetParams.BlockTimeInterval
                }
 
-               isBlocker, err := b.chain.IsBlocker(&bestBlockHash, xpubStr, nextBlockTime)
+               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 {
+               if xpubStr != blocker {
                        continue
                }
 
-               block, err := proposal.NewBlockTemplate(b.chain, b.txPool, b.accountManager, nextBlockTime)
+               warnDuration := time.Duration(consensus.ActiveNetParams.BlockTimeInterval*warnTimeNum/warnTimeDenom) * time.Millisecond
+               criticalDuration := time.Duration(consensus.ActiveNetParams.BlockTimeInterval*criticalTimeNum/criticalTimeDenom) * time.Millisecond
+               block, err := proposal.NewBlockTemplate(b.chain, b.accountManager, nextBlockTime, warnDuration, criticalDuration)
                if err != nil {
                        log.WithFields(log.Fields{"module": logModule, "error": err}).Error("failed on create NewBlockTemplate")
                        continue