"github.com/vapor/protocol/vm/vmutil"
)
-func FederationProgrom(c *Config) []byte {
- pubKeys := chainkd.XPubKeys(c.Federation.Xpubs)
- fedpegScript, err := vmutil.P2SPMultiSigProgram(pubKeys, c.Federation.Quorum)
+// 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
+ derivedXPubs := chainkd.DeriveXPubs(xpubs, FedAddressPath)
+ program, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(derivedXPubs), c.Federation.Quorum)
if err != nil {
- log.Panicf("Failed generate federation scirpt for federation")
+ log.Panicf("fail to generate federation scirpt for federation: %v", err)
}
- scriptHash := crypto.Sha256(fedpegScript)
+ return program
+}
- control, err := vmutil.P2WSHProgram(scriptHash)
+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 program on GenesisArguments: %v", err)
+ log.Panicf("Fail converts scriptHash to witness: %v", err)
}
- return control
+ return wscript
}
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,
types.NewCoinbaseInput(coinbaseInput[:]),
},
Outputs: []*types.TxOutput{
- types.NewIntraChainOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract),
+ types.NewIntraChainOutput(*consensus.BTMAssetID, consensus.BlockSubsidy(0), contract),
},
}
return types.NewTx(txData)
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Timestamp: 1524549600000,
+ Timestamp: 1563344560002,
BlockCommitment: types.BlockCommitment{
TransactionsMerkleRoot: merkleRoot,
TransactionStatusHash: txStatusHash,
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Timestamp: 1528945000000,
+ Timestamp: 1563344560001,
BlockCommitment: types.BlockCommitment{
TransactionsMerkleRoot: merkleRoot,
TransactionStatusHash: txStatusHash,
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Timestamp: 1528945000000,
+ Timestamp: 1563344560000,
BlockCommitment: types.BlockCommitment{
TransactionsMerkleRoot: merkleRoot,
TransactionStatusHash: txStatusHash,
// 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]()
}