X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=5d031b28239a3499b854b0c097b872606e126af9;hb=93f3a286dbb0ffaf49fe549027485778df133d8d;hp=e80a76494c97189f2a1550677c0f1b45f2301f6b;hpb=85f762c905ce27b728e5e9729bc658f5f6f8d5f3;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index e80a764..807230b 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -15,6 +15,7 @@ var showPrivKey = true; var showQr = false; var litecoinUseLtub = true; + var isDefaultBip44ChangeValue = true; var entropyChangeTimeoutEvent = null; var phraseChangeTimeoutEvent = null; @@ -23,6 +24,7 @@ var generationProcesses = []; var DOM = {}; + DOM.privacyScreenToggle = $(".privacy-screen-toggle"); DOM.network = $(".network"); DOM.bip32Client = $("#bip32-client"); DOM.phraseNetwork = $("#network-phrase"); @@ -40,8 +42,11 @@ 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.splitPhrase = $(".phraseSplit"); + DOM.phraseSplitWarn = $(".phraseSplitWarn"); DOM.passphrase = $(".passphrase"); DOM.generateContainer = $(".generate-container"); DOM.generate = $(".generate"); @@ -67,6 +72,7 @@ DOM.bip44accountXprv = $("#bip44 .account-xprv"); DOM.bip44accountXpub = $("#bip44 .account-xpub"); DOM.bip44change = $("#bip44 .change"); + DOM.defaultBip44ChangeValue = $("#bip44 .default-bip44-change-value"); DOM.bip49unavailable = $("#bip49 .unavailable"); DOM.bip49available = $("#bip49 .available"); DOM.bip49path = $("#bip49-path"); @@ -76,6 +82,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 +96,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 +123,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); @@ -127,7 +138,9 @@ DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged); DOM.bip32path.on("input", calcForDerivationPath); DOM.bip44account.on("input", calcForDerivationPath); + DOM.bip44change.on("input", modifiedDefaultBip44ChangeValue); DOM.bip44change.on("input", calcForDerivationPath); + DOM.defaultBip44ChangeValue.on("click", resetDefaultBip44ChangeValue); DOM.bip49account.on("input", calcForDerivationPath); DOM.bip49change.on("input", calcForDerivationPath); DOM.bip84account.on("input", calcForDerivationPath); @@ -144,7 +157,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 +168,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(); } @@ -221,7 +238,14 @@ if (phraseChangeTimeoutEvent != null) { clearTimeout(phraseChangeTimeoutEvent); } - phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400); + phraseChangeTimeoutEvent = setTimeout(function() { + phraseChanged(); + var entropy = mnemonic.toRawEntropyBin(DOM.phrase.val()); + if (entropy !== null) { + DOM.entropyMnemonicLength.val("raw"); + DOM.entropy.val(entropy); + } + }, 400); } function phraseChanged() { @@ -240,6 +264,7 @@ calcForDerivationPath(); // Show the word indexes showWordIndexes(); + writeSplitPhrase(phrase); } function tabChanged() { @@ -286,6 +311,7 @@ clearDisplay(); clearEntropyFeedback(); DOM.phrase.val(""); + DOM.phraseSplit.val(""); showValidationError("Blank entropy"); return; } @@ -320,6 +346,7 @@ showPending(); // Clear existing mnemonic and passphrase DOM.phrase.val(""); + DOM.phraseSplit.val(""); DOM.passphrase.val(""); seed = null; if (rootKeyChangedTimeoutEvent != null) { @@ -359,8 +386,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 +441,7 @@ }, 50); } - function useBitpayAddressesChange() { - setBitcoinCashNetworkValues(); + function bitcoinCashAddressTypeChange() { phraseChanged(); } @@ -436,6 +465,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() { @@ -464,12 +504,85 @@ function calcBip32RootKeyFromSeed(phrase, passphrase) { seed = mnemonic.toSeed(phrase, passphrase); bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network); + if(isGRS()) + bip32RootKey = groestlcoinjs.HDNode.fromSeedHex(seed, network); + } function calcBip32RootKeyFromBase58(rootKeyBase58) { + if(isGRS()) { + calcBip32RootKeyFromBase58GRS(rootKeyBase58); + return; + } + // 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); } + function calcBip32RootKeyFromBase58GRS(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 = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n); + return; + } + catch (e) {} + // try parsing using p2wpkh params + if ("p2wpkh" in n) { + try { + bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + return; + } + catch (e) {} + } + // try parsing using p2wpkh-in-p2sh network params + if ("p2wpkhInP2sh" in n) { + try { + bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + return; + } + catch (e) {} + } + } + // try the network params as currently specified + bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); + } + function calcBip32ExtendedKey(path) { // Check there's a root key to derive from if (!bip32RootKey) { @@ -497,7 +610,7 @@ extendedKey = extendedKey.derive(index); } } - return extendedKey + return extendedKey; } function showValidationError(errorText) { @@ -540,6 +653,40 @@ } function validateRootKey(rootKeyBase58) { + if(isGRS()) + return validateRootKeyGRS(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); } @@ -549,17 +696,60 @@ return ""; } + function validateRootKeyGRS(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 { + groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n); + return ""; + } + catch (e) {} + // try parsing using p2wpkh params + if ("p2wpkh" in n) { + try { + groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + return ""; + } + catch (e) {} + } + // try parsing using p2wpkh-in-p2sh network params + if ("p2wpkhInP2sh" in n) { + try { + groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + return ""; + } + catch (e) {} + } + } + // try the network params as currently specified + try { + groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); + } + catch (e) { + return "Invalid root key"; + } + return ""; + } + function getDerivationPath() { if (bip44TabSelected()) { var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); var account = parseIntNoNaN(DOM.bip44account.val(), 0); - var change = parseIntNoNaN(DOM.bip44change.val(), 0); - var path = "m/"; - path += purpose + "'/"; - path += coin + "'/"; - path += account + "'/"; - path += change; + var change = parseIntNoNaN(DOM.bip44change.val(), ""); + var path = "m"; + path += "/" + purpose + "'"; + path += "/" + coin + "'"; + path += "/" + account + "'"; + if (change !== "") { + path += "/" + change; + } DOM.bip44path.val(path); var derivationPath = DOM.bip44path.val(); console.log("Using derivation path from BIP44 tab: " + derivationPath); @@ -659,6 +849,14 @@ return false; } + function isGRS() { + return networks[DOM.network.val()].name == "GRS - Groestlcoin" || networks[DOM.network.val()].name == "GRS - Groestlcoin Testnet"; + } + + function isELA() { + return networks[DOM.network.val()].name == "ELA - Elastos" + } + function displayBip44Info() { // Get the derivation path for the account var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); @@ -672,9 +870,14 @@ var accountExtendedKey = calcBip32ExtendedKey(path); var accountXprv = accountExtendedKey.toBase58(); var accountXpub = accountExtendedKey.neutered().toBase58(); + // Display the extended keys DOM.bip44accountXprv.val(accountXprv); DOM.bip44accountXpub.val(accountXpub); + + if (isELA()) { + displayBip44InfoForELA(); + } } function displayBip49Info() { @@ -730,6 +933,10 @@ clearAddressesList(); var initialAddressCount = parseInt(DOM.rowsToAdd.val()); displayAddresses(0, initialAddressCount); + + if (isELA()) { + displayBip32InfoForELA(); + } } function displayAddresses(start, total) { @@ -801,7 +1008,10 @@ 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 }); + if(isGRS()) + keyPair = new groestlcoinjs.ECPair(keyPair.d, null, { network: network, compressed: false }); + } // get address var address = keyPair.getAddress().toString(); @@ -809,12 +1019,17 @@ 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) { - console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index); - }); + if(isGRS()) + privkey = groestlcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) { + console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index); + }, null, networks[DOM.network.val()].name.includes("Testnet")); + else + privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) { + console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index); + }); } } // get pubkey @@ -824,7 +1039,7 @@ indexText = indexText + "'"; } // Ethereum values are different - if (networks[DOM.network.val()].name == "ETH - Ethereum") { + if (networkIsEthereum()) { var privKeyBuffer = keyPair.d.toBuffer(32); privkey = privKeyBuffer.toString('hex'); var addressBuffer = ethUtil.privateToAddress(privKeyBuffer); @@ -834,11 +1049,55 @@ privkey = ethUtil.addHexPrefix(privkey); pubkey = ethUtil.addHexPrefix(pubkey); } + + // Stellar is different + if (networks[DOM.network.val()].name == "XLM - Stellar") { + var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); + var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); + var path = "m/"; + path += purpose + "'/"; + path += coin + "'/" + index + "'"; + var keypair = stellarUtil.getKeypair(path, seed); + indexText = path; + privkey = keypair.secret(); + pubkey = address = keypair.publicKey(); + } + if ((networks[DOM.network.val()].name == "NAS - Nebulas")) { + var NasAccount = require("nebulas-account"); + var privKeyBuffer = keyPair.d.toBuffer(32); + var nebulasAccount = new NasAccount(); + nebulasAccount.setPrivateKey(privKeyBuffer); + address = nebulasAccount.getAddressString(); + privkey = nebulasAccount.getPrivateKeyString(); + pubkey = nebulasAccount.getPublicKeyString(); + } // Ripple values are different if (networks[DOM.network.val()].name == "XRP - Ripple") { privkey = convertRipplePriv(privkey); address = convertRippleAdrr(address); } + // CasinoCoin values are different + if (networks[DOM.network.val()].name == "CSC - CasinoCoin") { + privkey = convertCasinoCoinPriv(privkey); + address = convertCasinoCoinAdrr(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); + } + } + // Bitcoin Cash address format may vary + if (networks[DOM.network.val()].name == "SLP - Simple Ledger Protocol") { + var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val(); + if (bchAddrType == "cashaddr") { + address = bchaddr.toSlpAddress(address); + } + } // Segwit addresses are different if (isSegwit) { if (!segwitAvailable) { @@ -857,6 +1116,47 @@ address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) } } + + if ((networks[DOM.network.val()].name == "CRW - Crown")) { + address = bitcoinjs.bitcoin.networks.crown.toNewAddress(address); + } + + if (networks[DOM.network.val()].name == "EOS - EOSIO") { + address = "" + pubkey = eosUtil.bufferToPublic(keyPair.getPublicKeyBuffer()); + privkey = eosUtil.bufferToPrivate(keyPair.d.toBuffer(32)); + } + + //Groestlcoin Addresses are different + if(isGRS()) { + + if (isSegwit) { + if (!segwitAvailable) { + return; + } + if (isP2wpkh) { + address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network) + } + else if (isP2wpkhInP2sh) { + address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network) + } + } + //non-segwit addresses are handled by using groestlcoinjs for bip32RootKey + } + + if (isELA()) { + let elaAddress = calcAddressForELA( + seed, + parseIntNoNaN(DOM.bip44coin.val(), 0), + parseIntNoNaN(DOM.bip44account.val(), 0), + parseIntNoNaN(DOM.bip44change.val(), 0), + index + ); + address = elaAddress.address; + privkey = elaAddress.privateKey; + pubkey = elaAddress.publicKey; + } + addAddressToList(indexText, address, pubkey, privkey); if (isLast) { hidePending(); @@ -1142,12 +1442,55 @@ 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; } + function writeSplitPhrase(phrase) { + var wordCount = phrase.split(/\s/g).length; + var left=[]; + for (var i=0;i0) { + groupI=(groupI+1)%3; + seed = seed * 16807 % 2147483647; + var selected=Math.floor(left.length*(seed - 1) / 2147483646); + group[groupI].push(left[selected]); + left.splice(selected,1); + } + var cards=[phrase.split(/\s/g),phrase.split(/\s/g),phrase.split(/\s/g)]; + for (var i=0;i<3;i++) { + for (var ii=0;ii 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; @@ -1194,6 +1548,7 @@ var phrase = mnemonic.toMnemonic(entropyArr); // Set the mnemonic in the UI DOM.phrase.val(phrase); + writeSplitPhrase(phrase); // Show the word indexes showWordIndexes(); // Show the checksum @@ -1357,8 +1712,38 @@ return DOM.bip32tab.hasClass("active"); } + function networkIsEthereum() { + var name = networks[DOM.network.val()].name; + return (name == "ETH - Ethereum") + || (name == "ETC - Ethereum Classic") + || (name == "EWT - EnergyWeb") + || (name == "PIRL - Pirl") + || (name == "MIX - MIX") + || (name == "MUSIC - Musicoin") + || (name == "POA - Poa") + || (name == "EXP - Expanse") + || (name == "CLO - Callisto") + || (name == "DXN - DEXON") + || (name == "ELLA - Ellaism") + || (name == "ESN - Ethersocial Network") + || (name == "VET - VeChain") + } + 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() { @@ -1373,15 +1758,37 @@ return DOM.bip141tab.hasClass("active"); } + function setBip44ChangeValue() { + if (isDefaultBip44ChangeValue) { + if (networkIsEthereum()) { + DOM.bip44change.val(""); + } else { + DOM.bip44change.val(0); + } + } + } + + function modifiedDefaultBip44ChangeValue() { + isDefaultBip44ChangeValue = false; + } + + function resetDefaultBip44ChangeValue() { + isDefaultBip44ChangeValue = true; + setBip44ChangeValue(); + } + function setHdCoin(coinValue) { DOM.bip44coin.val(coinValue); DOM.bip49coin.val(coinValue); DOM.bip84coin.val(coinValue); + setBip44ChangeValue(); } 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 +1796,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 @@ -1516,7 +1912,6 @@ var networks = [ { name: "AC - Asiacoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.asiacoin; setHdCoin(51); @@ -1524,15 +1919,20 @@ }, { name: "ACC - Adcoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.adcoin; setHdCoin(161); }, }, + { + name: "ARYA - Aryacoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.aryacoin; + setHdCoin(357); + }, + }, { name: "AUR - Auroracoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.auroracoin; setHdCoin(85); @@ -1540,15 +1940,27 @@ }, { 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: "BOLI - Bolivarcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bolivarcoin; + setHdCoin(278); }, }, { name: "BCA - Bitcoin Atom", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.atom; setHdCoin(185); @@ -1556,16 +1968,13 @@ }, { name: "BCH - Bitcoin Cash", - segwitAvailable: false, onSelect: function() { - DOM.useBitpayAddressesContainer.removeClass("hidden"); - setBitcoinCashNetworkValues(); + DOM.bitcoinCashAddressTypeContainer.removeClass("hidden"); setHdCoin(145); }, }, { name: "BEET - Beetlecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.beetlecoin; setHdCoin(800); @@ -1573,7 +1982,6 @@ }, { name: "BELA - Belacoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.belacoin; setHdCoin(73); @@ -1581,15 +1989,27 @@ }, { 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", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.britcoin; setHdCoin(70); @@ -1597,15 +2017,20 @@ }, { name: "BSD - Bitsend", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitsend; setHdCoin(91); }, }, + { + name: "BST - BlockStamp", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.blockstamp; + setHdCoin(254); + }, + }, { name: "BTA - Bata", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.bata; setHdCoin(89); @@ -1613,7 +2038,6 @@ }, { name: "BTC - Bitcoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoin; setHdCoin(0); @@ -1621,15 +2045,48 @@ }, { name: "BTC - Bitcoin Testnet", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.testnet; setHdCoin(1); }, }, + { + name: "BITG - Bitcoin Green", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoingreen; + setHdCoin(222); + }, + }, + { + name: "BTCP - Bitcoin Private", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoinprivate; + setHdCoin(183); + }, + }, + { + name: "BSV - BitcoinSV", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoinsv; + setHdCoin(236); + }, + }, + { + name: "BTCZ - Bitcoinz", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoinz; + setHdCoin(177); + }, + }, + { + name: "BTDX - BitCloud", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcloud; + setHdCoin(218); + }, + }, { name: "BTG - Bitcoin Gold", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bgold; setHdCoin(156); @@ -1637,7 +2094,6 @@ }, { name: "BTX - Bitcore", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcore; setHdCoin(160); @@ -1645,15 +2101,20 @@ }, { name: "CCN - Cannacoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.cannacoin; setHdCoin(19); }, }, + { + name: "CESC - Cryptoescudo", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.cannacoin; + setHdCoin(111); + }, + }, { name: "CDN - Canadaecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.canadaecoin; setHdCoin(34); @@ -1661,15 +2122,21 @@ }, { name: "CLAM - Clams", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.clam; setHdCoin(23); }, }, { - name: "CLUB - Clubcoin", + name: "CLO - Callisto", segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(820); + }, + }, + { + name: "CLUB - Clubcoin", onSelect: function() { network = bitcoinjs.bitcoin.networks.clubcoin; setHdCoin(79); @@ -1677,31 +2144,48 @@ }, { name: "CMP - Compcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.compcoin; setHdCoin(71); }, }, + { + name: "CPU - CPUchain", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.cpuchain; + setHdCoin(363); + }, + }, { name: "CRAVE - Crave", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.crave; setHdCoin(186); }, }, + { + name: "CRW - Crown (Legacy)", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.crown; + setHdCoin(72); + }, + }, { name: "CRW - Crown", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.crown; setHdCoin(72); }, }, + { + name: "CSC - CasinoCoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(359); + }, + }, { name: "DASH - Dash", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.dash; setHdCoin(5); @@ -1709,7 +2193,6 @@ }, { name: "DASH - Dash Testnet", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.dashtn; setHdCoin(1); @@ -1717,7 +2200,6 @@ }, { name: "DFC - Defcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.defcoin; setHdCoin(1337); @@ -1725,7 +2207,6 @@ }, { name: "DGB - Digibyte", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.digibyte; setHdCoin(20); @@ -1733,7 +2214,6 @@ }, { name: "DGC - Digitalcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.digitalcoin; setHdCoin(18); @@ -1741,7 +2221,6 @@ }, { name: "DMD - Diamond", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.diamond; setHdCoin(152); @@ -1749,7 +2228,6 @@ }, { name: "DNR - Denarius", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.denarius; setHdCoin(116); @@ -1757,15 +2235,27 @@ }, { name: "DOGE - Dogecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.dogecoin; setHdCoin(3); }, }, + { + name: "DOGEt - Dogecoin Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.dogecointestnet; + setHdCoin(1); + }, + }, + { + name: "DXN - DEXON", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(237); + }, + }, { name: "ECN - Ecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.ecoin; setHdCoin(115); @@ -1773,7 +2263,6 @@ }, { name: "EDRC - Edrcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.edrcoin; setHdCoin(56); @@ -1781,15 +2270,28 @@ }, { name: "EFL - Egulden", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.egulden; setHdCoin(78); }, }, { - name: "EMC2 - Einsteinium", + name: "ELA - Elastos", + onSelect: function () { + network = bitcoinjs.bitcoin.networks.elastos; + setHdCoin(2305); + }, + }, + { + name: "ELLA - Ellaism", segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(163); + }, + }, + { + name: "EMC2 - Einsteinium", onSelect: function() { network = bitcoinjs.bitcoin.networks.einsteinium; setHdCoin(41); @@ -1797,31 +2299,86 @@ }, { name: "ERC - Europecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.europecoin; setHdCoin(151); }, }, { - name: "ETH - Ethereum", - segwitAvailable: false, + name: "EOS - EOSIO", onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoin; - setHdCoin(60); + setHdCoin(194); }, }, { - name: "EXCL - Exclusivecoin", + name: "ESN - Ethersocial Network", segwitAvailable: false, onSelect: function() { - network = bitcoinjs.bitcoin.networks.exclusivecoin; - setHdCoin(190); + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(31102); }, }, { - name: "FJC - Fujicoin", + name: "ETC - Ethereum Classic", segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(61); + }, + }, + { + name: "ETH - Ethereum", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(60); + }, + }, + { + name: "EWT - EnergyWeb", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(246); + }, + }, + { + name: "EXCL - Exclusivecoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.exclusivecoin; + setHdCoin(190); + }, + }, + { + name: "EXCC - ExchangeCoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.exchangecoin; + setHdCoin(0); + }, + }, + { + name: "EXP - Expanse", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(40); + }, + }, + { + name: "FIX - FIX", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.fix; + setHdCoin(336); + }, + }, + { + name: "FIX - FIX Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.fixtestnet; + setHdCoin(1); + }, + }, + { + name: "FJC - Fujicoin", onSelect: function() { network = bitcoinjs.bitcoin.networks.fujicoin; setHdCoin(75); @@ -1829,7 +2386,6 @@ }, { name: "FLASH - Flashcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.flashcoin; setHdCoin(120); @@ -1837,7 +2393,6 @@ }, { name: "FRST - Firstcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.firstcoin; setHdCoin(167); @@ -1845,7 +2400,6 @@ }, { name: "FTC - Feathercoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.feathercoin; setHdCoin(8); @@ -1853,7 +2407,6 @@ }, { name: "GAME - GameCredits", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.game; setHdCoin(101); @@ -1861,7 +2414,6 @@ }, { name: "GBX - Gobyte", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.gobyte; setHdCoin(176); @@ -1869,7 +2421,6 @@ }, { name: "GCR - GCRCoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.gcr; setHdCoin(79); @@ -1877,23 +2428,48 @@ }, { name: "GRC - Gridcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.gridcoin; setHdCoin(84); }, }, + { + name: "GRS - Groestlcoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.groestlcoin; + setHdCoin(17); + }, + }, + { + name: "GRS - Groestlcoin Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.groestlcointestnet; + setHdCoin(1); + }, + }, { name: "HNC - Helleniccoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.helleniccoin; setHdCoin(168); }, }, + { + name: "HUSH - Hush (Legacy)", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.hush; + setHdCoin(197); + }, + }, + { + name: "HUSH - Hush3", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.hush3; + setHdCoin(197); + }, + }, { name: "INSN - Insane", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.insane; setHdCoin(68); @@ -1901,7 +2477,6 @@ }, { name: "IOP - Iop", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.iop; setHdCoin(66); @@ -1909,7 +2484,6 @@ }, { name: "IXC - Ixcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.ixcoin; setHdCoin(86); @@ -1917,7 +2491,6 @@ }, { name: "JBS - Jumbucks", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.jumbucks; setHdCoin(26); @@ -1931,9 +2504,16 @@ setHdCoin(141); }, }, + { + name: "KOBO - Kobocoin", + bip49available: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.kobocoin; + setHdCoin(196); + }, + }, { name: "LBC - Library Credits", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.lbry; setHdCoin(140); @@ -1941,7 +2521,6 @@ }, { name: "LCC - Litecoincash", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.litecoincash; setHdCoin(192); @@ -1949,7 +2528,6 @@ }, { name: "LDCN - Landcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.landcoin; setHdCoin(63); @@ -1957,24 +2535,44 @@ }, { name: "LINX - Linx", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.linx; setHdCoin(114); }, }, + { + name: "LKR - Lkrcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lkrcoin; + setHdCoin(557); + }, + }, { name: "LTC - Litecoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.litecoin; setHdCoin(2); DOM.litecoinLtubContainer.removeClass("hidden"); }, }, + { + name: "LTCt - Litecoin Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecointestnet; + setHdCoin(1); + DOM.litecoinLtubContainer.removeClass("hidden"); + }, + }, + { + name: "LTZ - LitecoinZ", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecoinz; + setHdCoin(221); + }, + }, { name: "LYNX - Lynx", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.lynx; setHdCoin(191); @@ -1982,15 +2580,28 @@ }, { name: "MAZA - Maza", - segwitAvailable: false, 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", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.minexcoin; setHdCoin(182); @@ -1998,23 +2609,42 @@ }, { name: "MONA - Monacoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.monacoin, setHdCoin(22); }, }, + { + name: "MONK - Monkey Project", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.monkeyproject, + setHdCoin(214); + }, + }, + { + name: "MUSIC - Musicoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(184); + }, + }, { name: "NAV - Navcoin", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.navcoin; setHdCoin(130); }, }, + { + name: "NAS - Nebulas", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(2718); + }, + }, { name: "NEBL - Neblio", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.neblio; setHdCoin(146); @@ -2022,15 +2652,20 @@ }, { name: "NEOS - Neoscoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.neoscoin; setHdCoin(25); }, }, + { + name: "NIX - NIX Platform", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.nix; + setHdCoin(400); + }, + }, { name: "NLG - Gulden", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.gulden; setHdCoin(87); @@ -2038,15 +2673,20 @@ }, { name: "NMC - Namecoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.namecoin; setHdCoin(7); }, }, + { + name: "NRG - Energi", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.energi; + setHdCoin(204); + }, + }, { name: "NRO - Neurocoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.neurocoin; setHdCoin(110); @@ -2054,7 +2694,6 @@ }, { name: "NSR - Nushares", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.nushares; setHdCoin(11); @@ -2062,7 +2701,6 @@ }, { name: "NYC - Newyorkc", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.newyorkc; setHdCoin(179); @@ -2070,7 +2708,6 @@ }, { name: "NVC - Novacoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.novacoin; setHdCoin(50); @@ -2078,7 +2715,6 @@ }, { name: "OK - Okcash", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.okcash; setHdCoin(69); @@ -2086,31 +2722,49 @@ }, { name: "OMNI - Omnicore", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.omnicore; setHdCoin(200); }, }, + { + name: "ONION - DeepOnion", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.deeponion; + setHdCoin(305); + }, + }, { name: "ONX - Onixcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.onixcoin; setHdCoin(174); }, }, + { + name: "PHR - Phore", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.phore; + setHdCoin(444); + }, + }, { name: "PINK - Pinkcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.pinkcoin; setHdCoin(117); }, }, { - name: "PIVX - PIVX", + 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); @@ -2118,15 +2772,21 @@ }, { name: "PIVX - PIVX Testnet", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.pivxtestnet; setHdCoin(1); }, }, { - name: "POSW - POSWcoin", + 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); @@ -2134,7 +2794,6 @@ }, { name: "POT - Potcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.potcoin; setHdCoin(81); @@ -2142,15 +2801,20 @@ }, { name: "PPC - Peercoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.peercoin; setHdCoin(6); }, }, + { + name: "PRJ - ProjectCoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.projectcoin; + setHdCoin(533); + }, + }, { name: "PSB - Pesobit", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.pesobit; setHdCoin(62); @@ -2158,15 +2822,27 @@ }, { name: "PUT - Putincoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.putincoin; setHdCoin(122); }, }, + { + name: "RPD - Rapids", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.rapids; + setHdCoin(320); + }, + }, + { + name: "RVN - Ravencoin", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ravencoin; + setHdCoin(175); + }, + }, { name: "RBY - Rubycoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.rubycoin; setHdCoin(16); @@ -2174,23 +2850,34 @@ }, { name: "RDD - Reddcoin", - segwitAvailable: false, onSelect: function() { - network = bitcoinjs.bitcoin.networks.reddoin; + network = bitcoinjs.bitcoin.networks.reddcoin; setHdCoin(4); }, }, { name: "RVR - RevolutionVR", - segwitAvailable: false, 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", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.shadow; setHdCoin(35); @@ -2198,7 +2885,6 @@ }, { name: "SDC - ShadowCash Testnet", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.shadowtn; setHdCoin(1); @@ -2206,7 +2892,6 @@ }, { name: "SLM - Slimcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.slimcoin; setHdCoin(63); @@ -2214,15 +2899,20 @@ }, { name: "SLM - Slimcoin Testnet", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.slimcointn; setHdCoin(111); }, }, + { + name: "SLP - Simple Ledger Protocol", + onSelect: function() { + DOM.bitcoinCashAddressTypeContainer.removeClass("hidden"); + setHdCoin(245); + }, + }, { name: "SLR - Solarcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.solarcoin; setHdCoin(58); @@ -2230,23 +2920,41 @@ }, { name: "SMLY - Smileycoin", - segwitAvailable: false, 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", - segwitAvailable: false, 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", - segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.syscoin; setHdCoin(57); @@ -2254,23 +2962,41 @@ }, { name: "THC - Hempcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.hempcoin; setHdCoin(113); }, }, + { + name: "THT - Thought", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.thought; + setHdCoin(1618); + }, + }, { name: "TOA - Toa", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.toa; setHdCoin(159); }, }, + { + name: "TWINS - TWINS", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.twins; + setHdCoin(970); + }, + }, + { + name: "TWINS - TWINS Testnet", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.twinstestnet; + setHdCoin(1); + }, + }, { name: "USC - Ultimatesecurecash", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.ultimatesecurecash; setHdCoin(112); @@ -2278,7 +3004,6 @@ }, { name: "USNBT - NuBits", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.nubits; setHdCoin(12); @@ -2286,7 +3011,6 @@ }, { name: "UNO - Unobtanium", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.unobtanium; setHdCoin(92); @@ -2294,15 +3018,20 @@ }, { name: "VASH - Vpncoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.vpncoin; setHdCoin(33); }, }, + { + name: "VET - VeChain", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoin; + setHdCoin(818); + }, + }, { name: "VIA - Viacoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.viacoin; setHdCoin(14); @@ -2310,7 +3039,6 @@ }, { name: "VIA - Viacoin Testnet", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.viacointestnet; setHdCoin(1); @@ -2318,7 +3046,6 @@ }, { name: "VIVO - Vivo", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.vivo; setHdCoin(166); @@ -2326,31 +3053,48 @@ }, { name: "VTC - Vertcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.vertcoin; setHdCoin(28); }, }, + { + name: "WGR - Wagerr", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.wagerr; + setHdCoin(7825266); + }, + }, { name: "WC - Wincoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.wincoin; setHdCoin(181); }, }, + { + name: "XAX - Artax", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.artax; + setHdCoin(219); + }, + }, { name: "XBC - Bitcoinplus", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoinplus; setHdCoin(65); }, }, + { + name: "XLM - Stellar", + onSelect: function() { + network = stellarUtil.dummyNetwork; + setHdCoin(148); + }, + }, { name: "XMY - Myriadcoin", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.myriadcoin; setHdCoin(90); @@ -2358,7 +3102,6 @@ }, { name: "XRP - Ripple", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.bitcoin; setHdCoin(144); @@ -2366,7 +3109,6 @@ }, { name: "XVC - Vcash", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.vcash; setHdCoin(127); @@ -2374,15 +3116,21 @@ }, { name: "XVG - Verge", - segwitAvailable: false, onSelect: function() { network = bitcoinjs.bitcoin.networks.verge; setHdCoin(77); }, }, { - name: "XWC - Whitecoin", + 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); @@ -2390,12 +3138,32 @@ }, { name: "XZC - Zcoin", - segwitAvailable: true, 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 - Horizen", + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zencash; + setHdCoin(121); + }, + }, ] var clients = [ @@ -2419,9 +3187,66 @@ 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); + }, } ] + // ELA - Elastos functions - begin + function displayBip44InfoForELA() { + if (!isELA()) { + return; + } + + var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); + var account = parseIntNoNaN(DOM.bip44account.val(), 0); + + // Calculate the account extended keys + var accountXprv = elastosjs.getAccountExtendedPrivateKey(seed, coin, account); + var accountXpub = elastosjs.getAccountExtendedPublicKey(seed, coin, account); + + // Display the extended keys + DOM.bip44accountXprv.val(accountXprv); + DOM.bip44accountXpub.val(accountXpub); + } + + function displayBip32InfoForELA() { + if (!isELA()) { + return; + } + + var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); + var account = parseIntNoNaN(DOM.bip44account.val(), 0); + var change = parseIntNoNaN(DOM.bip44change.val(), 0); + + DOM.extendedPrivKey.val(elastosjs.getBip32ExtendedPrivateKey(seed, coin, account, change)); + DOM.extendedPubKey.val(elastosjs.getBip32ExtendedPublicKey(seed, coin, account, change)); + + // Display the addresses and privkeys + clearAddressesList(); + var initialAddressCount = parseInt(DOM.rowsToAdd.val()); + displayAddresses(0, initialAddressCount); + } + + function calcAddressForELA(seed, coin, account, change, index) { + if (!isELA()) { + return; + } + + var publicKey = elastosjs.getDerivedPublicKey(elastosjs.getMasterPublicKey(seed), change, index); + return { + privateKey: elastosjs.getDerivedPrivateKey(seed, coin, account, change, index), + publicKey: publicKey, + address: elastosjs.getAddress(publicKey.toString('hex')) + }; + } + // ELA - Elastos functions - end + init(); })();