OSDN Git Service

Merge pull request #1137 from Bytom/v1.0.3_fix
[bytom/bytom.git] / config / genesis.go
index 76d67e3..38ee157 100644 (file)
@@ -11,7 +11,7 @@ import (
 )
 
 func genesisTx() *types.Tx {
-       contract, err := hex.DecodeString("00149514bf92cac8791dcc4cd7fd3ef4167ffc477f62")
+       contract, err := hex.DecodeString("00148c9d063ff74ee6d9ffa88d83aeb038068366c4c4")
        if err != nil {
                log.Panicf("fail on decode genesis tx output control program")
        }
@@ -19,7 +19,7 @@ func genesisTx() *types.Tx {
        txData := types.TxData{
                Version: 1,
                Inputs: []*types.TxInput{
-                       types.NewCoinbaseInput([]byte("May 4th Be With You")),
+                       types.NewCoinbaseInput([]byte("Information is power. -- Jan/11/2013. Computing is power. -- Apr/24/2018.")),
                },
                Outputs: []*types.TxOutput{
                        types.NewTxOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract),
@@ -28,8 +28,7 @@ func genesisTx() *types.Tx {
        return types.NewTx(txData)
 }
 
-// GenesisBlock will return genesis block
-func GenesisBlock() *types.Block {
+func mainNetGenesisBlock() *types.Block {
        tx := genesisTx()
        txStatus := bc.NewTransactionStatus()
        txStatus.SetStatus(0, false)
@@ -47,8 +46,39 @@ func GenesisBlock() *types.Block {
                BlockHeader: types.BlockHeader{
                        Version:   1,
                        Height:    0,
-                       Nonce:     2083236893,
-                       Timestamp: 1524202000,
+                       Nonce:     9253507043297,
+                       Timestamp: 1524549600,
+                       Bits:      2161727821137910632,
+                       BlockCommitment: types.BlockCommitment{
+                               TransactionsMerkleRoot: merkleRoot,
+                               TransactionStatusHash:  txStatusHash,
+                       },
+               },
+               Transactions: []*types.Tx{tx},
+       }
+       return block
+}
+
+func testNetGenesisBlock() *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:     9253507043297,
+                       Timestamp: 1528945000,
                        Bits:      2305843009214532812,
                        BlockCommitment: types.BlockCommitment{
                                TransactionsMerkleRoot: merkleRoot,
@@ -59,3 +89,43 @@ func GenesisBlock() *types.Block {
        }
        return block
 }
+
+func soloNetGenesisBlock() *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:     9253507043297,
+                       Timestamp: 1528945000,
+                       Bits:      2305843009214532812,
+                       BlockCommitment: types.BlockCommitment{
+                               TransactionsMerkleRoot: merkleRoot,
+                               TransactionStatusHash:  txStatusHash,
+                       },
+               },
+               Transactions: []*types.Tx{tx},
+       }
+       return block
+}
+
+// GenesisBlock will return genesis block
+func GenesisBlock() *types.Block {
+       return map[string]func() *types.Block{
+               "main": mainNetGenesisBlock,
+               "test": testNetGenesisBlock,
+               "solo": soloNetGenesisBlock,
+       }[consensus.ActiveNetParams.Name]()
+}