X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=dea2ceb2411e94865972980e0c5ee844c1aa0e68;hp=502bbdff3d4f2b5965c6c16360d085f5c446c1c1;hb=4735db1064dc75b71e93eedafa988db037687c93;hpb=ae008be5db783176cd97d7a78b33c97a08e284df diff --git a/src/js/index.js b/src/js/index.js index 502bbdf..dea2ceb 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -23,6 +23,7 @@ var generationProcesses = []; var DOM = {}; + DOM.privacyScreenToggle = $(".privacy-screen-toggle"); DOM.network = $(".network"); DOM.bip32Client = $("#bip32-client"); DOM.phraseNetwork = $("#network-phrase"); @@ -40,6 +41,7 @@ DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes"); DOM.entropyChecksum = DOM.entropyContainer.find(".checksum"); DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length"); + DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning"); DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); DOM.phrase = $(".phrase"); DOM.passphrase = $(".passphrase"); @@ -76,6 +78,8 @@ DOM.bip49accountXprv = $("#bip49 .account-xprv"); DOM.bip49accountXpub = $("#bip49 .account-xpub"); DOM.bip49change = $("#bip49 .change"); + DOM.bip84unavailable = $("#bip84 .unavailable"); + DOM.bip84available = $("#bip84 .available"); DOM.bip84path = $("#bip84-path"); DOM.bip84purpose = $("#bip84 .purpose"); DOM.bip84coin = $("#bip84 .coin"); @@ -88,9 +92,10 @@ DOM.bip141path = $("#bip141-path"); DOM.bip141semantics = $(".bip141-semantics"); DOM.generatedStrength = $(".generate-container .strength"); + DOM.generatedStrengthWarning = $(".generate-container .warning"); DOM.hardenedAddresses = $(".hardened-addresses"); - DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container"); - DOM.useBitpayAddresses = $(".use-bitpay-addresses"); + DOM.bitcoinCashAddressTypeContainer = $(".bch-addr-type-container"); + DOM.bitcoinCashAddressType = $("[name=bch-addr-type]") DOM.useBip38 = $(".use-bip38"); DOM.bip38Password = $(".bip38-password"); DOM.addresses = $(".addresses"); @@ -114,6 +119,8 @@ function init() { // Events + DOM.privacyScreenToggle.on("change", privacyScreenToggled); + DOM.generatedStrength.on("change", generatedStrengthChanged); DOM.network.on("change", networkChanged); DOM.bip32Client.on("change", bip32ClientChanged); DOM.useEntropy.on("change", setEntropyVisibility); @@ -144,7 +151,7 @@ DOM.privateKeyToggle.on("click", togglePrivateKeys); DOM.csvTab.on("click", updateCsv); DOM.languages.on("click", languageChanged); - DOM.useBitpayAddresses.on("change", useBitpayAddressesChange); + DOM.bitcoinCashAddressType.on("change", bitcoinCashAddressTypeChange); setQrEvents(DOM.showQrEls); disableForms(); hidePending(); @@ -155,21 +162,25 @@ // Event handlers + function generatedStrengthChanged() { + var strength = parseInt(DOM.generatedStrength.val()); + if (strength < 12) { + DOM.generatedStrengthWarning.removeClass("hidden"); + } + else { + DOM.generatedStrengthWarning.addClass("hidden"); + } + } + function networkChanged(e) { clearDerivedKeys(); clearAddressesList(); DOM.litecoinLtubContainer.addClass("hidden"); - DOM.useBitpayAddressesContainer.addClass("hidden"); + DOM.bitcoinCashAddressTypeContainer.addClass("hidden"); var networkIndex = e.target.value; var network = networks[networkIndex]; network.onSelect(); - if (network.segwitAvailable) { - adjustNetworkForSegwit(); - showSegwitAvailable(); - } - else { - showSegwitUnavailable(); - } + adjustNetworkForSegwit(); if (seed != null) { phraseChanged(); } @@ -359,8 +370,11 @@ showPending(); // Don't show segwit if it's selected but network doesn't support it if (segwitSelected() && !networkHasSegwit()) { + showSegwitUnavailable(); + hidePending(); return; } + showSegwitAvailable(); // Get the derivation path var derivationPath = getDerivationPath(); var errorText = findDerivationPathErrors(derivationPath); @@ -411,8 +425,7 @@ }, 50); } - function useBitpayAddressesChange() { - setBitcoinCashNetworkValues(); + function bitcoinCashAddressTypeChange() { phraseChanged(); } @@ -436,6 +449,17 @@ $("td.privkey span").toggleClass("invisible"); } + function privacyScreenToggled() { + // private-data contains elements added to DOM at runtime + // so catch all by adding visual privacy class to the root of the DOM + if (DOM.privacyScreenToggle.prop("checked")) { + $("body").addClass("visual-privacy"); + } + else { + $("body").removeClass("visual-privacy"); + } + } + // Private methods function generateRandomPhrase() { @@ -467,6 +491,37 @@ } function calcBip32RootKeyFromBase58(rootKeyBase58) { + // try parsing with various segwit network params since this extended + // key may be from any one of them. + if (networkHasSegwit()) { + var n = network; + if ("baseNetwork" in n) { + n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + } + // try parsing using base network params + try { + bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); + return; + } + catch (e) {} + // try parsing using p2wpkh params + if ("p2wpkh" in n) { + try { + bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + return; + } + catch (e) {} + } + // try parsing using p2wpkh-in-p2sh network params + if ("p2wpkhInP2sh" in n) { + try { + bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + return; + } + catch (e) {} + } + } + // try the network params as currently specified bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); } @@ -540,6 +595,37 @@ } function validateRootKey(rootKeyBase58) { + // try various segwit network params since this extended key may be from + // any one of them. + if (networkHasSegwit()) { + var n = network; + if ("baseNetwork" in n) { + n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + } + // try parsing using base network params + try { + bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); + return ""; + } + catch (e) {} + // try parsing using p2wpkh params + if ("p2wpkh" in n) { + try { + bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + return ""; + } + catch (e) {} + } + // try parsing using p2wpkh-in-p2sh network params + if ("p2wpkhInP2sh" in n) { + try { + bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + return ""; + } + catch (e) {} + } + } + // try the network params as currently specified try { bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); } @@ -801,7 +887,7 @@ var keyPair = key.keyPair; var useUncompressed = useBip38; if (useUncompressed) { - keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false }); + keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false }); } // get address var address = keyPair.getAddress().toString(); @@ -809,7 +895,7 @@ var hasPrivkey = !key.isNeutered(); var privkey = "NA"; if (hasPrivkey) { - privkey = keyPair.toWIF(network); + privkey = keyPair.toWIF(); // BIP38 encode private key if required if (useBip38) { privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) { @@ -824,7 +910,14 @@ indexText = indexText + "'"; } // Ethereum values are different - if (networks[DOM.network.val()].name == "ETH - Ethereum") { + if ((networks[DOM.network.val()].name == "ETH - Ethereum") + || (networks[DOM.network.val()].name == "ETC - Ethereum Classic") + || (networks[DOM.network.val()].name == "PIRL - Pirl") + || (networks[DOM.network.val()].name == "MIX - MIX") + || (networks[DOM.network.val()].name == "MUSIC - Musicoin") + || (networks[DOM.network.val()].name == "POA - Poa") + || (networks[DOM.network.val()].name == "EXP - Expanse") + || (networks[DOM.network.val()].name == "CLO - Callisto")) { var privKeyBuffer = keyPair.d.toBuffer(32); privkey = privKeyBuffer.toString('hex'); var addressBuffer = ethUtil.privateToAddress(privKeyBuffer); @@ -839,6 +932,16 @@ privkey = convertRipplePriv(privkey); address = convertRippleAdrr(address); } + // Bitcoin Cash address format may vary + if (networks[DOM.network.val()].name == "BCH - Bitcoin Cash") { + var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val(); + if (bchAddrType == "cashaddr") { + address = bchaddr.toCashAddress(address); + } + else if (bchAddrType == "bitpay") { + address = bchaddr.toBitpayAddress(address); + } + } // Segwit addresses are different if (isSegwit) { if (!segwitAvailable) { @@ -1142,7 +1245,7 @@ function wordArrayToPhrase(words) { var phrase = words.join(" "); var language = getLanguageFromPhrase(phrase); - if (language == "japanese" || language == "korean") { + if (language == "japanese") { phrase = words.join("\u3000"); } return phrase; @@ -1178,6 +1281,17 @@ mnemonicLength = parseInt(mnemonicLength); var numberOfBits = 32 * mnemonicLength / 3; bits = bits.substring(0, numberOfBits); + // show warning for weak entropy override + if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) { + DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden"); + } + else { + DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); + } + } + else { + // hide warning for weak entropy override + DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); } // Discard trailing entropy var bitsToUse = Math.floor(bits.length / 32) * 32; @@ -1358,7 +1472,20 @@ } function networkHasSegwit() { - return networks[DOM.network.val()].segwitAvailable; + var n = network; + if ("baseNetwork" in network) { + n = bitcoinjs.bitcoin.networks[network.baseNetwork]; + } + // check if only p2wpkh params are required + if (p2wpkhSelected()) { + return "p2wpkh" in n; + } + // check if only p2wpkh-in-p2sh params are required + else if (p2wpkhInP2shSelected()) { + return "p2wpkhInP2sh" in n; + } + // require both if it's unclear which params are required + return "p2wpkh" in n && "p2wpkhInP2sh" in n; } function bip49TabSelected() { @@ -1382,6 +1509,8 @@ function showSegwitAvailable() { DOM.bip49unavailable.addClass("hidden"); DOM.bip49available.removeClass("hidden"); + DOM.bip84unavailable.addClass("hidden"); + DOM.bip84available.removeClass("hidden"); DOM.bip141unavailable.addClass("hidden"); DOM.bip141available.removeClass("hidden"); } @@ -1389,23 +1518,12 @@ function showSegwitUnavailable() { DOM.bip49available.addClass("hidden"); DOM.bip49unavailable.removeClass("hidden"); + DOM.bip84available.addClass("hidden"); + DOM.bip84unavailable.removeClass("hidden"); DOM.bip141available.addClass("hidden"); DOM.bip141unavailable.removeClass("hidden"); } - function useBitpayAddresses() { - return !(DOM.useBitpayAddresses.prop("checked")); - } - - function setBitcoinCashNetworkValues() { - if (useBitpayAddresses()) { - network = bitcoinjs.bitcoin.networks.bitcoin; - } - else { - network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay; - } - } - function adjustNetworkForSegwit() { // If segwit is selected the xpub/xprv prefixes need to be adjusted // to avoid accidentally importing BIP49 xpub to BIP44 watch only @@ -1514,34 +1632,113 @@ } var networks = [ + { + name: "AC - Asiacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.asiacoin; + setHdCoin(51); + }, + }, + { + name: "ACC - Adcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.adcoin; + setHdCoin(161); + }, + }, + { + name: "AUR - Auroracoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.auroracoin; + setHdCoin(85); + }, + }, { name: "AXE - Axe", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.axe; - setHdCoin(0); + setHdCoin(4242); + }, + }, + { + name: "ANON - ANON", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.anon; + setHdCoin(220); + }, + }, + { + name: "BCA - Bitcoin Atom", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.atom; + setHdCoin(185); }, }, { name: "BCH - Bitcoin Cash", - segwitAvailable: false, onSelect: function() { - DOM.useBitpayAddressesContainer.removeClass("hidden"); - setBitcoinCashNetworkValues(); + DOM.bitcoinCashAddressTypeContainer.removeClass("hidden"); setHdCoin(145); }, }, + { + name: "BEET - Beetlecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.beetlecoin; + setHdCoin(800); + }, + }, + { + name: "BELA - Belacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.belacoin; + setHdCoin(73); + }, + }, { name: "BLK - BlackCoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.blackcoin; setHdCoin(10); }, }, + { + name: "BND - Blocknode", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.blocknode; + setHdCoin(2941); + }, + }, + { + name: "tBND - Blocknode Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.blocknode_testnet; + setHdCoin(1); + }, + }, + { + name: "BRIT - Britcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.britcoin; + setHdCoin(70); + }, + }, + { + name: "BSD - Bitsend", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitsend; + setHdCoin(91); + }, + }, + { + name: "BTA - Bata", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bata; + setHdCoin(89); + }, + }, { name: "BTC - Bitcoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoin; setHdCoin(0); @@ -1549,274 +1746,947 @@ }, { name: "BTC - Bitcoin Testnet", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.testnet; setHdCoin(1); }, }, - { - name: "BTG - Bitcoin Gold", - segwitAvailable: true, + { + name: "BITG - Bitcoin Green", onSelect: function() { - network = bitcoinjs.bitcoin.networks.bgold; - setHdCoin(0); + network = bitcoinjs.bitcoin.networks.bitcoingreen; + setHdCoin(222); }, }, { - name: "CLAM - Clams", - segwitAvailable: false, + name: "BTCP - Bitcoin Private", onSelect: function() { - network = bitcoinjs.bitcoin.networks.clam; - setHdCoin(23); + network = bitcoinjs.bitcoin.networks.bitcoinprivate; + setHdCoin(183); }, }, { - name: "CRW - Crown", - segwitAvailable: false, + name: "BTCZ - Bitcoinz", onSelect: function() { - network = bitcoinjs.bitcoin.networks.crown; - setHdCoin(72); + network = bitcoinjs.bitcoin.networks.bitcoinz; + setHdCoin(177); }, }, { - name: "DASH - Dash", - segwitAvailable: false, + name: "BTDX - BitCloud", onSelect: function() { - network = bitcoinjs.bitcoin.networks.dash; - setHdCoin(5); + network = bitcoinjs.bitcoin.networks.bitcloud; + setHdCoin(218); }, }, { - name: "DASH - Dash Testnet", - segwitAvailable: false, + name: "BTG - Bitcoin Gold", onSelect: function() { - network = bitcoinjs.bitcoin.networks.dashtn; - setHdCoin(1); + network = bitcoinjs.bitcoin.networks.bgold; + setHdCoin(156); }, }, { - name: "DNR - Denarius", - segwitAvailable: false, + name: "BTX - Bitcore", onSelect: function() { - network = bitcoinjs.bitcoin.networks.denarius; - setHdCoin(116); + network = bitcoinjs.bitcoin.networks.bitcore; + setHdCoin(160); }, }, { - name: "NEBL - Neblio", - segwitAvailable: false, + name: "CCN - Cannacoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.neblio; - setHdCoin(146); + network = bitcoinjs.bitcoin.networks.cannacoin; + setHdCoin(19); }, }, { - name: "DOGE - Dogecoin", - segwitAvailable: false, + name: "CESC - Cryptoescudo", onSelect: function() { - network = bitcoinjs.bitcoin.networks.dogecoin; - setHdCoin(3); + network = bitcoinjs.bitcoin.networks.cannacoin; + setHdCoin(111); }, }, { - name: "ETH - Ethereum", - segwitAvailable: false, + name: "CDN - Canadaecoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.bitcoin; - setHdCoin(60); + network = bitcoinjs.bitcoin.networks.canadaecoin; + setHdCoin(34); }, }, { - name: "FJC - Fujicoin", - segwitAvailable: false, + name: "CLAM - Clams", onSelect: function() { - network = bitcoinjs.bitcoin.networks.fujicoin; - setHdCoin(75); + network = bitcoinjs.bitcoin.networks.clam; + setHdCoin(23); }, }, { - name: "GAME - GameCredits", + name: "CLO - Callisto", segwitAvailable: false, onSelect: function() { - network = bitcoinjs.bitcoin.networks.game; - setHdCoin(101); + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(820); }, }, { - name: "JBS - Jumbucks", - segwitAvailable: false, + name: "CLUB - Clubcoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.jumbucks; - setHdCoin(26); + network = bitcoinjs.bitcoin.networks.clubcoin; + setHdCoin(79); }, }, { - name: "KMD - Komodo", - bip49available: false, + name: "CMP - Compcoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.komodo; - setHdCoin(141); + network = bitcoinjs.bitcoin.networks.compcoin; + setHdCoin(71); }, }, { - name: "LTC - Litecoin", - segwitAvailable: true, + name: "CRAVE - Crave", onSelect: function() { - network = bitcoinjs.bitcoin.networks.litecoin; - setHdCoin(2); - DOM.litecoinLtubContainer.removeClass("hidden"); + network = bitcoinjs.bitcoin.networks.crave; + setHdCoin(186); }, }, { - name: "MAZA - Maza", - segwitAvailable: false, + name: "CRW - Crown", onSelect: function() { - network = bitcoinjs.bitcoin.networks.maza; - setHdCoin(13); + network = bitcoinjs.bitcoin.networks.crown; + setHdCoin(72); }, }, { - name: "MONA - Monacoin", - segwitAvailable: true, + name: "DASH - Dash", onSelect: function() { - network = bitcoinjs.bitcoin.networks.monacoin, - setHdCoin(22); + network = bitcoinjs.bitcoin.networks.dash; + setHdCoin(5); }, }, { - name: "NMC - Namecoin", - segwitAvailable: false, + name: "DASH - Dash Testnet", onSelect: function() { - network = bitcoinjs.bitcoin.networks.namecoin; - setHdCoin(7); + network = bitcoinjs.bitcoin.networks.dashtn; + setHdCoin(1); }, }, { - name: "ONX - Onixcoin", - segwitAvailable: false, + name: "DFC - Defcoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.onixcoin; - setHdCoin(174); + network = bitcoinjs.bitcoin.networks.defcoin; + setHdCoin(1337); }, }, { - name: "PIVX - PIVX", - segwitAvailable: false, + name: "DGB - Digibyte", onSelect: function() { - network = bitcoinjs.bitcoin.networks.pivx; - setHdCoin(119); + network = bitcoinjs.bitcoin.networks.digibyte; + setHdCoin(20); }, }, { - name: "PIVX - PIVX Testnet", - segwitAvailable: false, + name: "DGC - Digitalcoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.pivxtestnet; - setHdCoin(1); + network = bitcoinjs.bitcoin.networks.digitalcoin; + setHdCoin(18); }, }, { - name: "PPC - Peercoin", - segwitAvailable: false, + name: "DMD - Diamond", onSelect: function() { - network = bitcoinjs.bitcoin.networks.peercoin; - setHdCoin(6); + network = bitcoinjs.bitcoin.networks.diamond; + setHdCoin(152); }, }, { - name: "SDC - ShadowCash", - segwitAvailable: false, + name: "DNR - Denarius", onSelect: function() { - network = bitcoinjs.bitcoin.networks.shadow; - setHdCoin(35); + network = bitcoinjs.bitcoin.networks.denarius; + setHdCoin(116); }, }, { - name: "SDC - ShadowCash Testnet", - segwitAvailable: false, + name: "DOGE - Dogecoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.shadowtn; - setHdCoin(1); + network = bitcoinjs.bitcoin.networks.dogecoin; + setHdCoin(3); }, }, { - name: "SLM - Slimcoin", - segwitAvailable: false, + name: "ECN - Ecoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.slimcoin; - setHdCoin(63); + network = bitcoinjs.bitcoin.networks.ecoin; + setHdCoin(115); }, }, { - name: "SLM - Slimcoin Testnet", - segwitAvailable: false, + name: "EDRC - Edrcoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.slimcointn; - setHdCoin(111); + network = bitcoinjs.bitcoin.networks.edrcoin; + setHdCoin(56); }, }, { - name: "USNBT - NuBits", - segwitAvailable: false, + name: "EFL - Egulden", onSelect: function() { - network = bitcoinjs.bitcoin.networks.nubits; - setHdCoin(12); + network = bitcoinjs.bitcoin.networks.egulden; + setHdCoin(78); }, }, { - name: "VIA - Viacoin", - segwitAvailable: false, + name: "EMC2 - Einsteinium", onSelect: function() { - network = bitcoinjs.bitcoin.networks.viacoin; - setHdCoin(14); + network = bitcoinjs.bitcoin.networks.einsteinium; + setHdCoin(41); }, }, { - name: "VIA - Viacoin Testnet", - segwitAvailable: false, + name: "ERC - Europecoin", onSelect: function() { - network = bitcoinjs.bitcoin.networks.viacointestnet; - setHdCoin(1); + network = bitcoinjs.bitcoin.networks.europecoin; + setHdCoin(151); }, }, { - name: "XMY - Myriadcoin", + name: "ETC - Ethereum Classic", segwitAvailable: false, onSelect: function() { - network = bitcoinjs.bitcoin.networks.myriadcoin; - setHdCoin(90); + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(61); }, }, { - name: "XRP - Ripple", - segwitAvailable: false, + name: "ETH - Ethereum", onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoin; - setHdCoin(144); + setHdCoin(60); }, }, - ] - - var clients = [ { - name: "Bitcoin Core", + name: "EXCL - Exclusivecoin", onSelect: function() { - DOM.bip32path.val("m/0'/0'"); - DOM.hardenedAddresses.prop('checked', true); + network = bitcoinjs.bitcoin.networks.exclusivecoin; + setHdCoin(190); }, }, { - name: "blockchain.info", + name: "EXCC - ExchangeCoin", onSelect: function() { - DOM.bip32path.val("m/44'/0'/0'"); - DOM.hardenedAddresses.prop('checked', false); + network = bitcoinjs.bitcoin.networks.exchangecoin; + setHdCoin(0); }, }, { - name: "MultiBit HD", + name: "EXP - Expanse", + segwitAvailable: false, onSelect: function() { - DOM.bip32path.val("m/0'/0"); + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(40); + }, + }, + { + name: "FJC - Fujicoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.fujicoin; + setHdCoin(75); + }, + }, + { + name: "FLASH - Flashcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.flashcoin; + setHdCoin(120); + }, + }, + { + name: "FRST - Firstcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.firstcoin; + setHdCoin(167); + }, + }, + { + name: "FTC - Feathercoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.feathercoin; + setHdCoin(8); + }, + }, + { + name: "GAME - GameCredits", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.game; + setHdCoin(101); + }, + }, + { + name: "GBX - Gobyte", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gobyte; + setHdCoin(176); + }, + }, + { + name: "GCR - GCRCoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gcr; + setHdCoin(79); + }, + }, + { + name: "GRC - Gridcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gridcoin; + setHdCoin(84); + }, + }, + { + name: "HNC - Helleniccoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.helleniccoin; + setHdCoin(168); + }, + }, + { + name: "HUSH - Hush", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.hush; + setHdCoin(197); + }, + }, + { + name: "INSN - Insane", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.insane; + setHdCoin(68); + }, + }, + { + name: "IOP - Iop", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.iop; + setHdCoin(66); + }, + }, + { + name: "IXC - Ixcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ixcoin; + setHdCoin(86); + }, + }, + { + name: "JBS - Jumbucks", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.jumbucks; + setHdCoin(26); + }, + }, + { + name: "KMD - Komodo", + bip49available: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.komodo; + setHdCoin(141); + }, + }, + { + name: "KOBO - Kobocoin", + bip49available: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.kobocoin; + setHdCoin(196); + }, + }, + { + name: "LBC - Library Credits", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lbry; + setHdCoin(140); + }, + }, + { + name: "LCC - Litecoincash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecoincash; + setHdCoin(192); + }, + }, + { + name: "LDCN - Landcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.landcoin; + setHdCoin(63); + }, + }, + { + name: "LINX - Linx", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.linx; + setHdCoin(114); + }, + }, + { + name: "LTC - Litecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecoin; + setHdCoin(2); + DOM.litecoinLtubContainer.removeClass("hidden"); + }, + }, + { + name: "LTZ - LitecoinZ", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecoinz; + setHdCoin(221); + }, + }, + { + name: "LYNX - Lynx", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lynx; + setHdCoin(191); + }, + }, + { + name: "MAZA - Maza", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.maza; + setHdCoin(13); + }, + }, + { + name: "MEC - Megacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.megacoin; + setHdCoin(217); + }, + }, + { + name: "MIX - MIX", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(76); + }, + }, + { + name: "MNX - Minexcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.minexcoin; + setHdCoin(182); + }, + }, + { + name: "MONA - Monacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.monacoin, + setHdCoin(22); + }, + }, + { + name: "MUSIC - Musicoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(184); + }, + }, + { + name: "NAV - Navcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.navcoin; + setHdCoin(130); + }, + }, + { + name: "NEBL - Neblio", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neblio; + setHdCoin(146); + }, + }, + { + name: "NEOS - Neoscoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neoscoin; + setHdCoin(25); + }, + }, + { + name: "NLG - Gulden", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gulden; + setHdCoin(87); + }, + }, + { + name: "NMC - Namecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.namecoin; + setHdCoin(7); + }, + }, + { + name: "NRG - Energi", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.energi; + setHdCoin(204); + }, + }, + { + name: "NRO - Neurocoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neurocoin; + setHdCoin(110); + }, + }, + { + name: "NSR - Nushares", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.nushares; + setHdCoin(11); + }, + }, + { + name: "NYC - Newyorkc", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.newyorkc; + setHdCoin(179); + }, + }, + { + name: "NVC - Novacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.novacoin; + setHdCoin(50); + }, + }, + { + name: "OK - Okcash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.okcash; + setHdCoin(69); + }, + }, + { + name: "OMNI - Omnicore", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.omnicore; + setHdCoin(200); + }, + }, + { + name: "ONX - Onixcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.onixcoin; + setHdCoin(174); + }, + }, + { + name: "LKR - Lkrcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lkrcoin; + setHdCoin(557); + }, + }, + { + name: "PHR - Phore", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.phore; + setHdCoin(444); + }, + }, + { + name: "PINK - Pinkcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pinkcoin; + setHdCoin(117); + }, + }, + { + name: "PIRL - Pirl", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(164); + }, + }, + { + name: "PIVX - PIVX", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pivx; + setHdCoin(119); + }, + }, + { + name: "PIVX - PIVX Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pivxtestnet; + setHdCoin(1); + }, + }, + { + name: "POA - Poa", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(178); + }, + }, + { + name: "POSW - POSWcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.poswcoin; + setHdCoin(47); + }, + }, + { + name: "POT - Potcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.potcoin; + setHdCoin(81); + }, + }, + { + name: "PPC - Peercoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.peercoin; + setHdCoin(6); + }, + }, + { + name: "PRJ - ProjectCoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.projectcoin; + setHdCoin(533); + }, + }, + { + name: "PSB - Pesobit", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pesobit; + setHdCoin(62); + }, + }, + { + name: "PUT - Putincoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.putincoin; + setHdCoin(122); + }, + }, + { + name: "RVN - Ravencoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ravencoin; + setHdCoin(175); + }, + }, + { + name: "RBY - Rubycoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.rubycoin; + setHdCoin(16); + }, + }, + { + name: "RDD - Reddcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.reddcoin; + setHdCoin(4); + }, + }, + { + name: "RVR - RevolutionVR", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.revolutionvr; + setHdCoin(129); + }, + }, + { + name: "SAFE - Safecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.safecoin; + setHdCoin(19165); + }, + }, + { + name: "SLS - Salus", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.salus; + setHdCoin(63); + }, + }, + { + name: "SDC - ShadowCash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.shadow; + setHdCoin(35); + }, + }, + { + name: "SDC - ShadowCash Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.shadowtn; + setHdCoin(1); + }, + }, + { + name: "SLM - Slimcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.slimcoin; + setHdCoin(63); + }, + }, + { + name: "SLM - Slimcoin Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.slimcointn; + setHdCoin(111); + }, + }, + { + name: "SLR - Solarcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.solarcoin; + setHdCoin(58); + }, + }, + { + name: "SMLY - Smileycoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.smileycoin; + setHdCoin(59); + }, + }, + { + name: "STASH - Stash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.stash; + setHdCoin(0xC0C0); + }, + }, + { + name: "STASH - Stash Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.stashtn; + setHdCoin(0xCAFE); + }, + }, + { + name: "STRAT - Stratis", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.stratis; + setHdCoin(105); + }, + }, + { + name: "TSTRAT - Stratis Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.stratistest; + setHdCoin(105); + }, + }, + { + name: "SYS - Syscoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.syscoin; + setHdCoin(57); + }, + }, + { + name: "THC - Hempcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.hempcoin; + setHdCoin(113); + }, + }, + { + name: "TOA - Toa", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.toa; + setHdCoin(159); + }, + }, + { + name: "USC - Ultimatesecurecash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ultimatesecurecash; + setHdCoin(112); + }, + }, + { + name: "USNBT - NuBits", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.nubits; + setHdCoin(12); + }, + }, + { + name: "UNO - Unobtanium", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.unobtanium; + setHdCoin(92); + }, + }, + { + name: "VASH - Vpncoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vpncoin; + setHdCoin(33); + }, + }, + { + name: "VIA - Viacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.viacoin; + setHdCoin(14); + }, + }, + { + name: "VIA - Viacoin Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.viacointestnet; + setHdCoin(1); + }, + }, + { + name: "VIVO - Vivo", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vivo; + setHdCoin(166); + }, + }, + { + name: "VTC - Vertcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vertcoin; + setHdCoin(28); + }, + }, + { + name: "WC - Wincoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.wincoin; + setHdCoin(181); + }, + }, + { + name: "XAX - Artax", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.artax; + setHdCoin(219); + }, + }, + { + name: "XBC - Bitcoinplus", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoinplus; + setHdCoin(65); + }, + }, + { + name: "XMY - Myriadcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.myriadcoin; + setHdCoin(90); + }, + }, + { + name: "XRP - Ripple", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(144); + }, + }, + { + name: "XVC - Vcash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vcash; + setHdCoin(127); + }, + }, + { + name: "XVG - Verge", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.verge; + setHdCoin(77); + }, + }, + { + name: "XUEZ - Xuez", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.xuez; + setHdCoin(225); + }, + }, + { + name: "XWC - Whitecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.whitecoin; + setHdCoin(155); + }, + }, + { + name: "XZC - Zcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zcoin; + setHdCoin(136); + }, + }, + { + name: "ZCL - Zclassic", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zclassic; + setHdCoin(147); + }, + }, + { + name: "ZEC - Zcash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zcash; + setHdCoin(133); + }, + }, + { + name: "ZEN - Zencash", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zencash; + setHdCoin(121); + }, + }, + ] + + var clients = [ + { + name: "Bitcoin Core", + onSelect: function() { + DOM.bip32path.val("m/0'/0'"); + DOM.hardenedAddresses.prop('checked', true); + }, + }, + { + name: "blockchain.info", + onSelect: function() { + DOM.bip32path.val("m/44'/0'/0'"); + DOM.hardenedAddresses.prop('checked', false); + }, + }, + { + name: "MultiBit HD", + onSelect: function() { + DOM.bip32path.val("m/0'/0"); + DOM.hardenedAddresses.prop('checked', false); + }, + }, + { + name: "Coinomi, Ledger", + onSelect: function() { + DOM.bip32path.val("m/44'/"+DOM.bip44coin.val()+"'/0'"); DOM.hardenedAddresses.prop('checked', false); }, }