diff --git a/js/coin.js b/js/coin.js index 84a1149..269e19b 100644 --- a/js/coin.js +++ b/js/coin.js @@ -247,9 +247,24 @@ } /* convert a wif to a address */ - coinjs.wif2address = function(wif){ + coinjs.wif2address = function(wif, prefix){ var r = coinjs.wif2pubkey(wif); - return {'address':coinjs.pubkey2address(r['pubkey']), 'compressed':r['compressed']}; + var address; + switch (prefix) { + case 'p2wpkh-p2sh': { + address = coinjs.segwitAddress(r['pubkey']).address; + break; + } + case 'p2wpkh': { + address = coinjs.bech32Address(r['pubkey']).address; + break; + } + default: { + address = coinjs.pubkey2address(r['pubkey']); + break; + } + } + return {address, 'compressed':r['compressed']}; } /* decode or validate an address and return the hash */ diff --git a/js/coinbin.js b/js/coinbin.js index 393b63f..2b63ade 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -948,15 +948,22 @@ $(document).ready(function() { }); /* function to determine what we are redeeming from */ - function redeemingFrom(string){ + function redeemingFrom(input){ var r = {}; + var string = input; + var prefix; + // Parse electrum style wif key (Internet Explorer compatible) + if (['p2pkh', 'p2wpkh-p2sh', 'p2wpkh'].indexOf(input.split(':')[0]) !== -1) { + prefix = input.split(':')[0]; + string = input.split(':')[1]; + } var decode = coinjs.addressDecode(string); if(decode.version == coinjs.pub){ // regular address r.addr = string; r.from = 'address'; r.redeemscript = false; } else if (decode.version == coinjs.priv){ // wif key - var a = coinjs.wif2address(string); + var a = coinjs.wif2address(string, prefix); r.addr = a['address']; r.from = 'wif'; r.redeemscript = false;