X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=toolbar%2Fcommon%2Faddress.go;h=d6f7193ac32d99d36f9b7c22dc64ddb9fc83bc35;hp=53b6c9b5550e1219f7459a598d16dfc6733dff33;hb=1362b9a101258e2f2a59f79877231ac6b256f932;hpb=faa1881b5d4ad5e6f8409b6c4aaecf6aa7f8a946 diff --git a/toolbar/common/address.go b/toolbar/common/address.go index 53b6c9b5..d6f7193a 100644 --- a/toolbar/common/address.go +++ b/toolbar/common/address.go @@ -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 +}