X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=config%2Fgenesis.go;h=a3b2f7e2a91ccaf1099f626dadb2e423403e60b2;hb=refs%2Fheads%2Frevert-357-master;hp=431cf8eb924598a7cbc99cdf22be02b002db02ab;hpb=5433e070df1df86ec7f32aaa81fe5dd16da92480;p=bytom%2Fvapor.git diff --git a/config/genesis.go b/config/genesis.go index 431cf8eb..a3b2f7e2 100644 --- a/config/genesis.go +++ b/config/genesis.go @@ -6,20 +6,42 @@ import ( log "github.com/sirupsen/logrus" "github.com/vapor/consensus" + "github.com/vapor/crypto" "github.com/vapor/crypto/ed25519/chainkd" "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" "github.com/vapor/protocol/vm/vmutil" ) -func FederationProgrom(c *Config) []byte { +// FedAddressPath is used to derive federation root xpubs for signing cross-chain txs +var FedAddressPath = [][]byte{ + []byte{0x2C, 0x00, 0x00, 0x00}, + []byte{0x99, 0x00, 0x00, 0x00}, + []byte{0x01, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00}, + []byte{0x01, 0x00, 0x00, 0x00}, +} + +func FederationPMultiSigScript(c *Config) []byte { xpubs := c.Federation.Xpubs - fedpegScript, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum) + derivedXPubs := chainkd.DeriveXPubs(xpubs, FedAddressPath) + program, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(derivedXPubs), c.Federation.Quorum) if err != nil { log.Panicf("fail to generate federation scirpt for federation: %v", err) } - return fedpegScript + return program +} + +func FederationWScript(c *Config) []byte { + script := FederationPMultiSigScript(c) + scriptHash := crypto.Sha256(script) + wscript, err := vmutil.P2WSHProgram(scriptHash) + if err != nil { + log.Panicf("Fail converts scriptHash to witness: %v", err) + } + + return wscript } func GenesisTx() *types.Tx { @@ -28,7 +50,7 @@ func GenesisTx() *types.Tx { log.Panicf("fail on decode genesis tx output control program") } - coinbaseInput := FederationProgrom(CommonConfig) + coinbaseInput := FederationWScript(CommonConfig) txData := types.TxData{ Version: 1, @@ -62,7 +84,7 @@ func mainNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1561600800002, + Timestamp: 1563344560002, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -93,7 +115,7 @@ func testNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1561600800001, + Timestamp: 1563344560001, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -124,7 +146,7 @@ func soloNetGenesisBlock() *types.Block { BlockHeader: types.BlockHeader{ Version: 1, Height: 0, - Timestamp: 1561600800000, + Timestamp: 1563344560000, BlockCommitment: types.BlockCommitment{ TransactionsMerkleRoot: merkleRoot, TransactionStatusHash: txStatusHash, @@ -138,9 +160,8 @@ 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, - "vapor": soloNetGenesisBlock, + "main": mainNetGenesisBlock, + "test": testNetGenesisBlock, + "solo": soloNetGenesisBlock, }[consensus.ActiveNetParams.Name]() }