+ function adjustNetworkForSegwit() {
+ // If segwit is selected the xpub/xprv prefixes need to be adjusted
+ // to avoid accidentally importing BIP49 xpub to BIP44 watch only
+ // wallet.
+ // See https://github.com/iancoleman/bip39/issues/125
+ var segwitNetworks = null;
+ // if a segwit network is alread selected, need to use base network to
+ // look up new parameters
+ if ("baseNetwork" in network) {
+ network = libs.bitcoin.networks[network.baseNetwork];
+ }
+ // choose the right segwit params
+ if (p2wpkhSelected() && "p2wpkh" in network) {
+ network = network.p2wpkh;
+ }
+ else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
+ network = network.p2wpkhInP2sh;
+ }
+ else if (p2wshSelected() && "p2wsh" in network) {
+ network = network.p2wsh;
+ }
+ else if (p2wshInP2shSelected() && "p2wshInP2sh" in network) {
+ network = network.p2wshInP2sh;
+ }
+ }
+
+ function lastIndexInTable() {
+ var pathText = DOM.addresses.find(".index").last().text();
+ var pathBits = pathText.split("/");
+ var lastBit = pathBits[pathBits.length-1];
+ var lastBitClean = lastBit.replace("'", "");
+ return parseInt(lastBitClean);
+ }
+
+ function uint8ArrayToHex(a) {
+ var s = ""
+ for (var i=0; i<a.length; i++) {
+ var h = a[i].toString(16);
+ while (h.length < 2) {
+ h = "0" + h;
+ }
+ s = s + h;
+ }
+ return s;
+ }
+
+ function showWordIndexes() {
+ var phrase = DOM.phrase.val();
+ var words = phraseToWordArray(phrase);
+ var wordIndexes = [];
+ var language = getLanguage();
+ for (var i=0; i<words.length; i++) {
+ var word = words[i];
+ var wordIndex = WORDLISTS[language].indexOf(word);
+ wordIndexes.push(wordIndex);
+ }
+ var wordIndexesStr = wordIndexes.join(", ");
+ DOM.entropyWordIndexes.text(wordIndexesStr);
+ }
+
+ function showChecksum() {
+ var phrase = DOM.phrase.val();
+ var words = phraseToWordArray(phrase);
+ var checksumBitlength = words.length / 3;
+ var checksum = "";
+ var binaryStr = "";
+ var language = getLanguage();
+ for (var i=words.length-1; i>=0; i--) {
+ var word = words[i];
+ var wordIndex = WORDLISTS[language].indexOf(word);
+ var wordBinary = wordIndex.toString(2);
+ while (wordBinary.length < 11) {
+ wordBinary = "0" + wordBinary;
+ }
+ var binaryStr = wordBinary + binaryStr;
+ if (binaryStr.length >= checksumBitlength) {
+ var start = binaryStr.length - checksumBitlength;
+ var end = binaryStr.length;
+ checksum = binaryStr.substring(start, end);
+ // add spaces so the last group is 11 bits, not the first
+ checksum = checksum.split("").reverse().join("")
+ checksum = addSpacesEveryElevenBits(checksum);
+ checksum = checksum.split("").reverse().join("")
+ break;
+ }
+ }
+ DOM.entropyChecksum.text(checksum);
+ }
+
+ function updateCsv() {
+ var tableCsv = "path,address,public key,private key\n";
+ var rows = DOM.addresses.find("tr");
+ for (var i=0; i<rows.length; i++) {
+ var row = $(rows[i]);
+ var cells = row.find("td");
+ for (var j=0; j<cells.length; j++) {
+ var cell = $(cells[j]);
+ if (!cell.children().hasClass("invisible")) {
+ tableCsv = tableCsv + cell.text();
+ }
+ if (j != cells.length - 1) {
+ tableCsv = tableCsv + ",";
+ }
+ }
+ tableCsv = tableCsv + "\n";
+ }
+ DOM.csv.val(tableCsv);
+ }
+
+ function addSpacesEveryElevenBits(binaryStr) {
+ return binaryStr.match(/.{1,11}/g).join(" ");
+ }
+
+ var networks = [
+ {
+ name: "AC - Asiacoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.asiacoin;
+ setHdCoin(51);
+ },
+ },
+ {
+ name: "ACC - Adcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.adcoin;
+ setHdCoin(161);
+ },
+ },
+ {
+ name: "ARYA - Aryacoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.aryacoin;
+ setHdCoin(357);
+ },
+ },
+ {
+ name: "AUR - Auroracoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.auroracoin;
+ setHdCoin(85);
+ },
+ },
+ {
+ name: "AXE - Axe",
+ onSelect: function() {
+ network = libs.bitcoin.networks.axe;
+ setHdCoin(4242);
+ },
+ },
+ {
+ name: "ANON - ANON",
+ onSelect: function() {
+ network = libs.bitcoin.networks.anon;
+ setHdCoin(220);
+ },
+ },
+ {
+ name: "BOLI - Bolivarcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bolivarcoin;
+ setHdCoin(278);
+ },
+ },
+ {
+ name: "BCA - Bitcoin Atom",
+ onSelect: function() {
+ network = libs.bitcoin.networks.atom;
+ setHdCoin(185);
+ },
+ },
+ {
+ name: "BCH - Bitcoin Cash",
+ onSelect: function() {
+ DOM.bitcoinCashAddressTypeContainer.removeClass("hidden");
+ setHdCoin(145);
+ },
+ },
+ {
+ name: "BEET - Beetlecoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.beetlecoin;
+ setHdCoin(800);
+ },
+ },
+ {
+ name: "BELA - Belacoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.belacoin;
+ setHdCoin(73);
+ },
+ },
+ {
+ name: "BLK - BlackCoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.blackcoin;
+ setHdCoin(10);
+ },
+ },
+ {
+ name: "BND - Blocknode",
+ onSelect: function() {
+ network = libs.bitcoin.networks.blocknode;
+ setHdCoin(2941);
+ },
+ },
+ {
+ name: "tBND - Blocknode Testnet",
+ onSelect: function() {
+ network = libs.bitcoin.networks.blocknode_testnet;
+ setHdCoin(1);
+ },
+ },
+ {
+ name: "BRIT - Britcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.britcoin;
+ setHdCoin(70);
+ },
+ },
+ {
+ name: "BSD - Bitsend",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitsend;
+ setHdCoin(91);
+ },
+ },
+ {
+ name: "BST - BlockStamp",
+ onSelect: function() {
+ network = libs.bitcoin.networks.blockstamp;
+ setHdCoin(254);
+ },
+ },
+ {
+ name: "BTA - Bata",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bata;
+ setHdCoin(89);
+ },
+ },
+ {
+ name: "BTC - Bitcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoin;
+ setHdCoin(0);
+ },
+ },
+ {
+ name: "BTC - Bitcoin RegTest",
+ onSelect: function() {
+ network = libs.bitcoin.networks.regtest;
+ // Using hd coin value 1 based on bip44_coin_type
+ // https://github.com/chaintope/bitcoinrb/blob/f1014406f6b8f9b4edcecedc18df70c80df06f11/lib/bitcoin/chainparams/regtest.yml
+ setHdCoin(1);
+ },
+ },
+ {
+ name: "BTC - Bitcoin Testnet",
+ onSelect: function() {
+ network = libs.bitcoin.networks.testnet;
+ setHdCoin(1);
+ },
+ },
+ {
+ name: "BITG - Bitcoin Green",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoingreen;
+ setHdCoin(222);
+ },
+ },
+ {
+ name: "BTCP - Bitcoin Private",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoinprivate;
+ setHdCoin(183);
+ },
+ },
+ {
+ name: "BSV - BitcoinSV",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoinsv;
+ setHdCoin(236);
+ },
+ },
+ {
+ name: "BTCZ - Bitcoinz",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoinz;
+ setHdCoin(177);
+ },
+ },
+ {
+ name: "BTDX - BitCloud",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcloud;
+ setHdCoin(218);
+ },
+ },
+ {
+ name: "BTG - Bitcoin Gold",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bgold;
+ setHdCoin(156);
+ },
+ },
+ {
+ name: "BTX - Bitcore",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcore;
+ setHdCoin(160);
+ },
+ },
+ {
+ name: "CCN - Cannacoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.cannacoin;
+ setHdCoin(19);
+ },
+ },
+ {
+ name: "CESC - Cryptoescudo",
+ onSelect: function() {
+ network = libs.bitcoin.networks.cannacoin;
+ setHdCoin(111);
+ },
+ },
+ {
+ name: "CDN - Canadaecoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.canadaecoin;
+ setHdCoin(34);
+ },
+ },
+ {
+ name: "CLAM - Clams",
+ onSelect: function() {
+ network = libs.bitcoin.networks.clam;
+ setHdCoin(23);
+ },
+ },
+ {
+ name: "CLO - Callisto",
+ segwitAvailable: false,
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoin;
+ setHdCoin(820);
+ },
+ },
+ {
+ name: "CLUB - Clubcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.clubcoin;
+ setHdCoin(79);
+ },
+ },
+ {
+ name: "CMP - Compcoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.compcoin;
+ setHdCoin(71);
+ },
+ },
+ {
+ name: "CPU - CPUchain",
+ onSelect: function() {
+ network = libs.bitcoin.networks.cpuchain;
+ setHdCoin(363);
+ },
+ },
+ {
+ name: "CRAVE - Crave",
+ onSelect: function() {
+ network = libs.bitcoin.networks.crave;
+ setHdCoin(186);
+ },
+ },
+ {
+ name: "CRW - Crown (Legacy)",
+ onSelect: function() {
+ network = libs.bitcoin.networks.crown;
+ setHdCoin(72);
+ },
+ },
+ {
+ name: "CRW - Crown",
+ onSelect: function() {
+ network = libs.bitcoin.networks.crown;
+ setHdCoin(72);
+ },
+ },
+ {
+ name: "CSC - CasinoCoin",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoin;
+ setHdCoin(359);
+ },
+ },
+ {