log "github.com/sirupsen/logrus"
"github.com/vapor/consensus"
+ "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 {
+ 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)
+ }
+
+ return fedpegScript
+}
+
func GenesisTx() *types.Tx {
contract, err := hex.DecodeString("00148c9d063ff74ee6d9ffa88d83aeb038068366c4c4")
if err != nil {
log.Panicf("fail on decode genesis tx output control program")
}
+ coinbaseInput := FederationProgrom(CommonConfig)
+
txData := types.TxData{
Version: 1,
Inputs: []*types.TxInput{
- types.NewCoinbaseInput([]byte("Information is power. -- Jan/11/2013. Computing is power. -- Apr/24/2018.")),
+ types.NewCoinbaseInput(coinbaseInput[:]),
},
Outputs: []*types.TxOutput{
- types.NewTxOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract),
+ types.NewIntraChainOutput(*consensus.BTMAssetID, consensus.BlockSubsidy(0), contract),
},
}
return types.NewTx(txData)
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Nonce: 9253507043297,
- Timestamp: 1524549600,
- Bits: 2161727821137910632,
+ Timestamp: 1524549600000,
BlockCommitment: types.BlockCommitment{
TransactionsMerkleRoot: merkleRoot,
TransactionStatusHash: txStatusHash,
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Nonce: 9253507043297,
- Timestamp: 1528945000,
- Bits: 2305843009214532812,
+ Timestamp: 1528945000000,
BlockCommitment: types.BlockCommitment{
TransactionsMerkleRoot: merkleRoot,
TransactionStatusHash: txStatusHash,
BlockHeader: types.BlockHeader{
Version: 1,
Height: 0,
- Nonce: 9253507043297,
- Timestamp: 1528945000,
- Bits: 2305843009214532812,
+ Timestamp: 1528945000000,
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,
+ "main": mainNetGenesisBlock,
+ "test": testNetGenesisBlock,
+ "solo": soloNetGenesisBlock,
+ "vapor": soloNetGenesisBlock,
}[consensus.ActiveNetParams.Name]()
}