OSDN Git Service

Voter reward (#344)
[bytom/vapor.git] / toolbar / common / address.go
index 53b6c9b..d6f7193 100644 (file)
@@ -1,9 +1,12 @@
 package common
 
 import (
+       "errors"
+
        "github.com/vapor/common"
        "github.com/vapor/consensus"
        "github.com/vapor/consensus/segwit"
+       "github.com/vapor/protocol/vm/vmutil"
 )
 
 func GetAddressFromControlProgram(prog []byte) string {
@@ -37,3 +40,25 @@ func buildP2SHAddress(scriptHash []byte) string {
 
        return address.EncodeAddress()
 }
+
+func GetControlProgramFromAddress(address string) ([]byte, error) {
+       decodeaddress, err := common.DecodeAddress(address, &consensus.ActiveNetParams)
+       if err != nil {
+               return nil, err
+       }
+
+       redeemContract := decodeaddress.ScriptAddress()
+       program := []byte{}
+       switch decodeaddress.(type) {
+       case *common.AddressWitnessPubKeyHash:
+               program, err = vmutil.P2WPKHProgram(redeemContract)
+       case *common.AddressWitnessScriptHash:
+               program, err = vmutil.P2WSHProgram(redeemContract)
+       default:
+               return nil, errors.New("Invalid address")
+       }
+       if err != nil {
+               return nil, err
+       }
+       return program, nil
+}