log.WithFields(log.Fields{"module": logModule, "config": configFilePath}).Fatal("Already exists config file.")
}
- if err := cfg.ExportFederationFile(configFilePath, config); err != nil {
+ if err := cfg.ExportConfigFile(configFilePath, config); err != nil {
log.WithFields(log.Fields{"module": logModule, "config": configFilePath, "error": err}).Fatal("fail on export reward file")
}
startTime := time.Now()
configFilePath := cfg.ConfigFile()
config := &cfg.Config{}
- if err := cfg.LoadFederationFile(configFilePath, config); err != nil {
- cmn.Exit(cmn.Fmt("Failed to load reward information:[%s]", err.Error()))
+ if err := cfg.LoadConfigFile(configFilePath, config); err != nil {
+ log.WithFields(log.Fields{"module": logModule, "config": configFilePath, "error": err}).Fatal("Failded to load config file.")
}
initActiveNetParams(config)
if rewardStartHeight >= rewardEndHeight || rewardStartHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 || rewardEndHeight%consensus.ActiveNetParams.RoundVoteBlockNums != 0 {
- cmn.Exit("Please check the height range, which must be multiple of the number of block rounds")
+ log.Fatal("Please check the height range, which must be multiple of the number of block rounds.")
}
db, err := common.NewMySQLDB(config.MySQLConfig)
if err != nil {
- cmn.Exit(cmn.Fmt("initialize mysql db error:[%s]", err.Error()))
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Fatal("Failded to initialize mysql db.")
}
sync, err := synchron.NewChainKeeper(db, config, rewardEndHeight)
if err != nil {
- cmn.Exit(cmn.Fmt("initialize NewChainKeeper error:[%s]", err.Error()))
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Fatal("Failded to initialize NewChainKeeper.")
}
if err := sync.Start(); err != nil {
- cmn.Exit(cmn.Fmt("Failded to sync block:[%s]", err.Error()))
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Fatal("Failded to sync block.")
}
r := reward.NewReward(db, config, rewardStartHeight, rewardEndHeight)
if err := r.Start(); err != nil {
- cmn.Exit(cmn.Fmt("Failded to send reward:[%s]", err.Error()))
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Fatal("Failded to send reward.")
}
log.WithFields(log.Fields{
)
type Config struct {
- MySQLConfig common.MySQLConfig `json:"mysql"`
- Chain Chain `json:"chain"`
- VoteConf *VoteRewardConfig `json:"vote_reward"`
- OptionalNodeConf *OptionalNodeRewardConfig `json:"optional_node_reward"`
+ MySQLConfig common.MySQLConfig `json:"mysql"`
+ Chain Chain `json:"chain"`
+ VoteConf *VoteRewardConfig `json:"vote_reward"`
+ AlternativeNodeConf *AlternativeNodeRewardConfig `json:"alternative_node_reward"`
}
func DefaultConfig(isVoterReward bool) *Config {
}
}
return &Config{
- OptionalNodeConf: DefaultOptionalNodeRewardConfig(),
+ AlternativeNodeConf: DefaultAlternativeNodeRewardConfig(),
}
}
MiningAddress string `json:"mining_adress"`
}
-type OptionalNodeRewardConfig struct {
+type AlternativeNodeRewardConfig struct {
TotalReward uint64 `json:"total_reward"`
}
}
}
-func DefaultOptionalNodeRewardConfig() *OptionalNodeRewardConfig {
- return &OptionalNodeRewardConfig{
+func DefaultAlternativeNodeRewardConfig() *AlternativeNodeRewardConfig {
+ return &AlternativeNodeRewardConfig{
TotalReward: 30,
}
}
-func ExportFederationFile(fedFile string, config *Config) error {
+func ExportConfigFile(fedFile string, config *Config) error {
buf := new(bytes.Buffer)
encoder := json.NewEncoder(buf)
return ioutil.WriteFile(fedFile, buf.Bytes(), 0644)
}
-func LoadFederationFile(fedFile string, config *Config) error {
+func LoadConfigFile(fedFile string, config *Config) error {
file, err := os.Open(fedFile)
if err != nil {
return err
for height := v.rewardStartHeight + v.roundVoteBlockNums; height <= v.rewardEndHeight; height += v.roundVoteBlockNums {
voteInfo, err := v.getVoteByXpub(height)
if err != nil {
- log.WithFields(log.Fields{"error": err, "coinbase_height": height}).Error("get vote from db")
return errors.Wrapf(err, "get vote from db at coinbase_height: %d", height)
}
coinbaseHeight := height + 1
coinbaseTx, err := v.node.GetCoinbaseTx(coinbaseHeight)
if err != nil {
- log.WithFields(log.Fields{"error": err, "coinbase_height": coinbaseHeight}).Error("get coinbase reward")
return errors.Wrapf(err, "get coinbase reward at coinbase_height: %d", coinbaseHeight)
}
for _, output := range coinbaseTx.Outputs {
output, ok := output.TypedOutput.(*types.IntraChainOutput)
if !ok {
- log.WithFields(log.Fields{"error": err, "coinbase_height": coinbaseHeight}).Error("Output type error")
return errors.New("Output type error")
}
outputAction := strings.Join(outputActions, ",")
txID, err := v.node.SendTransaction(inputAction, outputAction, v.nodeConfig.Passwd)
if err != nil {
- log.WithFields(log.Fields{"error": err, "node": v.nodeConfig}).Error("send reward transaction")
return err
}
}
blockState := &orm.BlockState{}
- if err := db.First(blockState).Error; err != nil {
- if err == gorm.ErrRecordNotFound {
- blockStr, _, err := keeper.node.GetBlockByHeight(0)
- if err != nil {
- return nil, errors.Wrap(err, "Failed to get genenis block")
- }
- block := &types.Block{}
- if err := block.UnmarshalText([]byte(blockStr)); err != nil {
- return nil, errors.Wrap(err, "unmarshal block")
- }
- if err := keeper.insertBlockState(db, block); err != nil {
- return nil, errors.Wrap(err, "Failed to insert blockState")
- }
- } else {
- return nil, errors.Wrap(err, "Failed to get blockState")
+ if err := db.First(blockState).Error; err == gorm.ErrRecordNotFound {
+ blockStr, _, err := keeper.node.GetBlockByHeight(0)
+ if err != nil {
+ return nil, errors.Wrap(err, "Failed to get genenis block")
+ }
+ block := &types.Block{}
+ if err := block.UnmarshalText([]byte(blockStr)); err != nil {
+ return nil, errors.Wrap(err, "unmarshal block")
+ }
+ if err := keeper.initBlockState(db, block); err != nil {
+ return nil, errors.Wrap(err, "Failed to insert blockState")
}
+ } else if err != nil {
+ return nil, errors.Wrap(err, "Failed to get blockState")
}
return keeper, nil
for {
blockState := &orm.BlockState{}
if c.db.First(blockState).RecordNotFound() {
- log.Errorln("The query blockState record is empty empty on process block")
return errors.New("The query blockState record is empty empty on process block")
}
}
if err := c.syncBlock(blockState); err != nil {
- log.WithField("error", err).Errorln("blockKeeper fail on process block")
return err
}
}
return ormDB.Commit().Error
}
-func (c *ChainKeeper) insertBlockState(db *gorm.DB, block *types.Block) error {
+func (c *ChainKeeper) initBlockState(db *gorm.DB, block *types.Block) error {
blockHash := block.Hash()
blockState := &orm.BlockState{
Height: block.Height,