4 log "github.com/sirupsen/logrus"
6 "github.com/bytom/consensus"
7 "github.com/bytom/crypto/sha3pool"
8 "github.com/bytom/protocol/bc"
9 "github.com/bytom/protocol/bc/legacy"
12 // Generate genesis transaction
13 func GenerateGenesisTx() *legacy.Tx {
14 txData := legacy.TxData{
17 Inputs: []*legacy.TxInput{},
18 Outputs: []*legacy.TxOutput{
21 OutputCommitment: legacy.OutputCommitment{
22 AssetAmount: bc.AssetAmount{
23 AssetId: consensus.BTMAssetID,
24 Amount: 1470000000000000000,
27 ControlProgram: []byte{81},
33 return legacy.NewTx(txData)
36 // Generate genesis block
37 func GenerateGenesisBlock() *legacy.Block {
38 genesisCoinbaseTx := GenerateGenesisTx()
39 merkleRoot, err := bc.MerkleRoot([]*bc.Tx{genesisCoinbaseTx.Tx})
41 log.Panicf("Fatal create merkelRoot")
45 sha3pool.Sum256(seed[:], make([]byte, 32))
47 genesisBlock := &legacy.Block{
48 BlockHeader: legacy.BlockHeader{
51 Seed: bc.NewHash(seed),
52 TimestampMS: 1511318565142,
53 BlockCommitment: legacy.BlockCommitment{
54 TransactionsMerkleRoot: merkleRoot,
56 Bits: 2161727821138738707,
58 Transactions: []*legacy.Tx{genesisCoinbaseTx},
61 for i := uint64(0); i <= 10000000000000; i++ {
62 genesisBlock.Nonce = i
63 hash := genesisBlock.Hash()
65 if consensus.CheckProofOfWork(&hash, genesisBlock.Bits) {
70 log.Infof("genesisBlock:%v", genesisBlock)