From: Ian Coleman Date: Fri, 1 Sep 2017 02:27:38 +0000 (+1000) Subject: Allow P2WPKH nested in P2SH addresses on BIP32 tab X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=commitdiff_plain;h=88311463c74f022177a21c5d88f8928dc8007d8b Allow P2WPKH nested in P2SH addresses on BIP32 tab --- diff --git a/src/index.html b/src/index.html index e204095..905f9ea 100644 --- a/src/index.html +++ b/src/index.html @@ -408,6 +408,13 @@ Use hardened addresses +
+
+ +
diff --git a/src/js/index.js b/src/js/index.js index 80e6609..9bd77b9 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -73,6 +73,7 @@ DOM.bip49change = $("#bip49 .change"); DOM.generatedStrength = $(".generate-container .strength"); DOM.hardenedAddresses = $(".hardened-addresses"); + DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh"); DOM.addresses = $(".addresses"); DOM.rowsToAdd = $(".rows-to-add"); DOM.more = $(".more"); @@ -109,6 +110,7 @@ DOM.bip49change.on("input", calcForDerivationPath); DOM.tab.on("shown.bs.tab", calcForDerivationPath); DOM.hardenedAddresses.on("change", calcForDerivationPath); + DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath); DOM.indexToggle.on("click", toggleIndexes); DOM.addressToggle.on("click", toggleAddresses); DOM.publicKeyToggle.on("click", togglePublicKeys); @@ -637,7 +639,7 @@ var self = this; this.shouldGenerate = true; var useHardenedAddresses = DOM.hardenedAddresses.prop("checked"); - var isP2wpkhNestedInP2sh = bip49TabSelected(); + var isP2wpkhNestedInP2sh = bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh()); var p2wpkhNestedInP2shAvailable = networkHasBip49(); function init() { @@ -1164,6 +1166,10 @@ return DOM.bip32tab.hasClass("active"); } + function useP2wpkhNestedInP2sh() { + return DOM.useP2wpkhNestedInP2sh.prop("checked"); + } + function networkHasBip49() { return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable; } @@ -1180,11 +1186,14 @@ function showP2wpkhNestedInP2shAvailable() { DOM.bip49unavailable.addClass("hidden"); DOM.bip49available.removeClass("hidden"); + DOM.useP2wpkhNestedInP2sh.prop("disabled", false); } function showP2wpkhNestedInP2shUnavailable() { DOM.bip49available.addClass("hidden"); DOM.bip49unavailable.removeClass("hidden"); + DOM.useP2wpkhNestedInP2sh.prop("disabled", true); + DOM.useP2wpkhNestedInP2sh.prop("checked", false); } var networks = [ diff --git a/tests.js b/tests.js index f192f99..8965f80 100644 --- a/tests.js +++ b/tests.js @@ -4267,6 +4267,45 @@ page.open(url, function(status) { }); }, +// BIP32 tab can use P2WPKH Nested In P2SH +// github issue 91 part 2 +// https://github.com/iancoleman/bip39/issues/91 +// generate new addresses from xpub? +function() { +page.open(url, function(status) { + // set the xpub and coin and select bip32 tab with p2wpkh addresses + page.evaluate(function() { + // use p2wpkh addresses + $(".p2wpkh-nested-in-p2sh").prop("checked", true); + // use bip32 tab + $("#bip32-tab a").click(); + // use testnet + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "BTC - Bitcoin Testnet"; + }).prop("selected", true); + $(".network").trigger("change"); + // Set root xpub to BIP49 official test vector account 0 + $(".root-key").val("tpubDD7tXK8KeQ3YY83yWq755fHY2JW8Ha8Q765tknUM5rSvjPcGWfUppDFMpQ1ScziKfW3ZNtZvAD7M3u7bSs7HofjTD3KP3YxPK7X6hwV8Rk2"); + $(".root-key").trigger("input"); + }); + // check the address is generated correctly + waitForGenerate(function() { + var expected = "2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2"; + var actual = page.evaluate(function() { + return $(".address:first").text(); + }); + if (actual != expected) { + console.log("BIP32 tab cannot generate P2WPKH Nested In P2SH addresses"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + // If you wish to add more tests, do so here... // Here is a blank test template