From 430e4cd399e10f45c29212cf8d598a7beb7d4605 Mon Sep 17 00:00:00 2001 From: bojie Date: Wed, 16 Jan 2019 17:08:56 +0800 Subject: app: fix reward bug with empty block (#155) * app: fix reward bug with empty block * make block generation consistent * revert change to dmoment in genesis.json --- consensus/dexcon/dexcon.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'consensus/dexcon') diff --git a/consensus/dexcon/dexcon.go b/consensus/dexcon/dexcon.go index 4480f64cb..33f05f599 100644 --- a/consensus/dexcon/dexcon.go +++ b/consensus/dexcon/dexcon.go @@ -143,20 +143,24 @@ func (d *Dexcon) calculateBlockReward(round int64, state *state.StateDB) *big.In // Finalize implements consensus.Engine, ensuring no uncles are set, nor block // rewards given, and returns the final block. func (d *Dexcon) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { - reward := d.calculateBlockReward(int64(header.Round), state) - state.AddBalance(header.Coinbase, reward) + if header.Coinbase == (common.Address{}) { + header.Reward = new(big.Int) + } else { + reward := d.calculateBlockReward(int64(header.Round), state) + state.AddBalance(header.Coinbase, reward) - gs := vm.GovernanceStateHelper{state} - gs.IncTotalSupply(reward) + gs := vm.GovernanceStateHelper{state} + gs.IncTotalSupply(reward) - config := gs.Configuration() + config := gs.Configuration() - // Check if halving checkpoint reached. - if gs.TotalSupply().Cmp(config.NextHalvingSupply) >= 0 { - gs.MiningHalved() + // Check if halving checkpoint reached. + if gs.TotalSupply().Cmp(config.NextHalvingSupply) >= 0 { + gs.MiningHalved() + } + header.Reward = reward } - header.Reward = reward header.Root = state.IntermediateRoot(true) return types.NewBlock(header, txs, uncles, receipts), nil } -- cgit v1.2.3