package config import ( "encoding/hex" log "github.com/sirupsen/logrus" "github.com/bytom/consensus" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" ) func genesisTx() *types.Tx { contract, err := hex.DecodeString("00149514bf92cac8791dcc4cd7fd3ef4167ffc477f62") if err != nil { log.Panicf("fail on decode genesis tx output control program") } txData := types.TxData{ Version: 1, Inputs: []*types.TxInput{ types.NewCoinbaseInput([]byte("May 4th Be With You")), }, Outputs: []*types.TxOutput{ types.NewTxOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract), }, } return types.NewTx(txData) } // GenesisBlock will return genesis block func GenesisBlock() *types.Block { tx := genesisTx() txStatus := bc.NewTransactionStatus() txStatus.SetStatus(0, false) txStatusHash, err := bc.TxStatusMerkleRoot(txStatus.VerifyStatus) if err != nil { log.Panicf("fail on calc genesis tx status merkle root") } merkleRoot, err := bc.TxMerkleRoot([]*bc.Tx{tx.Tx}) if err != nil { log.Panicf("fail on calc genesis tx merkel root") } block := &types.Block{ BlockHeader: types.BlockHeader{ Version: 1, Height: 0, Nonce: 2083236893, Timestamp: 1524202000, Bits: 2089670227111054243, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, }, }, Transactions: []*types.Tx{tx}, } return block }