From 3abab9b0874904f610cfeb7d136e97ca0ebac1e1 Mon Sep 17 00:00:00 2001 From: Ian Coleman Date: Mon, 28 Aug 2017 09:45:38 +1000 Subject: Add a checkbox to switch litecoin key prefixes --- src/index.html | 9 +++++++++ src/js/bitcoinjs-3-1-1.js | 12 ++++++++++- src/js/index.js | 17 ++++++++++++++++ tests.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index 21f070f..a48079e 100644 --- a/src/index.html +++ b/src/index.html @@ -266,6 +266,15 @@ + diff --git a/src/js/bitcoinjs-3-1-1.js b/src/js/bitcoinjs-3-1-1.js index e75e15d..e184686 100644 --- a/src/js/bitcoinjs-3-1-1.js +++ b/src/js/bitcoinjs-3-1-1.js @@ -9649,6 +9649,16 @@ module.exports = { wif: 0xef }, litecoin: { + messagePrefix: '\x19Litecoin Signed Message:\n', + bip32: { + public: 0x0488b21e, + private: 0x0488ade4, + }, + pubKeyHash: 0x30, + scriptHash: 0x32, + wif: 0xb0 + }, + litecoinLtub: { messagePrefix: '\x19Litecoin Signed Message:\n', bip32: { public: 0x019da462, @@ -14827,4 +14837,4 @@ module.exports = { }).call(this,require("buffer").Buffer) },{"bs58check":80,"buffer":4}]},{},[33])(33) -}); \ No newline at end of file +}); diff --git a/src/js/index.js b/src/js/index.js index d9d5db3..80c7fa8 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -14,6 +14,7 @@ var showPubKey = true; var showPrivKey = true; var showQr = false; + var litecoinUseLtub = false; var entropyChangeTimeoutEvent = null; var phraseChangeTimeoutEvent = null; @@ -43,6 +44,8 @@ DOM.generate = $(".generate"); DOM.seed = $(".seed"); DOM.rootKey = $(".root-key"); + DOM.litecoinLtubContainer = $(".litecoin-ltub-container"); + DOM.litecoinUseLtub = $(".litecoin-use-ltub"); DOM.extendedPrivKey = $(".extended-priv-key"); DOM.extendedPubKey = $(".extended-pub-key"); DOM.bip32tab = $("#bip32-tab"); @@ -98,6 +101,7 @@ DOM.generate.on("click", generateClicked); DOM.more.on("click", showMore); DOM.rootKey.on("input", delayedRootKeyChanged); + DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged); DOM.bip32path.on("input", calcForDerivationPath); DOM.bip44account.on("input", calcForDerivationPath); DOM.bip44change.on("input", calcForDerivationPath); @@ -123,6 +127,7 @@ function networkChanged(e) { clearDerivedKeys(); clearAddressesList(); + DOM.litecoinLtubContainer.addClass("hidden"); var networkIndex = e.target.value; var network = networks[networkIndex]; network.onSelect(); @@ -274,6 +279,17 @@ calcForDerivationPath(); } + function litecoinUseLtubChanged() { + litecoinUseLtub = DOM.litecoinUseLtub.prop("checked"); + if (litecoinUseLtub) { + network = bitcoinjs.bitcoin.networks.litecoinLtub; + } + else { + network = bitcoinjs.bitcoin.networks.litecoin; + } + phraseChanged(); + } + function calcForDerivationPath() { clearDerivedKeys(); clearAddressesList(); @@ -1267,6 +1283,7 @@ onSelect: function() { network = bitcoinjs.bitcoin.networks.litecoin; setHdCoin(2); + DOM.litecoinLtubContainer.removeClass("hidden"); }, }, { diff --git a/tests.js b/tests.js index 316a817..f192f99 100644 --- a/tests.js +++ b/tests.js @@ -4216,6 +4216,57 @@ page.open(url, function(status) { }); }, +// Litecoin uses xprv by default, and can optionally be set to ltpv +// github issue 96 +// https://github.com/iancoleman/bip39/issues/96 +// Issue with extended keys on Litecoin +function() { +page.open(url, function(status) { + // set the phrase and coin + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".network option[selected]").removeAttr("selected"); + $(".network option").filter(function() { + return $(this).html() == "LTC - Litecoin"; + }).prop("selected", true); + $(".network").trigger("change"); + $(".phrase").trigger("input"); + }); + // check the extended key is generated correctly + waitForGenerate(function() { + var expected = "xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi"; + var actual = page.evaluate(function() { + return $(".root-key").val(); + }); + if (actual != expected) { + console.log("Litecoin root key does not default to xprv"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + // set litecoin to use ltub + page.evaluate(function() { + $(".addresses").empty(); + $(".litecoin-use-ltub").prop("checked", true); + $(".litecoin-use-ltub").trigger("change"); + }); + waitForGenerate(function() { + var expected = "Ltpv71G8qDifUiNesiPqf6h5V6eQ8ic77oxQiYtawiACjBEx3sTXNR2HGDGnHETYxESjqkMLFBkKhWVq67ey1B2MKQXannUqNy1RZVHbmrEjnEU"; + var actual = page.evaluate(function() { + return $(".root-key").val(); + }); + if (actual != expected) { + console.log("Litecoin root key cannot be set to use ltub"); + 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 -- cgit v1.2.3