4 log "github.com/sirupsen/logrus"
6 "github.com/bytom/consensus"
7 "github.com/bytom/protocol/bc"
8 "github.com/bytom/protocol/bc/types"
11 // GenerateGenesisTx will return genesis transaction
12 func GenerateGenesisTx() *types.Tx {
13 txData := types.TxData{
16 Inputs: []*types.TxInput{
17 types.NewCoinbaseInput([]byte("May 4th Be With You")),
19 Outputs: []*types.TxOutput{
22 OutputCommitment: types.OutputCommitment{
23 AssetAmount: bc.AssetAmount{
24 AssetId: consensus.BTMAssetID,
25 Amount: consensus.InitialBlockSubsidy,
28 ControlProgram: []byte{81},
34 return types.NewTx(txData)
37 // GenerateGenesisBlock will return genesis block
38 func GenerateGenesisBlock() *types.Block {
39 genesisCoinbaseTx := GenerateGenesisTx()
40 merkleRoot, err := bc.TxMerkleRoot([]*bc.Tx{genesisCoinbaseTx.Tx})
42 log.Panicf("Fatal create tx merkelRoot")
45 txStatus := bc.NewTransactionStatus()
46 txStatus.SetStatus(0, false)
47 txStatusHash, err := bc.TxStatusMerkleRoot(txStatus.VerifyStatus)
49 log.Panicf("Fatal create tx status gmerkelRoot")
52 block := &types.Block{
53 BlockHeader: types.BlockHeader{
57 Timestamp: 1523352600,
58 BlockCommitment: types.BlockCommitment{
59 TransactionsMerkleRoot: merkleRoot,
60 TransactionStatusHash: txStatusHash,
62 Bits: 2305843009214532812,
64 Transactions: []*types.Tx{genesisCoinbaseTx},