X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=config%2Fgenesis.go;h=f714e7b505c770406d4fc3e554d817e8bd595ed0;hb=4c43de6c51c2f266b6671cf6ff724aae4ca6c8fa;hp=bd19407a3c7227e4b790d35031ba4cb919caaea2;hpb=08281341c2cb02ba11d4218576256688854790fc;p=bytom%2Fvapor.git diff --git a/config/genesis.go b/config/genesis.go index bd19407a..f714e7b5 100644 --- a/config/genesis.go +++ b/config/genesis.go @@ -1,66 +1,49 @@ package config import ( - "crypto/sha256" "encoding/hex" log "github.com/sirupsen/logrus" "github.com/vapor/consensus" - "github.com/vapor/crypto" - "github.com/vapor/crypto/ed25519" "github.com/vapor/crypto/ed25519/chainkd" "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" "github.com/vapor/protocol/vm/vmutil" ) -func commitToArguments() (res *[32]byte) { - var fedpegPubkeys []ed25519.PublicKey - var signBlockPubkeys []ed25519.PublicKey - for _, xpub := range consensus.ActiveNetParams.FedpegXPubs { - fedpegPubkeys = append(fedpegPubkeys, xpub.PublicKey()) +func FederationProgrom(c *Config) []byte { + xpubs := c.Federation.Xpubs + fedpegScript, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum) + if err != nil { + log.Panicf("fail to generate federation scirpt for federation: %v", err) } - fedpegScript, _ := vmutil.P2SPMultiSigProgram(fedpegPubkeys, len(fedpegPubkeys)) - for _, xpub := range consensus.ActiveNetParams.SignBlockXPubs { - signBlockPubkeys = append(signBlockPubkeys, xpub.PublicKey()) - } - signBlockScript, _ := vmutil.P2SPMultiSigProgram(signBlockPubkeys, len(signBlockPubkeys)) - - hasher := sha256.New() - hasher.Write(fedpegScript) - hasher.Write(signBlockScript) - resSlice := hasher.Sum(nil) - res = new([32]byte) - copy(res[:], resSlice) - return + return fedpegScript } -func genesisTx() *types.Tx { - +func GenesisTx() *types.Tx { contract, err := hex.DecodeString("00148c9d063ff74ee6d9ffa88d83aeb038068366c4c4") if err != nil { log.Panicf("fail on decode genesis tx output control program") } - coinbaseInput := commitToArguments() + coinbaseInput := FederationProgrom(CommonConfig) + txData := types.TxData{ Version: 1, Inputs: []*types.TxInput{ - // Any consensus-related values that are command-line set can be added here for anti-footgun types.NewCoinbaseInput(coinbaseInput[:]), - //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), + types.NewIntraChainOutput(*consensus.BTMAssetID, consensus.BlockSubsidy(0), contract), }, } return types.NewTx(txData) } func mainNetGenesisBlock() *types.Block { - tx := genesisTx() + tx := GenesisTx() txStatus := bc.NewTransactionStatus() if err := txStatus.SetStatus(0, false); err != nil { log.Panicf(err.Error()) @@ -79,7 +62,7 @@ func mainNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1524549600, + Timestamp: 1524549600000, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -87,26 +70,11 @@ func mainNetGenesisBlock() *types.Block { }, Transactions: []*types.Tx{tx}, } - - var xPrv chainkd.XPrv - if consensus.ActiveNetParams.Signer == "" { - log.Panicf("Signer is empty") - } - copy(xPrv[:], []byte(consensus.ActiveNetParams.Signer)) - msg, _ := block.MarshalText() - sign := xPrv.Sign(msg) - pubHash := crypto.Ripemd160(xPrv.XPub().PublicKey()) - control, err := vmutil.P2WPKHProgram([]byte(pubHash)) - if err != nil { - log.Panicf(err.Error()) - } - block.Proof.Sign = sign - block.Proof.ControlProgram = control return block } func testNetGenesisBlock() *types.Block { - tx := genesisTx() + tx := GenesisTx() txStatus := bc.NewTransactionStatus() if err := txStatus.SetStatus(0, false); err != nil { log.Panicf(err.Error()) @@ -125,7 +93,7 @@ func testNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1528945000, + Timestamp: 1528945000000, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -137,7 +105,7 @@ func testNetGenesisBlock() *types.Block { } func soloNetGenesisBlock() *types.Block { - tx := genesisTx() + tx := GenesisTx() txStatus := bc.NewTransactionStatus() if err := txStatus.SetStatus(0, false); err != nil { log.Panicf(err.Error()) @@ -156,7 +124,7 @@ func soloNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1528945000, + Timestamp: 1528945000000, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -170,8 +138,9 @@ func soloNetGenesisBlock() *types.Block { // GenesisBlock will return genesis block func GenesisBlock() *types.Block { return map[string]func() *types.Block{ - "main": mainNetGenesisBlock, - "test": testNetGenesisBlock, - "solo": soloNetGenesisBlock, + "main": mainNetGenesisBlock, + "test": testNetGenesisBlock, + "solo": soloNetGenesisBlock, + "vapor": soloNetGenesisBlock, }[consensus.ActiveNetParams.Name]() }