OSDN Git Service

refatcor(feaderation): use P2WSHProgram for federation program on sidechain (#233)
[bytom/vapor.git] / config / genesis.go
index 431cf8e..8cd5325 100644 (file)
@@ -6,20 +6,32 @@ 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 {
+func FederationPMultiSigScript(c *Config) []byte {
        xpubs := c.Federation.Xpubs
-       fedpegScript, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum)
+       program, 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
+       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 +40,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,