github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/mining/mining_test.go (about) 1 package mining 2 3 import "testing" 4 5 func TestCreateCoinbaseTx(t *testing.T) { 6 reductionInterval := uint64(840000) 7 baseSubsidy := uint64(41250000000) 8 cases := []struct { 9 height uint64 10 txFee uint64 11 subsidy uint64 12 }{ 13 { 14 height: reductionInterval - 1, 15 txFee: 100000000, 16 subsidy: baseSubsidy + 100000000, 17 }, 18 { 19 height: reductionInterval, 20 txFee: 2000000000, 21 subsidy: baseSubsidy/2 + 2000000000, 22 }, 23 { 24 height: reductionInterval + 1, 25 txFee: 0, 26 subsidy: baseSubsidy / 2, 27 }, 28 { 29 height: reductionInterval * 2, 30 txFee: 100000000, 31 subsidy: baseSubsidy/4 + 100000000, 32 }, 33 } 34 35 for _, c := range cases { 36 coinbaseTx, err := createCoinbaseTx(nil, c.txFee, c.height) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 outputAmount := coinbaseTx.Outputs[0].OutputCommitment.Amount 42 if outputAmount != c.subsidy { 43 t.Fatalf("coinbase tx reward dismatch, expected: %d, have: %d", c.subsidy, outputAmount) 44 } 45 } 46 }