const logModule = "consensusereward"
var (
- rewardStartHeight uint64
- rewardEndHeight uint64
- configFile string
+ startHeight uint64
+ endHeight uint64
+ configFile string
)
var RootCmd = &cobra.Command{
}
func init() {
- RootCmd.Flags().Uint64Var(&rewardStartHeight, "reward_start_height", 0, "The starting height of the distributive income reward interval, It is a multiple of the dpos consensus cycle(1200). example: 1200")
- RootCmd.Flags().Uint64Var(&rewardEndHeight, "reward_end_height", 0, "The end height of the distributive income reward interval, It is a multiple of the dpos consensus cycle(1200). example: 2400")
+ RootCmd.Flags().Uint64Var(&startHeight, "start_height", 0, "The starting height of the distributive income reward interval, It is a multiple of the dpos consensus cycle(1200). example: 1200")
+ RootCmd.Flags().Uint64Var(&endHeight, "end_height", 0, "The end height of the distributive income reward interval, It is a multiple of the dpos consensus cycle(1200). example: 2400")
RootCmd.Flags().StringVar(&configFile, "config_file", "reward.json", "config file. default: reward.json")
}
if err := cfg.LoadConfigFile(configFile, config); err != nil {
log.WithFields(log.Fields{"module": logModule, "config": configFile, "error": err}).Fatal("Failded to load config file.")
}
- if rewardStartHeight >= rewardEndHeight || rewardStartHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 || rewardEndHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 {
+ if startHeight >= endHeight || startHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 || endHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 {
log.Fatal("Please check the height range, which must be multiple of the number of block rounds.")
}
- s := consensusreward.NewStandbyNodeReward(config, rewardStartHeight, rewardEndHeight)
+ s := consensusreward.NewStandbyNodeReward(config, startHeight, endHeight)
if err := s.Settlement(); err != nil {
log.WithFields(log.Fields{"module": logModule, "error": err}).Fatal("Standby node rewards failure.")
}
})
}
-func (n *Node) BatchSendBTM(accountID, password string, outputs map[string]uint64) error {
- totalBTM := uint64(10000000)
+func (n *Node) BatchSendBTM(accountID, password string, outputs map[string]uint64) (string, error) {
+ totalBTM := uint64(1000000)
actions := []interface{}{}
for address, amount := range outputs {
actions = append(actions, &ControlAddressAction{
tpl, err := n.buildTx(actions)
if err != nil {
- return err
+ return "", err
}
tpl, err = n.signTx(tpl, password)
if err != nil {
- return err
+ return "", err
}
- _, err = n.SubmitTx(tpl.Transaction)
- return err
+ return n.SubmitTx(tpl.Transaction)
}
type buildTxReq struct {
import (
"math/big"
+ log "github.com/sirupsen/logrus"
+
"github.com/vapor/consensus"
"github.com/vapor/errors"
"github.com/vapor/toolbar/apinode"
return err
}
}
+
rewards := map[string]uint64{}
for _, item := range s.cfg.RewardConf.Node {
if reward, ok := s.xpubRewards[item.XPub]; ok {
if len(rewards) == 0 {
return nil
}
- return s.node.BatchSendBTM(s.cfg.RewardConf.AccountID, s.cfg.RewardConf.Password, rewards)
+
+ txID, err := s.node.BatchSendBTM(s.cfg.RewardConf.AccountID, s.cfg.RewardConf.Password, rewards)
+ if err == nil {
+ log.WithFields(log.Fields{
+ "tx_hash": txID,
+ "start_height": s.startHeight,
+ "end_height": s.endHeight,
+ }).Info("success on submit consensus reward transaction")
+ }
+ return err
}
}
// send transactions
- return s.node.BatchSendBTM(s.rewardCfg.AccountID, s.rewardCfg.Password, s.rewards)
+ _, err := s.node.BatchSendBTM(s.rewardCfg.AccountID, s.rewardCfg.Password, s.rewards)
+ return err
}
func (s *SettlementReward) getStandbyNodeReward(height uint64) (uint64, error) {