OSDN Git Service

Add consensus result test case
[bytom/vapor.git] / protocol / state / consensus_result.go
index 9fd571b..d392e1c 100644 (file)
@@ -4,6 +4,8 @@ import (
        "encoding/hex"
        "sort"
 
+       log "github.com/sirupsen/logrus"
+
        "github.com/vapor/common/arithmetic"
        "github.com/vapor/config"
        "github.com/vapor/consensus"
@@ -14,6 +16,8 @@ import (
        "github.com/vapor/protocol/bc/types"
 )
 
+const logModule = "state/consensus"
+
 // fedConsensusPath is used to derive federation root xpubs for signing blocks
 var fedConsensusPath = [][]byte{
        []byte{0xff, 0xff, 0xff, 0xff},
@@ -69,7 +73,11 @@ func CalCoinbaseReward(block *types.Block) (*CoinbaseReward, error) {
                        return nil, errors.Wrap(checked.ErrOverflow, "calculate transaction fee")
                }
 
-               result.Amount += txFee
+               ok := false
+               result.Amount, ok = checked.AddUint64(result.Amount, txFee)
+               if !ok {
+                       return nil, checked.ErrOverflow
+               }
        }
        return result, nil
 }
@@ -180,7 +188,9 @@ func (c *ConsensusResult) ConsensusNodes() (map[string]*ConsensusNode, error) {
                if voteNum >= consensus.ActiveNetParams.MinConsensusNodeVoteNum {
                        var xpub chainkd.XPub
                        if err := xpub.UnmarshalText([]byte(pubkey)); err != nil {
-                               return nil, err
+                               log.WithFields(log.Fields{"module": logModule, "err": err, "XPub": xpub.String()}).Debug("failed on unmarshal XPub")
+                               delete(c.NumOfVote, pubkey)
+                               continue
                        }
 
                        nodes = append(nodes, &ConsensusNode{XPub: xpub, VoteNum: voteNum})