"encoding/hex"
"sort"
+ log "github.com/sirupsen/logrus"
+
"github.com/vapor/common/arithmetic"
"github.com/vapor/config"
"github.com/vapor/consensus"
"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},
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
}
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})