From: Ian Coleman Date: Tue, 17 Dec 2019 00:44:54 +0000 (+1100) Subject: Generate addresses for P2WSH and P2WSH-P2SH X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=commitdiff_plain;h=f7e9fdf002e7355a122a86a8407b470b56bf3f59 Generate addresses for P2WSH and P2WSH-P2SH --- diff --git a/src/index.html b/src/index.html index 61fe022..64c25f4 100644 --- a/src/index.html +++ b/src/index.html @@ -509,8 +509,8 @@ diff --git a/src/js/index.js b/src/js/index.js index db47412..5fb0c47 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1152,12 +1152,19 @@ address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) } else if (isP2wsh) { - // TODO - address = ""; + // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/addresses.js#L71 + // This is a 1-of-1 + var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); + var scriptPubKey = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript)); + address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network); } else if (isP2wshInP2sh) { - // TODO - address = ""; + // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/transactions.js#L183 + // This is a 1-of-1 + var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); + var redeemScript = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript)); + var scriptPubKey = bitcoinjs.bitcoin.script.scriptHash.output.encode(bitcoinjs.bitcoin.crypto.hash160(redeemScript)); + address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network) } } diff --git a/tests/spec/tests.js b/tests/spec/tests.js index fc71353..bbc1f57 100644 --- a/tests/spec/tests.js +++ b/tests/spec/tests.js @@ -3701,7 +3701,7 @@ it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) { driver.executeScript(function() { $(".bip141-semantics option[selected]").removeAttr("selected"); $(".bip141-semantics option").filter(function(i,e) { - return $(e).html() == "P2WSH"; + return $(e).html() == "P2WSH (1-of-1 multisig)"; }).prop("selected", true); $(".bip141-semantics").trigger("change"); }); @@ -3712,8 +3712,10 @@ it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) { .getAttribute("value") .then(function(rootKey) { expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6"); - // TODO check first address - done(); + getFirstAddress(function(address) { + expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r"); + done(); + }); }) }); }); @@ -3725,7 +3727,7 @@ it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) driver.executeScript(function() { $(".bip141-semantics option[selected]").removeAttr("selected"); $(".bip141-semantics option").filter(function(i,e) { - return $(e).html() == "P2WSH nested in P2SH"; + return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)"; }).prop("selected", true); $(".bip141-semantics").trigger("change"); }); @@ -3736,8 +3738,10 @@ it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) .getAttribute("value") .then(function(rootKey) { expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe"); - // TODO check first address - done(); + getFirstAddress(function(address) { + expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G"); + done(); + }); }) }); }); @@ -3750,7 +3754,7 @@ it('Uses Vprv for bitcoin testnet p2wsh', function(done) { driver.executeScript(function() { $(".bip141-semantics option[selected]").removeAttr("selected"); $(".bip141-semantics option").filter(function(i,e) { - return $(e).html() == "P2WSH"; + return $(e).html() == "P2WSH (1-of-1 multisig)"; }).prop("selected", true); $(".bip141-semantics").trigger("change"); }); @@ -3774,7 +3778,7 @@ it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) { driver.executeScript(function() { $(".bip141-semantics option[selected]").removeAttr("selected"); $(".bip141-semantics option").filter(function(i,e) { - return $(e).html() == "P2WSH nested in P2SH"; + return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)"; }).prop("selected", true); $(".bip141-semantics").trigger("change"); });