-
-
-
The BIP32 derivation path and extended keys are the basis for the derived addresses.
+
-
-
@@ -7761,7 +7783,7 @@ button.close {
|
|
|
-
|
+
|
+
+bitcoinjs.bitcoin.networks.xuez = {
+ messagePrefix: 'unused',
+ bip32: {
+ public: 0x022d2533,
+ private: 0x0221312b
+ },
+ pubKeyHash: 0x4b,
+ scriptHash: 0x12,
+ wif: 0xd4
+};
+
+bitcoinjs.bitcoin.networks.bitcoinprivate = {
+ messagePrefix: '\x18BitcoinPrivate Signed Message:\n',
+ bip32: {
+ public: 0x0488B21E,
+ private: 0x0488ADE4,
+ },
+ pubKeyHash: 0x1325,
+ scriptHash: 0x13AF,
+ wif: 0x80,
+};
+
+bitcoinjs.bitcoin.networks.bitcoinz = {
+ messagePrefix: '\x18BitcoinZ Signed Message:\n',
+ bip32: {
+ public: 0x0488B21E,
+ private: 0x0488ADE4,
+ },
+ pubKeyHash: 0x1CB8,
+ scriptHash: 0x1CBD,
+ wif: 0x80,
+};
+
+bitcoinjs.bitcoin.networks.zclassic = {
+ messagePrefix: '\x18Zcash Signed Message:\n',
+ bip32: {
+ public: 0x0488B21E,
+ private: 0x0488ADE4,
+ },
+ pubKeyHash: 0x1CB8,
+ scriptHash: 0x1CBD,
+ wif: 0x80,
+};
+
+bitcoinjs.bitcoin.networks.zencash = {
+ messagePrefix: '\x18Zcash Signed Message:\n',
+ bip32: {
+ public: 0x0488B21E,
+ private: 0x0488ADE4,
+ },
+ pubKeyHash: 0x2089,
+ scriptHash: 0x2096,
+ wif: 0x80,
+};
+
+bitcoinjs.bitcoin.networks.energi = {
+ messagePrefix: 'DarkCoin Signed Message:\n',
+ bip32: {
+ public: 0x03B8C856,
+ private: 0xD7DC6E9F,
+ },
+ pubKeyHash: 0x21,
+ scriptHash: 0x35,
+ wif: 0x6a,
+};
diff --git a/src/js/index.js b/src/js/index.js
index 7d04a05..371cea9 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");
@@ -77,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");
@@ -116,6 +119,7 @@
function init() {
// Events
+ DOM.privacyScreenToggle.on("change", privacyScreenToggled);
DOM.generatedStrength.on("change", generatedStrengthChanged);
DOM.network.on("change", networkChanged);
DOM.bip32Client.on("change", bip32ClientChanged);
@@ -176,13 +180,7 @@
var networkIndex = e.target.value;
var network = networks[networkIndex];
network.onSelect();
- if (network.segwitAvailable) {
- adjustNetworkForSegwit();
- showSegwitAvailable();
- }
- else {
- showSegwitUnavailable();
- }
+ adjustNetworkForSegwit();
if (seed != null) {
phraseChanged();
}
@@ -372,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);
@@ -448,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() {
@@ -479,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);
}
@@ -552,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);
}
@@ -813,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();
@@ -821,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) {
@@ -1398,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() {
@@ -1422,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");
}
@@ -1429,6 +1518,8 @@
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");
}
@@ -1543,7 +1634,6 @@
var networks = [
{
name: "AC - Asiacoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.asiacoin;
setHdCoin(51);
@@ -1551,7 +1641,6 @@
},
{
name: "ACC - Adcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.adcoin;
setHdCoin(161);
@@ -1559,7 +1648,6 @@
},
{
name: "AUR - Auroracoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.auroracoin;
setHdCoin(85);
@@ -1567,7 +1655,6 @@
},
{
name: "AXE - Axe",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.axe;
setHdCoin(4242);
@@ -1575,7 +1662,6 @@
},
{
name: "BCA - Bitcoin Atom",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.atom;
setHdCoin(185);
@@ -1583,7 +1669,6 @@
},
{
name: "BCH - Bitcoin Cash",
- segwitAvailable: false,
onSelect: function() {
DOM.bitcoinCashAddressTypeContainer.removeClass("hidden");
setHdCoin(145);
@@ -1591,7 +1676,6 @@
},
{
name: "BEET - Beetlecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.beetlecoin;
setHdCoin(800);
@@ -1599,7 +1683,6 @@
},
{
name: "BELA - Belacoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.belacoin;
setHdCoin(73);
@@ -1607,7 +1690,6 @@
},
{
name: "BLK - BlackCoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.blackcoin;
setHdCoin(10);
@@ -1615,7 +1697,6 @@
},
{
name: "BRIT - Britcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.britcoin;
setHdCoin(70);
@@ -1623,7 +1704,6 @@
},
{
name: "BSD - Bitsend",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitsend;
setHdCoin(91);
@@ -1631,7 +1711,6 @@
},
{
name: "BTA - Bata",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bata;
setHdCoin(89);
@@ -1639,7 +1718,6 @@
},
{
name: "BTC - Bitcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoin;
setHdCoin(0);
@@ -1647,7 +1725,6 @@
},
{
name: "BTC - Bitcoin Testnet",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.testnet;
setHdCoin(1);
@@ -1655,7 +1732,6 @@
},
{
name: "BTCP - Bitcoin Private",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoinprivate;
setHdCoin(183);
@@ -1663,7 +1739,6 @@
},
{
name: "BTCZ - Bitcoinz",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoinz;
setHdCoin(177);
@@ -1671,7 +1746,6 @@
},
{
name: "BTG - Bitcoin Gold",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bgold;
setHdCoin(156);
@@ -1679,7 +1753,6 @@
},
{
name: "BTX - Bitcore",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcore;
setHdCoin(160);
@@ -1687,7 +1760,6 @@
},
{
name: "CCN - Cannacoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.cannacoin;
setHdCoin(19);
@@ -1695,7 +1767,6 @@
},
{
name: "CDN - Canadaecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.canadaecoin;
setHdCoin(34);
@@ -1703,7 +1774,6 @@
},
{
name: "CLAM - Clams",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.clam;
setHdCoin(23);
@@ -1719,7 +1789,6 @@
},
{
name: "CLUB - Clubcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.clubcoin;
setHdCoin(79);
@@ -1727,7 +1796,6 @@
},
{
name: "CMP - Compcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.compcoin;
setHdCoin(71);
@@ -1735,7 +1803,6 @@
},
{
name: "CRAVE - Crave",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.crave;
setHdCoin(186);
@@ -1743,7 +1810,6 @@
},
{
name: "CRW - Crown",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.crown;
setHdCoin(72);
@@ -1751,7 +1817,6 @@
},
{
name: "DASH - Dash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.dash;
setHdCoin(5);
@@ -1759,7 +1824,6 @@
},
{
name: "DASH - Dash Testnet",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.dashtn;
setHdCoin(1);
@@ -1767,7 +1831,6 @@
},
{
name: "DFC - Defcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.defcoin;
setHdCoin(1337);
@@ -1775,7 +1838,6 @@
},
{
name: "DGB - Digibyte",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.digibyte;
setHdCoin(20);
@@ -1783,7 +1845,6 @@
},
{
name: "DGC - Digitalcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.digitalcoin;
setHdCoin(18);
@@ -1791,7 +1852,6 @@
},
{
name: "DMD - Diamond",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.diamond;
setHdCoin(152);
@@ -1799,7 +1859,6 @@
},
{
name: "DNR - Denarius",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.denarius;
setHdCoin(116);
@@ -1807,7 +1866,6 @@
},
{
name: "DOGE - Dogecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.dogecoin;
setHdCoin(3);
@@ -1815,7 +1873,6 @@
},
{
name: "ECN - Ecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.ecoin;
setHdCoin(115);
@@ -1823,7 +1880,6 @@
},
{
name: "EDRC - Edrcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.edrcoin;
setHdCoin(56);
@@ -1831,7 +1887,6 @@
},
{
name: "EFL - Egulden",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.egulden;
setHdCoin(78);
@@ -1839,7 +1894,6 @@
},
{
name: "EMC2 - Einsteinium",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.einsteinium;
setHdCoin(41);
@@ -1847,7 +1901,6 @@
},
{
name: "ERC - Europecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.europecoin;
setHdCoin(151);
@@ -1863,7 +1916,6 @@
},
{
name: "ETH - Ethereum",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoin;
setHdCoin(60);
@@ -1871,7 +1923,6 @@
},
{
name: "EXCL - Exclusivecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.exclusivecoin;
setHdCoin(190);
@@ -1887,7 +1938,6 @@
},
{
name: "FJC - Fujicoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.fujicoin;
setHdCoin(75);
@@ -1895,7 +1945,6 @@
},
{
name: "FLASH - Flashcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.flashcoin;
setHdCoin(120);
@@ -1903,7 +1952,6 @@
},
{
name: "FRST - Firstcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.firstcoin;
setHdCoin(167);
@@ -1911,7 +1959,6 @@
},
{
name: "FTC - Feathercoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.feathercoin;
setHdCoin(8);
@@ -1919,7 +1966,6 @@
},
{
name: "GAME - GameCredits",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.game;
setHdCoin(101);
@@ -1927,7 +1973,6 @@
},
{
name: "GBX - Gobyte",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.gobyte;
setHdCoin(176);
@@ -1935,7 +1980,6 @@
},
{
name: "GCR - GCRCoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.gcr;
setHdCoin(79);
@@ -1943,7 +1987,6 @@
},
{
name: "GRC - Gridcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.gridcoin;
setHdCoin(84);
@@ -1951,7 +1994,6 @@
},
{
name: "HNC - Helleniccoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.helleniccoin;
setHdCoin(168);
@@ -1959,7 +2001,6 @@
},
{
name: "INSN - Insane",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.insane;
setHdCoin(68);
@@ -1967,7 +2008,6 @@
},
{
name: "IOP - Iop",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.iop;
setHdCoin(66);
@@ -1975,7 +2015,6 @@
},
{
name: "IXC - Ixcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.ixcoin;
setHdCoin(86);
@@ -1983,7 +2022,6 @@
},
{
name: "JBS - Jumbucks",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.jumbucks;
setHdCoin(26);
@@ -2007,7 +2045,6 @@
},
{
name: "LBC - Library Credits",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.lbry;
setHdCoin(140);
@@ -2015,7 +2052,6 @@
},
{
name: "LCC - Litecoincash",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.litecoincash;
setHdCoin(192);
@@ -2023,7 +2059,6 @@
},
{
name: "LDCN - Landcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.landcoin;
setHdCoin(63);
@@ -2031,7 +2066,6 @@
},
{
name: "LINX - Linx",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.linx;
setHdCoin(114);
@@ -2039,7 +2073,6 @@
},
{
name: "LTC - Litecoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.litecoin;
setHdCoin(2);
@@ -2048,7 +2081,6 @@
},
{
name: "LYNX - Lynx",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.lynx;
setHdCoin(191);
@@ -2056,7 +2088,6 @@
},
{
name: "MAZA - Maza",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.maza;
setHdCoin(13);
@@ -2072,7 +2103,6 @@
},
{
name: "MNX - Minexcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.minexcoin;
setHdCoin(182);
@@ -2080,7 +2110,6 @@
},
{
name: "MONA - Monacoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.monacoin,
setHdCoin(22);
@@ -2096,7 +2125,6 @@
},
{
name: "NAV - Navcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.navcoin;
setHdCoin(130);
@@ -2104,7 +2132,6 @@
},
{
name: "NEBL - Neblio",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.neblio;
setHdCoin(146);
@@ -2112,7 +2139,6 @@
},
{
name: "NEOS - Neoscoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.neoscoin;
setHdCoin(25);
@@ -2120,7 +2146,6 @@
},
{
name: "NLG - Gulden",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.gulden;
setHdCoin(87);
@@ -2128,7 +2153,6 @@
},
{
name: "NMC - Namecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.namecoin;
setHdCoin(7);
@@ -2136,7 +2160,6 @@
},
{
name: "NRG - Energi",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.energi;
setHdCoin(204);
@@ -2144,7 +2167,6 @@
},
{
name: "NRO - Neurocoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.neurocoin;
setHdCoin(110);
@@ -2152,7 +2174,6 @@
},
{
name: "NSR - Nushares",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.nushares;
setHdCoin(11);
@@ -2160,7 +2181,6 @@
},
{
name: "NYC - Newyorkc",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.newyorkc;
setHdCoin(179);
@@ -2168,7 +2188,6 @@
},
{
name: "NVC - Novacoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.novacoin;
setHdCoin(50);
@@ -2176,7 +2195,6 @@
},
{
name: "OK - Okcash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.okcash;
setHdCoin(69);
@@ -2184,7 +2202,6 @@
},
{
name: "OMNI - Omnicore",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.omnicore;
setHdCoin(200);
@@ -2192,7 +2209,6 @@
},
{
name: "ONX - Onixcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.onixcoin;
setHdCoin(174);
@@ -2200,7 +2216,6 @@
},
{
name: "PINK - Pinkcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.pinkcoin;
setHdCoin(117);
@@ -2216,7 +2231,6 @@
},
{
name: "PIVX - PIVX",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.pivx;
setHdCoin(119);
@@ -2224,7 +2238,6 @@
},
{
name: "PIVX - PIVX Testnet",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.pivxtestnet;
setHdCoin(1);
@@ -2240,7 +2253,6 @@
},
{
name: "POSW - POSWcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.poswcoin;
setHdCoin(47);
@@ -2248,7 +2260,6 @@
},
{
name: "POT - Potcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.potcoin;
setHdCoin(81);
@@ -2256,7 +2267,6 @@
},
{
name: "PPC - Peercoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.peercoin;
setHdCoin(6);
@@ -2264,7 +2274,6 @@
},
{
name: "PSB - Pesobit",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.pesobit;
setHdCoin(62);
@@ -2272,7 +2281,6 @@
},
{
name: "PUT - Putincoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.putincoin;
setHdCoin(122);
@@ -2280,7 +2288,6 @@
},
{
name: "RBY - Rubycoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.rubycoin;
setHdCoin(16);
@@ -2288,15 +2295,13 @@
},
{
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);
@@ -2304,7 +2309,6 @@
},
{
name: "SDC - ShadowCash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.shadow;
setHdCoin(35);
@@ -2312,7 +2316,6 @@
},
{
name: "SDC - ShadowCash Testnet",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.shadowtn;
setHdCoin(1);
@@ -2320,7 +2323,6 @@
},
{
name: "SLM - Slimcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.slimcoin;
setHdCoin(63);
@@ -2328,7 +2330,6 @@
},
{
name: "SLM - Slimcoin Testnet",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.slimcointn;
setHdCoin(111);
@@ -2336,7 +2337,6 @@
},
{
name: "SLR - Solarcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.solarcoin;
setHdCoin(58);
@@ -2344,7 +2344,6 @@
},
{
name: "SMLY - Smileycoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.smileycoin;
setHdCoin(59);
@@ -2352,7 +2351,6 @@
},
{
name: "STRAT - Stratis",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.stratis;
setHdCoin(105);
@@ -2360,7 +2358,6 @@
},
{
name: "SYS - Syscoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.syscoin;
setHdCoin(57);
@@ -2368,7 +2365,6 @@
},
{
name: "THC - Hempcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.hempcoin;
setHdCoin(113);
@@ -2376,7 +2372,6 @@
},
{
name: "TOA - Toa",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.toa;
setHdCoin(159);
@@ -2384,7 +2379,6 @@
},
{
name: "USC - Ultimatesecurecash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.ultimatesecurecash;
setHdCoin(112);
@@ -2392,7 +2386,6 @@
},
{
name: "USNBT - NuBits",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.nubits;
setHdCoin(12);
@@ -2400,7 +2393,6 @@
},
{
name: "UNO - Unobtanium",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.unobtanium;
setHdCoin(92);
@@ -2408,7 +2400,6 @@
},
{
name: "VASH - Vpncoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.vpncoin;
setHdCoin(33);
@@ -2416,7 +2407,6 @@
},
{
name: "VIA - Viacoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.viacoin;
setHdCoin(14);
@@ -2424,7 +2414,6 @@
},
{
name: "VIA - Viacoin Testnet",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.viacointestnet;
setHdCoin(1);
@@ -2432,7 +2421,6 @@
},
{
name: "VIVO - Vivo",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.vivo;
setHdCoin(166);
@@ -2440,7 +2428,6 @@
},
{
name: "VTC - Vertcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.vertcoin;
setHdCoin(28);
@@ -2448,7 +2435,6 @@
},
{
name: "WC - Wincoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.wincoin;
setHdCoin(181);
@@ -2456,7 +2442,6 @@
},
{
name: "XBC - Bitcoinplus",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoinplus;
setHdCoin(65);
@@ -2464,7 +2449,6 @@
},
{
name: "XMY - Myriadcoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.myriadcoin;
setHdCoin(90);
@@ -2472,7 +2456,6 @@
},
{
name: "XRP - Ripple",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.bitcoin;
setHdCoin(144);
@@ -2480,7 +2463,6 @@
},
{
name: "XVC - Vcash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.vcash;
setHdCoin(127);
@@ -2488,7 +2470,6 @@
},
{
name: "XVG - Verge",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.verge;
setHdCoin(77);
@@ -2504,7 +2485,6 @@
},
{
name: "XWC - Whitecoin",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.whitecoin;
setHdCoin(155);
@@ -2512,7 +2492,6 @@
},
{
name: "XZC - Zcoin",
- segwitAvailable: true,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.zcoin;
setHdCoin(136);
@@ -2520,7 +2499,6 @@
},
{
name: "ZCL - Zclassic",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.zclassic;
setHdCoin(147);
@@ -2528,7 +2506,6 @@
},
{
name: "ZEC - Zcash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.zcash;
setHdCoin(133);
@@ -2536,7 +2513,6 @@
},
{
name: "ZEN - Zencash",
- segwitAvailable: false,
onSelect: function() {
network = bitcoinjs.bitcoin.networks.zencash;
setHdCoin(121);
diff --git a/src/js/segwit-parameters.js b/src/js/segwit-parameters.js
index f8b0347..b4530d5 100644
--- a/src/js/segwit-parameters.js
+++ b/src/js/segwit-parameters.js
@@ -56,9 +56,23 @@ bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
wif: 0xef
};
+bitcoinjs.bitcoin.networks.litecoin.p2wpkh = {
+ baseNetwork: "litecoin",
+ messagePrefix: '\x19Litecoin Signed Message:\n',
+ bech32: 'ltc',
+ bip32: {
+ public: 0x04b24746,
+ private: 0x04b2430c
+ },
+ pubKeyHash: 0x30,
+ scriptHash: 0x32,
+ wif: 0xb0
+};
+
bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
baseNetwork: "litecoin",
messagePrefix: '\x19Litecoin Signed Message:\n',
+ bech32: 'ltc',
bip32: {
public: 0x01b26ef6,
private: 0x01b26792
diff --git a/tests/spec/tests.js b/tests/spec/tests.js
index 250a720..0ffc73b 100644
--- a/tests/spec/tests.js
+++ b/tests/spec/tests.js
@@ -616,7 +616,7 @@ it('Allows selection of monacoin', function(done) {
it('Allows selection of AXE', function(done) {
var params = {
selectText: "AXE - Axe",
- firstAddress: "XQ4HLxUVS3egk5ff1o9e2vJFJKSSsUH3B7",
+ firstAddress: "PScwtLUyPiGrqtKXrHF37DGETLXLZdw4up",
};
testNetwork(done, params);
});
@@ -1057,7 +1057,7 @@ it('Allows selection of Putincoin', function(done) {
it('Allows selection of Reddcoin', function(done) {
var params = {
selectText: "RDD - Reddcoin",
- firstAddress: "1M4druAcUfkXBaAcQ4cCgCLPHChiaib6kL",
+ firstAddress: "RtgRvXMBng1y51ftteveFqwNfyRG18HpxQ",
};
testNetwork(done, params);
});
@@ -3692,4 +3692,61 @@ it('Does not show a warning if entropy is stronger than mnemonic length', functi
});
});
+it('Shows a warning for litecoin BIP84 (which does not have p2wpkh params)', function(done) {
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ selectNetwork("LTC - Litecoin");
+ driver.findElement(By.css('#bip84-tab a'))
+ .click()
+ // bip84 unavailable is shown
+ driver.sleep(feedbackDelay).then(function() {
+ driver.findElement(By.css('#bip84 .unavailable'))
+ .getAttribute("class")
+ .then(function(classes) {
+ expect(classes).not.toContain("hidden");
+ done();
+ });
+ });
+});
+
+it('Shows litecoin BIP49 addresses', function(done) {
+ driver.findElement(By.css('.phrase'))
+ .sendKeys('abandon abandon ability');
+ selectNetwork("LTC - Litecoin");
+ driver.findElement(By.css('#bip49-tab a'))
+ .click()
+ // bip49 addresses are shown
+ driver.sleep(generateDelay).then(function() {
+ driver.findElement(By.css('#bip49 .available'))
+ .getAttribute("class")
+ .then(function(classes) {
+ expect(classes).not.toContain("hidden");
+ // check first address
+ getFirstAddress(function(address) {
+ expect(address).toBe("MFwLPhsXoBuSLL8cLmW9uK6tChkzduV8qN");
+ done();
+ });
+ });
+ });
+});
+
+it('Can use root keys to generate segwit table rows', function(done) {
+ // segwit uses ypub / zpub instead of xpub but the root key should still
+ // be valid regardless of the encoding used to import that key.
+ // Maybe this breaks the reason for the different extended key prefixes, but
+ // since the parsed root key is used behind the scenes anyhow this should be
+ // allowed.
+ driver.findElement(By.css('#root-key'))
+ .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
+ driver.findElement(By.css('#bip49-tab a'))
+ .click()
+ // bip49 addresses are shown
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("3QG2Y9AA4xZ846gKHZqNf7mvVKbLqMKxr2");
+ done();
+ });
+ });
+});
+
});