dcrd/blockchain/chaingen/example_test.go
Donald Adu-Poku bad849b69d multi: Start blockchain v4 module dev cycle.
This updates the blockchain module version to v4 and
updates import sites.
2020-11-10 16:51:38 -06:00

72 lines
1.7 KiB
Go

// Copyright (c) 2017-2020 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package chaingen_test
import (
"fmt"
"github.com/decred/dcrd/blockchain/v4/chaingen"
"github.com/decred/dcrd/chaincfg/v3"
)
// This example demonstrates creating a new generator instance and using it to
// generate the required first block and enough blocks to have mature coinbase
// outputs to work with along with asserting the generator state along the way.
func Example_basicUsage() {
params := chaincfg.RegNetParams()
g, err := chaingen.MakeGenerator(params)
if err != nil {
fmt.Println(err)
return
}
// Shorter versions of useful params for convenience.
coinbaseMaturity := params.CoinbaseMaturity
// ---------------------------------------------------------------------
// First block.
// ---------------------------------------------------------------------
// Add the required first block.
//
// genesis -> bfb
g.CreateBlockOne("bfb", 0)
g.AssertTipHeight(1)
fmt.Println(g.TipName())
// ---------------------------------------------------------------------
// Generate enough blocks to have mature coinbase outputs to work with.
//
// genesis -> bp -> bm0 -> bm1 -> ... -> bm#
// ---------------------------------------------------------------------
for i := uint16(0); i < coinbaseMaturity; i++ {
blockName := fmt.Sprintf("bm%d", i)
g.NextBlock(blockName, nil, nil)
g.SaveTipCoinbaseOuts()
fmt.Println(g.TipName())
}
g.AssertTipHeight(uint32(coinbaseMaturity) + 1)
// Output:
// bfb
// bm0
// bm1
// bm2
// bm3
// bm4
// bm5
// bm6
// bm7
// bm8
// bm9
// bm10
// bm11
// bm12
// bm13
// bm14
// bm15
}