diff options
author | Wei-Ning Huang <w@dexon.org> | 2019-01-24 15:05:24 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@byzantine-lab.io> | 2019-06-12 17:27:21 +0800 |
commit | f55616df4fb5de81f25997feefd52d0554f985c6 (patch) | |
tree | b2fb44ab914f6b05a901690a90adb385c0cd26fb /consensus/dexcon/dexcon.go | |
parent | 3c774363f4df8cad3e8aafa594c5f2b417b7330e (diff) | |
download | go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar.gz go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar.bz2 go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar.lz go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar.xz go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.tar.zst go-tangerine-f55616df4fb5de81f25997feefd52d0554f985c6.zip |
consensus: dexcon: snapshot round height when finalizing block (#170)
Instead of having BP to send a tx to register the round height, just
modify the state when finalizing block.
Diffstat (limited to 'consensus/dexcon/dexcon.go')
-rw-r--r-- | consensus/dexcon/dexcon.go | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/consensus/dexcon/dexcon.go b/consensus/dexcon/dexcon.go index 33f05f599..2e406f0b0 100644 --- a/consensus/dexcon/dexcon.go +++ b/consensus/dexcon/dexcon.go @@ -143,13 +143,20 @@ 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) { + gs := vm.GovernanceStateHelper{state} + + height := gs.RoundHeight(new(big.Int).SetUint64(header.Round)) + if header.Round > 0 && height.Uint64() == 0 { + gs.PushRoundHeight(header.Number) + } + + // Distribute block reward and halving condition. 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) config := gs.Configuration() |