dcrd/blockchain/subsidy_test.go
Dave Collins 60c812e735
multi: Upstream parameter abstraction sync
Upstream commit a7b35d9f9e.

Also, the merge commit contains necessary decred-specific alterations.
It also has the side effect of correcting a couple of min reduction bugs
even though they can't currently ever be hit due to the min reduction
interval flag being disabled for all networks.
2016-11-16 19:34:01 -06:00

58 lines
1.6 KiB
Go

// Copyright (c) 2013-2015 The btcsuite developers
// Copyright (c) 2015-2016 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package blockchain_test
import (
"testing"
"github.com/decred/dcrd/blockchain"
"github.com/decred/dcrd/chaincfg"
)
func TestBlockSubsidy(t *testing.T) {
mainnet := &chaincfg.MainNetParams
subsidyCache := blockchain.NewSubsidyCache(0, mainnet)
totalSubsidy := mainnet.BlockOneSubsidy()
for i := int64(0); ; i++ {
// Genesis block or first block.
if i == 0 || i == 1 {
continue
}
if i%mainnet.SubsidyReductionInterval == 0 {
numBlocks := mainnet.SubsidyReductionInterval
// First reduction internal, which is reduction interval - 2
// to skip the genesis block and block one.
if i == mainnet.SubsidyReductionInterval {
numBlocks -= 2
}
height := i - numBlocks
work := blockchain.CalcBlockWorkSubsidy(subsidyCache, height,
mainnet.TicketsPerBlock, mainnet)
stake := blockchain.CalcStakeVoteSubsidy(subsidyCache, height,
mainnet) * int64(mainnet.TicketsPerBlock)
tax := blockchain.CalcBlockTaxSubsidy(subsidyCache, height,
mainnet.TicketsPerBlock, mainnet)
if (work + stake + tax) == 0 {
break
}
totalSubsidy += ((work + stake + tax) * numBlocks)
// First reduction internal, subtract the stake subsidy for
// blocks before the staking system is enabled.
if i == mainnet.SubsidyReductionInterval {
totalSubsidy -= stake * (mainnet.StakeValidationHeight - 2)
}
}
}
if totalSubsidy != 2099999999800912 {
t.Errorf("Bad total subsidy; want 2099999999800912, got %v", totalSubsidy)
}
}