From c35f2b1844b19035f008cb11ac5d5d418397567d Mon Sep 17 00:00:00 2001 From: oys Date: Wed, 3 Jul 2019 10:33:17 +0800 Subject: [PATCH] fix coinbase calculate --- protocol/block.go | 10 +++++++++- protocol/state/consensus_result.go | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/protocol/block.go b/protocol/block.go index bb739194..e692602e 100644 --- a/protocol/block.go +++ b/protocol/block.go @@ -162,6 +162,14 @@ func (c *Chain) reorganizeChain(blockHeader *types.BlockHeader) error { return err } + if detachBlockHeader.Height%consensus.RoundVoteBlockNums == 0 { + hash := detachBlockHeader.Hash() + consensusResult, err = c.GetConsensusResultByHash(&hash) + if err != nil { + return err + } + } + if err := consensusResult.DetachBlock(b); err != nil { return err } @@ -227,7 +235,7 @@ func (c *Chain) saveBlock(block *types.Block) error { } rewards := []validation.CoinbaseReward{} - if (parent.Height+1)%consensus.RoundVoteBlockNums == 0 { + if block.Height%consensus.RoundVoteBlockNums == 0 { consensusResult, err := c.getBestConsensusResult() if err != nil { return err diff --git a/protocol/state/consensus_result.go b/protocol/state/consensus_result.go index ac4c0495..92ee8efc 100644 --- a/protocol/state/consensus_result.go +++ b/protocol/state/consensus_result.go @@ -67,6 +67,10 @@ func (c *ConsensusResult) ApplyBlock(block *types.Block) error { return err } + if c.IsFinalize() { + c.RewardOfCoinbase = map[string]uint64{} + } + program := hex.EncodeToString(reward.ControlProgram) c.RewardOfCoinbase[program], ok = checked.AddUint64(c.RewardOfCoinbase[program], reward.Amount) if !ok { -- 2.11.0