X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=09bcdd9505d7d979086d8c87a2e381df58fe66f8;hb=d6cedc9405e5f5751c8635f59ed3ff6876460776;hp=5bdb7ab5b7c7ea3036ac5210d851b32fb94cace6;hpb=04f789cdbdb8e50511efdf97c900f7f83662eedb;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index 5bdb7ab..09bcdd9 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -6,15 +6,26 @@ var network = Bitcoin.networks.bitcoin; var addressRowTemplate = $("#address-row-template"); + var showIndex = true; + var showAddress = true; + var showPrivKey = true; + var phraseChangeTimeoutEvent = null; var DOM = {}; + DOM.network = $(".network"); + DOM.phraseNetwork = $("#network-phrase"); + DOM.bip44Network = $("#network-bip44"); DOM.phrase = $(".phrase"); DOM.passphrase = $(".passphrase"); DOM.generate = $(".generate"); DOM.rootKey = $(".root-key"); DOM.extendedPrivKey = $(".extended-priv-key"); DOM.extendedPubKey = $(".extended-pub-key"); + DOM.bip32tab = $("#bip32-tab"); + DOM.bip44tab = $("#bip44-tab"); + DOM.bip32panel = $("#bip32"); + DOM.bip44panel = $("#bip44"); DOM.bip32path = $("#bip32-path"); DOM.bip44path = $("#bip44-path"); DOM.bip44purpose = $("#bip44 .purpose"); @@ -32,20 +43,19 @@ DOM.privateKeyToggle = $(".private-key-toggle"); var derivationPath = DOM.bip44path.val(); - var currentPhrase = DOM.phrase.val(); - var currentPassphrase = DOM.passphrase.val(); function init() { // Events - DOM.phrase.on("keyup", delayedPhraseChanged); - DOM.passphrase.on("keyup", delayedPhraseChanged); + DOM.network.on("change", networkChanged); + DOM.phrase.on("input", delayedPhraseChanged); + DOM.passphrase.on("input", delayedPhraseChanged); DOM.generate.on("click", generateClicked); DOM.more.on("click", showMore); - DOM.bip32path.on("keyup", bip32Changed); - DOM.bip44purpose.on("keyup", bip44Changed); - DOM.bip44coin.on("keyup", bip44Changed); - DOM.bip44account.on("keyup", bip44Changed); - DOM.bip44change.on("keyup", bip44Changed); + DOM.bip32path.on("input", bip32Changed); + DOM.bip44purpose.on("input", bip44Changed); + DOM.bip44coin.on("input", bip44Changed); + DOM.bip44account.on("input", bip44Changed); + DOM.bip44change.on("input", bip44Changed); DOM.tab.on("click", tabClicked); DOM.indexToggle.on("click", toggleIndexes); DOM.addressToggle.on("click", toggleAddresses); @@ -57,10 +67,36 @@ // Event handlers - function delayedPhraseChanged() { - if (!hasChanged()) { - return; + function networkChanged(e) { + var n = e.target.value; + if (n == "bitcoin") { + network = Bitcoin.networks.bitcoin; + DOM.bip44coin.val(0); + setBip44DerivationPath(); + enableBip44Tab(); + } + else if (n == "bitcoin-testnet") { + network = Bitcoin.networks.testnet; + DOM.bip44coin.val(1); + setBip44DerivationPath(); + enableBip44Tab(); } + else if (n == "litecoin") { + network = Bitcoin.networks.litecoin; + DOM.bip44coin.val(2); + setBip44DerivationPath(); + enableBip44Tab(); + } + else if (n == "dogecoin") { + network = Bitcoin.networks.dogecoin; + disableBip44Tab(); + } + DOM.phraseNetwork.val(n); + DOM.bip44Network.val(n); + delayedPhraseChanged(); + } + + function delayedPhraseChanged() { hideValidationError(); showPending(); if (phraseChangeTimeoutEvent != null) { @@ -90,9 +126,6 @@ calcBip32Seed(phrase, passphrase, derivationPath); displayBip32Info(); hidePending(); - // Set current state so we only update as needed - currentPhrase = phrase; - currentPassphrase = passphrase; } function generateClicked() { @@ -114,9 +147,7 @@ } function derivationChanged() { - hideValidationError(); - showPending(); - setTimeout(phraseChanged, 50); + delayedPhraseChanged(); } function bip32Changed() { @@ -131,14 +162,17 @@ } function toggleIndexes() { + showIndex = !showIndex; $("td.index span").toggleClass("invisible"); } function toggleAddresses() { + showAddress = !showAddress; $("td.address span").toggleClass("invisible"); } function togglePrivateKeys() { + showPrivKey = !showPrivKey; $("td.privkey span").toggleClass("invisible"); } @@ -174,8 +208,7 @@ function calcBip32Seed(phrase, passphrase, path) { var seed = mnemonic.toSeed(phrase, passphrase); - var seedHash = Bitcoin.crypto.sha256(seed).toString("hex"); - bip32RootKey = Bitcoin.HDNode.fromSeedHex(seedHash, network); + bip32RootKey = Bitcoin.HDNode.fromSeedHex(seed, network); bip32ExtendedKey = bip32RootKey; // Derive the key from the path var pathBits = path.split("/"); @@ -210,6 +243,7 @@ function findPhraseErrors(phrase) { // TODO make this right // Preprocess the words + phrase = mnemonic.normalizeString(phrase); var parts = phrase.split(" "); var proper = []; for (var i=0; i