OSDN Git Service

modify bug
authormars <mars@bytom.io>
Fri, 22 Mar 2019 06:34:25 +0000 (14:34 +0800)
committermars <mars@bytom.io>
Mon, 25 Mar 2019 07:28:34 +0000 (15:28 +0800)
consensus/consensus/dpos/dpos.go
consensus/consensus/dpos/vote.go
node/node.go

index de0ed2e..69abaf0 100644 (file)
@@ -109,10 +109,7 @@ func (d *DposType) Init(c chain.Chain, delegateNumber, intervalTime, blockHeight
 
        GDpos.irreversibleBlockFileName = filepath.Join(config.CommonConfig.RootDir, "dpos", "irreversible_block.dat")
        GDpos.irreversibleBlockInfo = *newIrreversibleBlockInfo()
 
        GDpos.irreversibleBlockFileName = filepath.Join(config.CommonConfig.RootDir, "dpos", "irreversible_block.dat")
        GDpos.irreversibleBlockInfo = *newIrreversibleBlockInfo()
-       if err := GDpos.ReadIrreversibleBlockInfo(&GDpos.irreversibleBlockInfo); err != nil {
-               return err
-       }
-
+       GDpos.ReadIrreversibleBlockInfo(&GDpos.irreversibleBlockInfo)
        header, _ := c.GetHeaderByHeight(d.DposStartHeight)
        d.setStartTime(header.Timestamp)
        return nil
        header, _ := c.GetHeaderByHeight(d.DposStartHeight)
        d.setStartTime(header.Timestamp)
        return nil
@@ -132,6 +129,9 @@ func (d *DposType) IsMining(address common.Address, t uint64) (interface{}, erro
        if currentLoopIndex > prevLoopIndex {
                delegateInfo := d.GetNextDelegates(t)
                cDelegateInfo := delegateInfo.(*DelegateInfo)
        if currentLoopIndex > prevLoopIndex {
                delegateInfo := d.GetNextDelegates(t)
                cDelegateInfo := delegateInfo.(*DelegateInfo)
+               if uint64(len(cDelegateInfo.Delegates)) < currentDelegateIndex+1 {
+                       return nil, errors.New("Out of the block node list")
+               }
                if cDelegateInfo.Delegates[currentDelegateIndex].DelegateAddress == address.EncodeAddress() {
                        return delegateInfo, nil
                }
                if cDelegateInfo.Delegates[currentDelegateIndex].DelegateAddress == address.EncodeAddress() {
                        return delegateInfo, nil
                }
index 7daa793..c705674 100644 (file)
@@ -396,7 +396,9 @@ func (v *Vote) GetTopDelegateInfo(minHoldBalance uint64, delegateNum uint64) []D
                        result = append(result, Delegate{k, 0})
                }
        }
                        result = append(result, Delegate{k, 0})
                }
        }
-
+       if uint64(len(result)) <= delegateNum {
+               return result
+       }
        result = result[:delegateNum]
        return result
 }
        result = result[:delegateNum]
        return result
 }
index 61176c2..5774488 100644 (file)
@@ -105,6 +105,11 @@ func NewNode(config *cfg.Config) *Node {
                cmn.Exit(cmn.Fmt("Failed to create chain structure: %v", err))
        }
 
                cmn.Exit(cmn.Fmt("Failed to create chain structure: %v", err))
        }
 
+       switch config.Consensus.Type {
+       case "dpos":
+               initDpos(chain, config)
+       }
+
        var accounts *account.Manager = nil
        var assets *asset.Registry = nil
        var wallet *w.Wallet = nil
        var accounts *account.Manager = nil
        var assets *asset.Registry = nil
        var wallet *w.Wallet = nil
@@ -161,12 +166,6 @@ func NewNode(config *cfg.Config) *Node {
                        }
                }()
        }
                        }
                }()
        }
-
-       switch config.Consensus.Type {
-       case "dpos":
-               initDpos(chain, config)
-       }
-
        node := &Node{
                config:       config,
                syncManager:  syncManager,
        node := &Node{
                config:       config,
                syncManager:  syncManager,