]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - tests/spec/tests.js
Add Sugarchain testnet support
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / tests / spec / tests.js
CommitLineData
0460b53f
IC
1// Usage:
2// cd /path/to/repo/tests
3// jasmine spec/tests.js
4//
5// Dependencies:
6// nodejs
7// selenium
8// jasmine
9// see https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Headless_mode#Automated_testing_with_headless_mode
10
11// USER SPECIFIED OPTIONS
12var browser = process.env.BROWSER; //"firefox"; // or "chrome"
13if (!browser) {
14 console.log("Browser can be set via environment variable, eg");
15 console.log("BROWSER=firefox jasmine spec/tests.js");
16 console.log("Options for BROWSER are firefox chrome");
17 console.log("Using default browser: chrome");
18 browser = "chrome";
19}
20else {
21 console.log("Using browser: " + browser);
22}
23
24// Globals
25
26var webdriver = require('selenium-webdriver');
27var By = webdriver.By;
28var Key = webdriver.Key;
29var until = webdriver.until;
30var newDriver = null;
31var driver = null;
32// Delays in ms
9fae1ffb 33var generateDelay = 1500;
0460b53f
IC
34var feedbackDelay = 500;
35var entropyFeedbackDelay = 500;
e21e32da 36var bip38delay = 15000;
0460b53f
IC
37
38// url uses file:// scheme
39var path = require('path')
40var parentDir = path.resolve(process.cwd(), '..', 'src', 'index.html');
41var url = "file://" + parentDir;
42if (browser == "firefox") {
43 // TODO loading local html in firefox is broken
44 console.log("Loading local html in firefox is broken, see https://stackoverflow.com/q/46367054");
45 console.log("You must run a server in this case, ie do this:");
46 console.log("$ cd /path/to/bip39/src");
47 console.log("$ python -m http.server");
48 url = "http://localhost:8000";
49}
50
51// Variables dependent on specific browser selection
52
53if (browser == "firefox") {
54 var firefox = require('selenium-webdriver/firefox');
55 var binary = new firefox.Binary(firefox.Channel.NIGHTLY);
56 binary.addArguments("-headless");
57 newDriver = function() {
58 return new webdriver.Builder()
59 .forBrowser('firefox')
60 .setFirefoxOptions(new firefox.Options().setBinary(binary))
61 .build();
62 }
63}
64else if (browser == "chrome") {
65 var chrome = require('selenium-webdriver/chrome');
66 newDriver = function() {
67 return new webdriver.Builder()
68 .forBrowser('chrome')
69 .setChromeOptions(new chrome.Options().addArguments("headless"))
70 .build();
71 }
72}
73
74// Helper functions
75
1dafc30d 76function testNetwork(done, params) {
0460b53f
IC
77 var phrase = params.phrase || 'abandon abandon ability';
78 driver.findElement(By.css('.phrase'))
79 .sendKeys(phrase);
80 selectNetwork(params.selectText);
81 driver.sleep(generateDelay).then(function() {
0ae59396 82 getFirstAddress(function(address) {
1dafc30d
IC
83 getFirstPublicKey(function(pubkey) {
84 getFirstPrivateKey(function(privkey) {
85 if ("firstAddress" in params) {
86 expect(address).toBe(params.firstAddress);
87 }
88 if ("firstPubKey" in params) {
89 expect(pubkey).toBe(params.firstPubKey);
90 }
91 if ("firstPrivKey" in params) {
92 expect(privkey).toBe(params.firstPrivKey);
93 }
94 done();
95 });
96 });
0ae59396 97 });
0460b53f
IC
98 });
99}
100
101function getFirstRowValue(handler, selector) {
102 driver.findElements(By.css(selector))
103 .then(function(els) {
104 els[0].getText()
105 .then(handler);
106 })
107}
108
109function getFirstAddress(handler) {
110 getFirstRowValue(handler, ".address");
111}
112
0ae59396
JU
113function getFirstPublicKey(handler) {
114 getFirstRowValue(handler, ".pubkey");
115}
116
1dafc30d
IC
117function getFirstPrivateKey(handler) {
118 getFirstRowValue(handler, ".privkey");
119}
120
0460b53f
IC
121function getFirstPath(handler) {
122 getFirstRowValue(handler, ".index");
123}
124
125function testColumnValuesAreInvisible(done, columnClassName) {
126 var selector = "." + columnClassName + " span";
127 driver.findElements(By.css(selector))
128 .then(function(els) {
129 els[0].getAttribute("class")
130 .then(function(classes) {
131 expect(classes).toContain("invisible");
132 done();
133 });
134 })
135}
136
137function testRowsAreInCorrectOrder(done) {
138 driver.findElements(By.css('.index'))
139 .then(function(els) {
140 var testRowAtIndex = function(i) {
141 if (i >= els.length) {
142 done();
143 }
144 else {
145 els[i].getText()
146 .then(function(actualPath) {
147 var noHardened = actualPath.replace(/'/g, "");
148 var pathBits = noHardened.split("/")
149 var lastBit = pathBits[pathBits.length-1];
150 var actualIndex = parseInt(lastBit);
151 expect(actualIndex).toBe(i);
152 testRowAtIndex(i+1);
153 });
154 }
155 }
156 testRowAtIndex(0);
157 });
158}
159
160function selectNetwork(name) {
161 driver.executeScript(function() {
162 var selectText = arguments[0];
163 $(".network option[selected]").removeAttr("selected");
164 $(".network option").filter(function(i,e) {
165 return $(e).html() == selectText;
166 }).prop("selected", true);
167 $(".network").trigger("change");
168 }, name);
169}
170
171function testEntropyType(done, entropyText, entropyTypeUnsafe) {
172 // entropy type is compiled into regexp so needs escaping
173 // see https://stackoverflow.com/a/2593661
174 var entropyType = (entropyTypeUnsafe+'').replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
175 driver.findElement(By.css('.use-entropy'))
176 .click();
177 driver.findElement(By.css('.entropy'))
178 .sendKeys(entropyText);
179 driver.sleep(generateDelay).then(function() {
180 driver.findElement(By.css('.entropy-container'))
181 .getText()
182 .then(function(text) {
183 var re = new RegExp("Entropy Type\\s+" + entropyType);
184 expect(text).toMatch(re);
185 done();
186 });
187 });
188}
189
190function testEntropyBits(done, entropyText, entropyBits) {
191 driver.findElement(By.css('.use-entropy'))
192 .click();
193 driver.findElement(By.css('.entropy'))
194 .sendKeys(entropyText);
195 driver.sleep(generateDelay).then(function() {
196 driver.findElement(By.css('.entropy-container'))
197 .getText()
198 .then(function(text) {
199 var re = new RegExp("Total Bits\\s+" + entropyBits);
200 expect(text).toMatch(re);
201 done();
202 });
203 });
204}
205
206function testEntropyFeedback(done, entropyDetail) {
207 // entropy type is compiled into regexp so needs escaping
208 // see https://stackoverflow.com/a/2593661
209 if ("type" in entropyDetail) {
210 entropyDetail.type = (entropyDetail.type+'').replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
211 }
212 driver.findElement(By.css('.use-entropy'))
213 .click();
214 driver.findElement(By.css('.entropy'))
215 .sendKeys(entropyDetail.entropy);
216 driver.sleep(entropyFeedbackDelay).then(function() {
217 driver.findElement(By.css('.entropy-container'))
218 .getText()
219 .then(function(text) {
220 driver.findElement(By.css('.phrase'))
221 .getAttribute("value")
222 .then(function(phrase) {
223 if ("filtered" in entropyDetail) {
224 var key = "Filtered Entropy";
225 var value = entropyDetail.filtered;
226 var reText = key + "\\s+" + value;
227 var re = new RegExp(reText);
228 expect(text).toMatch(re);
229 }
230 if ("type" in entropyDetail) {
231 var key = "Entropy Type";
232 var value = entropyDetail.type;
233 var reText = key + "\\s+" + value;
234 var re = new RegExp(reText);
235 expect(text).toMatch(re);
236 }
237 if ("events" in entropyDetail) {
238 var key = "Event Count";
239 var value = entropyDetail.events;
240 var reText = key + "\\s+" + value;
241 var re = new RegExp(reText);
242 expect(text).toMatch(re);
243 }
244 if ("bits" in entropyDetail) {
245 var key = "Total Bits";
246 var value = entropyDetail.bits;
247 var reText = key + "\\s+" + value;
248 var re = new RegExp(reText);
249 expect(text).toMatch(re);
250 }
251 if ("bitsPerEvent" in entropyDetail) {
252 var key = "Bits Per Event";
253 var value = entropyDetail.bitsPerEvent;
254 var reText = key + "\\s+" + value;
255 var re = new RegExp(reText);
256 expect(text).toMatch(re);
257 }
258 if ("words" in entropyDetail) {
259 var actualWords = phrase.split(/\s+/)
260 .filter(function(w) { return w.length > 0 })
261 .length;
262 expect(actualWords).toBe(entropyDetail.words);
263 }
264 if ("strength" in entropyDetail) {
265 var key = "Time To Crack";
266 var value = entropyDetail.strength;
267 var reText = key + "\\s+" + value;
268 var re = new RegExp(reText);
269 expect(text).toMatch(re);
270 }
271 done();
272 });
273 });
274 });
275}
276
277function testClientSelect(done, params) {
278 // set mnemonic and select bip32 tab
279 driver.findElement(By.css('#bip32-tab a'))
280 .click()
281 driver.findElement(By.css('.phrase'))
282 .sendKeys("abandon abandon ability");
283 driver.sleep(generateDelay).then(function() {
284 // BITCOIN CORE
285 // set bip32 client to bitcoin core
286 driver.executeScript(function() {
287 $("#bip32-client").val(arguments[0]).trigger("change");
288 }, params.selectValue);
289 driver.sleep(generateDelay).then(function() {
290 // check the derivation path is correct
291 driver.findElement(By.css("#bip32-path"))
292 .getAttribute("value")
293 .then(function(path) {
294 expect(path).toBe(params.bip32path);
295 // check hardened addresses is selected
296 driver.findElement(By.css(".hardened-addresses"))
297 .getAttribute("checked")
298 .then(function(isChecked) {
299 expect(isChecked).toBe(params.useHardenedAddresses);
300 // check input is readonly
301 driver.findElement(By.css("#bip32-path"))
302 .getAttribute("readonly")
303 .then(function(isReadonly) {
304 expect(isReadonly).toBe("true");
305 done();
306 });
307 });
308 });
309 });
310 });
311}
312
313// Tests
314
315describe('BIP39 Tool Tests', function() {
316
317 beforeEach(function(done) {
318 driver = newDriver();
d2f5d28e 319 driver.get(url).then(done);
0460b53f
IC
320 });
321
322 // Close the website after each test is run (so that it is opened fresh each time)
323 afterEach(function(done) {
324 driver.quit().then(done);
325 });
326
327// BEGIN TESTS
328
329// Page initially loads with blank phrase
330it('Should load the page', function(done) {
331 driver.findElement(By.css('.phrase'))
332 .getAttribute('value').then(function(value) {
333 expect(value).toBe('');
334 done();
335 });
336});
337
338// Page has text
339it('Should have text on the page', function(done) {
340 driver.findElement(By.css('body'))
341 .getText()
342 .then(function(text) {
343 var textToFind = "You can enter an existing BIP39 mnemonic";
344 expect(text).toContain(textToFind);
345 done();
346 });
347});
348
349// Entering mnemonic generates addresses
350it('Should have a list of addresses', function(done) {
351 driver.findElement(By.css('.phrase'))
352 .sendKeys('abandon abandon ability');
353 driver.sleep(generateDelay).then(function() {
354 driver.findElements(By.css('.address'))
355 .then(function(els) {
356 expect(els.length).toBe(20);
357 done();
358 })
359 });
360});
361
362// Generate button generates random mnemonic
363it('Should be able to generate a random mnemonic', function(done) {
364 // initial phrase is blank
365 driver.findElement(By.css('.phrase'))
366 .getAttribute("value")
367 .then(function(phrase) {
368 expect(phrase.length).toBe(0);
369 // press generate
370 driver.findElement(By.css('.generate')).click();
371 driver.sleep(generateDelay).then(function() {
372 // new phrase is not blank
373 driver.findElement(By.css('.phrase'))
374 .getAttribute("value")
375 .then(function(phrase) {
376 expect(phrase.length).toBeGreaterThan(0);
377 done();
378 });
379 });
380 });
381});
382
383// Mnemonic length can be customized
384it('Should allow custom length mnemonics', function(done) {
385 // set strength to 6
386 driver.executeScript(function() {
387 $(".strength option[selected]").removeAttr("selected");
388 $(".strength option[value=6]").prop("selected", true);
389 });
390 driver.findElement(By.css('.generate')).click();
391 driver.sleep(generateDelay).then(function() {
392 driver.findElement(By.css('.phrase'))
393 .getAttribute("value")
394 .then(function(phrase) {
395 var words = phrase.split(" ");
396 expect(words.length).toBe(6);
397 done();
398 });
399 });
400});
401
402// Passphrase can be set
403it('Allows a passphrase to be set', function(done) {
404 driver.findElement(By.css('.phrase'))
405 .sendKeys('abandon abandon ability');
406 driver.findElement(By.css('.passphrase'))
407 .sendKeys('secure_passphrase');
408 driver.sleep(generateDelay).then(function() {
409 getFirstAddress(function(address) {
410 expect(address).toBe("15pJzUWPGzR7avffV9nY5by4PSgSKG9rba");
411 done();
412 })
413 });
414});
415
416// Network can be set to networks other than bitcoin
417it('Allows selection of bitcoin testnet', function(done) {
418 var params = {
419 selectText: "BTC - Bitcoin Testnet",
1dafc30d 420 phrase: "abandon abandon ability",
0460b53f 421 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
1dafc30d
IC
422 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
423 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
0460b53f
IC
424 };
425 testNetwork(done, params);
426});
f1224201
IC
427it('Allows selection of bitcoin regtest', function(done) {
428 var params = {
429 selectText: "BTC - Bitcoin RegTest",
1dafc30d 430 phrase: "abandon abandon ability",
f1224201 431 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
1dafc30d
IC
432 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
433 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
f1224201
IC
434 };
435 testNetwork(done, params);
436});
0460b53f
IC
437it('Allows selection of litecoin', function(done) {
438 var params = {
439 selectText: "LTC - Litecoin",
1dafc30d 440 phrase: "abandon abandon ability",
0460b53f 441 firstAddress: "LQ4XU8RX2ULPmPq9FcUHdVmPVchP9nwXdn",
1dafc30d
IC
442 firstPubKey: "028e27f074a8f4b85c07f944330bd59ec1b2dd7f88bb28182720cab6d2a5a5ff30",
443 firstPrivKey: "T9ShR6Z2vyEMHVgpeoif857LdMUZDKvzux3QMvD4EjpPYUV5TuEx",
0460b53f
IC
444 };
445 testNetwork(done, params);
446});
b85da074
PD
447it('Allows selection of litecoin testnet', function(done) {
448 var params = {
449 selectText: "LTCt - Litecoin Testnet",
1dafc30d 450 phrase: "abandon abandon ability",
b85da074 451 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
1dafc30d
IC
452 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
453 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
b85da074
PD
454 };
455 testNetwork(done, params);
456});
0460b53f
IC
457it('Allows selection of ripple', function(done) {
458 var params = {
459 selectText: "XRP - Ripple",
0460b53f 460 phrase: "ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve",
1dafc30d
IC
461 firstAddress: "rLTFnqbmCVPGx6VfaygdtuKWJgcN4v1zRS",
462 firstPubKey: "0393ebfc2f75dd5757456a7ff7b907571693c9e3807ea386be68688b9c5fac072e",
463 firstPrivKey: "a869f16215c3cd7b6c5f448344bc8688cba70b734bbe189b2c48098a2c15dd53",
0460b53f
IC
464 };
465 testNetwork(done, params);
466});
f3101bd3
LL
467it('Allows selection of jingtum', function(done) {
468 var params = {
469 selectText: "SWTC - Jingtum",
470 phrase: "ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve",
471 firstAddress: "jffSYWyxcr9t6DHHdAj2yUXrCsioU66xjm",
472 firstPubKey: "029dfcb278148874dd7e7109001593d7f410909e7bbcbcc3cc19ecb476c8bf8d84",
473 firstPrivKey: "02bdfe14bdd75514e714db7b8cbbae87b2ab8d7a050c3e441d687b7c4ef17d1f",
474 };
475 testNetwork(done, params);
476});
45e40c28
C
477it('Allows selection of casinocoin', function(done) {
478 var params = {
479 selectText: "CSC - CasinoCoin",
45e40c28 480 phrase: "ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve",
1dafc30d
IC
481 firstAddress: "c3P5EUb27Pzk9dcGt4s7zQDQj4sC6Y81mT",
482 firstPubKey: "038ca5b4ff9d58059423b5a03deb2a9b755a311e97dc36ae8ab3d4ed93c808daf7",
483 firstPrivKey: "127fa93d8e4f434ce76faebc961df7ec081a68de19e96f36d38766e468b35920",
45e40c28
C
484 };
485 testNetwork(done, params);
0460b53f
IC
486});
487it('Allows selection of dogecoin', function(done) {
488 var params = {
489 selectText: "DOGE - Dogecoin",
1dafc30d 490 phrase: "abandon abandon ability",
0460b53f 491 firstAddress: "DPQH2AtuzkVSG6ovjKk4jbUmZ6iXLpgbJA",
1dafc30d
IC
492 firstPubKey: "02d3d540cc62d5102887d26f2b129947f2bd2306dd9b76242c61ca65e5ca408899",
493 firstPrivKey: "QNv5TAoR6EodkN86FXaLDosy4Rau4sJ46JxE9NtUYtmKPLTuRmpc",
0460b53f
IC
494 };
495 testNetwork(done, params);
496});
b85da074
PD
497it('Allows selection of dogecoin testnet', function(done) {
498 var params = {
b244e344 499 selectText: "DOGEt - Dogecoin Testnet",
1dafc30d 500 phrase: "abandon abandon ability",
b85da074 501 firstAddress: "niHnSJKHdwDyDxRMLBJrtNqpvHEsAFWe6B",
1dafc30d
IC
502 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
503 firstPrivKey: "cnCsx3G1NgXZGhijCRNupM1tts1aDNnQsr9e5jB5JnYv2yEDTwT5",
b85da074
PD
504 };
505 testNetwork(done, params);
506});
40209fd8 507it('Allows selection of denarius', function(done) {
508 var params = {
509 selectText: "DNR - Denarius",
1dafc30d 510 phrase: "abandon abandon ability",
50289881 511 firstAddress: "DFdFMVUMzU9xX88EywXvAGwjiwpxyh9vKb",
1dafc30d
IC
512 firstPubKey: "0285cda45afbf0b8897a5cedf97cbb1e2b63b0ac28cd1e919ea60fb748bc61e8d5",
513 firstPrivKey: "QX3Dy3b7C3vNWYDBPk8Hewp3ii2NukAopsHFCCsLZ6Ss77vzdoMj",
40209fd8 514 };
515 testNetwork(done, params);
516});
0460b53f
IC
517it('Allows selection of shadowcash', function(done) {
518 var params = {
519 selectText: "SDC - ShadowCash",
1dafc30d 520 phrase: "abandon abandon ability",
0460b53f 521 firstAddress: "SiSZtfYAXEFvMm3XM8hmtkGDyViRwErtCG",
1dafc30d
IC
522 firstPubKey: "024d48659b83ff20fc250e7f111742e652aa71b73f3ff8d41b5f3ea99cb8ef9e3c",
523 firstPrivKey: "VJzJ98j5pdjzpY9DVRvU2RiRcvQ4t2oYYd9w9WUdiUJjvPs9X83v",
0460b53f
IC
524 };
525 testNetwork(done, params);
526});
527it('Allows selection of shadowcash testnet', function(done) {
528 var params = {
529 selectText: "SDC - ShadowCash Testnet",
1dafc30d 530 phrase: "abandon abandon ability",
0460b53f 531 firstAddress: "tM2EDpVKaTiEg2NZg3yKg8eqjLr55BErHe",
1dafc30d
IC
532 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
533 firstPrivKey: "erKhxJJbpqMUuwuUwUuQxnLiNwphuEabA2sTv62QBV6syc1coTeS",
0460b53f
IC
534 };
535 testNetwork(done, params);
536});
537it('Allows selection of viacoin', function(done) {
538 var params = {
539 selectText: "VIA - Viacoin",
1dafc30d 540 phrase: "abandon abandon ability",
0460b53f 541 firstAddress: "Vq9Eq4N5SQnjqZvxtxzo7hZPW5XnyJsmXT",
1dafc30d
IC
542 firstPubKey: "0223abcae630e23afd7ce0dc399906ca00f984b3be475fbf3f3995e708b0b75392",
543 firstPrivKey: "WX5sbp26uyFDa4Bt5DgPqvQuRjrwc95DYzG7ZHXsdtooFAUhd3xV",
0460b53f
IC
544 };
545 testNetwork(done, params);
546});
547it('Allows selection of viacoin testnet', function(done) {
548 var params = {
549 selectText: "VIA - Viacoin Testnet",
1dafc30d 550 phrase: "abandon abandon ability",
0460b53f 551 firstAddress: "tM2EDpVKaTiEg2NZg3yKg8eqjLr55BErHe",
1dafc30d
IC
552 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
553 firstPrivKey: "erKhxJJbpqMUuwuUwUuQxnLiNwphuEabA2sTv62QBV6syc1coTeS",
0460b53f
IC
554 };
555 testNetwork(done, params);
556});
557it('Allows selection of jumbucks', function(done) {
558 var params = {
559 selectText: "JBS - Jumbucks",
1dafc30d 560 phrase: "abandon abandon ability",
0460b53f 561 firstAddress: "JLEXccwDXADK4RxBPkRez7mqsHVoJBEUew",
1dafc30d
IC
562 firstPubKey: "02e9e84c68e2247d87c863f5697676af9c0f2dacc3fe774a24188f37311b679059",
563 firstPrivKey: "SPcmbuyWp5ukQLbnDyaVr8WuPfmLUEVZN9e2r7X96i31twrn8BBQ",
0460b53f
IC
564 };
565 testNetwork(done, params);
566});
567it('Allows selection of clam', function(done) {
568 var params = {
569 selectText: "CLAM - Clams",
1dafc30d 570 phrase: "abandon abandon ability",
0460b53f 571 firstAddress: "xCp4sakjVx4pUAZ6cBCtuin8Ddb6U1sk9y",
1dafc30d
IC
572 firstPubKey: "03f6189ef4ae7f15ead1a579201c63845cf3efc4745d6abf58aa5584163b2dd070",
573 firstPrivKey: "LoqdpeyYzFoGqQag6Ya4BkMT9KQJK1ygQFbKj3x2meaWe6Xzen15",
0460b53f
IC
574 };
575 testNetwork(done, params);
576});
bf13c95f
PC
577it('Allows selection of crown', function(done) {
578 var params = {
579 selectText: "CRW - Crown (Legacy)",
1dafc30d 580 phrase: "abandon abandon ability",
b85da074 581 firstAddress: "18pWSwSUAQdiwMHUfFZB1fM2xue9X1FqE5",
1dafc30d
IC
582 firstPubKey: "034246d561c53eb1a2afbd9df6403d6fd8a70b36016e0307eae28095a465eaa602",
583 firstPrivKey: "L2oSEFimb9QJB38eGD1xL8zKZAa1cTYGFGXMi4yJBqKmYvpjcuJs",
bf13c95f
PC
584 };
585 testNetwork(done, params);
586});
0460b53f
IC
587it('Allows selection of crown', function(done) {
588 var params = {
589 selectText: "CRW - Crown",
1dafc30d 590 phrase: "abandon abandon ability",
bf13c95f 591 firstAddress: "CRWKnVmVhvH1KWTYe6sq8xV4dFGcFpBEEkPQ",
1dafc30d
IC
592 firstPubKey: "034246d561c53eb1a2afbd9df6403d6fd8a70b36016e0307eae28095a465eaa602",
593 firstPrivKey: "L2oSEFimb9QJB38eGD1xL8zKZAa1cTYGFGXMi4yJBqKmYvpjcuJs",
0460b53f
IC
594 };
595 testNetwork(done, params);
596});
597it('Allows selection of dash', function(done) {
598 var params = {
599 selectText: "DASH - Dash",
1dafc30d 600 phrase: "abandon abandon ability",
0460b53f 601 firstAddress: "XdbhtMuGsPSkE6bPdNTHoFSszQKmK4S5LT",
1dafc30d
IC
602 firstPubKey: "0270009f37337f15603103ce90111f32f44ddd87525017a93ec6170abb784be2ff",
603 firstPrivKey: "XGqEiiVo1w6Us3YN8KRthyLxdnBH1W6JpLkcxoX2w2zQMYFDKSua",
0460b53f
IC
604 };
605 testNetwork(done, params);
606});
607it('Allows selection of dash testnet', function(done) {
608 var params = {
609 selectText: "DASH - Dash Testnet",
1dafc30d 610 phrase: "abandon abandon ability",
0460b53f 611 firstAddress: "yaR52EN4oojdJfBgzWJTymC4uuCLPT29Gw",
1dafc30d
IC
612 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
613 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
0460b53f
IC
614 };
615 testNetwork(done, params);
616});
617it('Allows selection of game', function(done) {
618 var params = {
619 selectText: "GAME - GameCredits",
1dafc30d 620 phrase: "abandon abandon ability",
0460b53f 621 firstAddress: "GSMY9bAp36cMR4zyT4uGVS7GFjpdXbao5Q",
1dafc30d
IC
622 firstPubKey: "03d173ea00b6688f7d7c2afdcbc720b227aa8b9b87e5f7145139acaa9f0a0dc447",
623 firstPrivKey: "Raixm9wAKFjw9rnPKcXkymQ5iEdMZBRdrvjm8zLpqacS7LUeXBwZ",
0460b53f
IC
624 };
625 testNetwork(done, params);
626});
91eb2cbc 627it('Allows selection of komodo', function(done) {
aab3645f 628 var params = {
629 selectText: "KMD - Komodo",
1dafc30d 630 phrase: "abandon abandon ability",
5c1003dd 631 firstAddress: "RMPPzJwAjPVZZAwJvXivHJGGjdCx6WBD2t",
1dafc30d
IC
632 firstPubKey: "03bd652582a446ce9a697e74da9429eabe6e70bbe3d300b9ef227df7430e83b6fc",
633 firstPrivKey: "UxHzU8KCfSDrQgreujv1vGrqpbvx5jrjSz7bNWjWoT7D3V4uWo4i",
aab3645f 634 };
635 testNetwork(done, params);
636});
0460b53f
IC
637it('Allows selection of namecoin', function(done) {
638 var params = {
639 selectText: "NMC - Namecoin",
1dafc30d 640 phrase: "abandon abandon ability",
0460b53f 641 firstAddress: "Mw2vK2Bvex1yYtYF6sfbEg2YGoUc98YUD2",
1dafc30d
IC
642 firstPubKey: "0398066486fe87cbcb9da8e29d180b44937b6c43ad1ec4d3bddd77b7905765937e",
643 firstPrivKey: "L4A8sSkrGndiXyZdj6Fnju8Wu76s96cdHHmPxV3C5M2R2w4GVNco",
0460b53f
IC
644 };
645 testNetwork(done, params);
646});
c51bb4f9
IC
647it('Allows selection of onixcoin', function(done) {
648 var params = {
649 selectText: "ONX - Onixcoin",
1dafc30d 650 phrase: "abandon abandon ability",
c51bb4f9 651 firstAddress: "XGwMqddeKjT3ddgX73QokjVbCL3aK6Yxfk",
1dafc30d
IC
652 firstPubKey: "035349f2912e3290898d6e00807704254f256127e59a2930367c403b3b9ae5afbd",
653 firstPrivKey: "X8hzuyWvi2F6UQQ5MNiQo2taYwKwZvJRurTBV6smahx2ikLksLPm",
c51bb4f9
IC
654 };
655 testNetwork(done, params);
656});
ae27549b
JLEP
657it('Allows selection of lkrcoin', function(done) {
658 var params = {
659 selectText: "LKR - Lkrcoin",
1dafc30d 660 phrase: "abandon abandon ability",
ae27549b 661 firstAddress: "LfbT296e7AEEnn4bYDbL535Nd8P9g98CdJ",
1dafc30d
IC
662 firstPubKey: "03328d3800456372224ec54b033ace88bfd4c19a684204147404063839a02ab7e8",
663 firstPrivKey: "TANp1xRA3qCdRfZc8THM8HMKZivevNz8BEXmA8YxemqXj1YzHmDS",
ae27549b
JLEP
664 };
665 testNetwork(done, params);
666});
3e7b1ac9
JLE
667it('Allows selection of bolivarcoin', function(done) {
668 var params = {
669 selectText: "BOLI - Bolivarcoin",
1dafc30d 670 phrase: "abandon abandon ability",
575ee4de 671 firstAddress: "bbKzCAUR7hZ3nqfffy7VgrSz8LmAP3S5mK",
1dafc30d
IC
672 firstPubKey: "0328a72574c709cc183ffccb8f17c0383caf937ce67e7c3411cdf8ca2e5fc2bf8f",
673 firstPrivKey: "YYwA99QgwZu9zNJBxYbG43GzeE8kEREb7S1dpnFcBJG1W5sR1W9T",
3e7b1ac9
JLE
674 };
675 testNetwork(done, params);
676});
0460b53f
IC
677it('Allows selection of peercoin', function(done) {
678 var params = {
679 selectText: "PPC - Peercoin",
1dafc30d 680 phrase: "abandon abandon ability",
0460b53f 681 firstAddress: "PVAiioTaK2eDHSEo3tppT9AVdBYqxRTBAm",
1dafc30d
IC
682 firstPubKey: "02035b1d7f7683a03be1a6009c4572b24a3ba114afb8caff278881af77c4cba362",
683 firstPrivKey: "UCcQgeBjh7GpqukSRcXrx54Q41BJYkWY6PSdm6CtCUFYD5bS9qZS",
0460b53f
IC
684 };
685 testNetwork(done, params);
686});
687it('Allows selection of ethereum', function(done) {
688 var params = {
689 selectText: "ETH - Ethereum",
1dafc30d 690 phrase: "abandon abandon ability",
c394ec3c 691 firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772",
1dafc30d
IC
692 firstPubKey: "0x03e723e5b3aa7d72213f01139aa4783e1b34f74e1a04534e3fd8e29bfe2768af8a",
693 firstPrivKey: "0x8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7",
0460b53f
IC
694 };
695 testNetwork(done, params);
0460b53f
IC
696});
697it('Allows selection of slimcoin', function(done) {
698 var params = {
699 selectText: "SLM - Slimcoin",
1dafc30d 700 phrase: "abandon abandon ability",
0460b53f 701 firstAddress: "SNzPi1CafHFm3WWjRo43aMgiaEEj3ogjww",
1dafc30d
IC
702 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
703 firstPrivKey: "BTPTMvgoTgsAxpoQE4VCJAq5TYMnLbX5mDodFSaF7ceq6suK13pk",
0460b53f
IC
704 };
705 testNetwork(done, params);
706});
707it('Allows selection of slimcoin testnet', function(done) {
708 var params = {
709 selectText: "SLM - Slimcoin Testnet",
1dafc30d 710 phrase: "abandon abandon ability",
0460b53f 711 firstAddress: "n3nMgWufTek5QQAr6uwMhg5xbzj8xqc4Dq",
1dafc30d
IC
712 firstPubKey: "024557a9693da0354c5f77e57a0b2aac9c20b15cc322bec85faa2ec45438415c90",
713 firstPrivKey: "DvJeEkHzJzysYFtUdgETgWHprG63ATFWRtG2R9xfBJ6bZ2fHcJSU",
0460b53f
IC
714 };
715 testNetwork(done, params);
716});
717it('Allows selection of bitcoin cash', function(done) {
718 var params = {
719 selectText: "BCH - Bitcoin Cash",
1dafc30d 720 phrase: "abandon abandon ability",
e0f91e20 721 firstAddress: "bitcoincash:qzlquk7w4hkudxypl4fgv8x279r754dkvur7jpcsps",
1dafc30d
IC
722 firstPubKey: "02b1cbe8aba996d77d4c33fa2e3bf1f6ae80576aa587aa74d87092b1dbdf2aa067",
723 firstPrivKey: "KxbCheZjSzF48zyka4QK1ToSYmz3REZiePU6FPc99qqFs8WuHyVY",
0460b53f
IC
724 };
725 testNetwork(done, params);
726});
d0889ab9 727
728it('Allows selection of simpleledger(SLP)', function(done) {
729 var params = {
730 selectText: "SLP - Simple Ledger Protocol",
1dafc30d 731 phrase: "abandon abandon ability",
d0889ab9 732 firstAddress: "simpleledger:qrtffz6ajfsn74gpur7y3epjquz42pvww5acewqmre",
1dafc30d
IC
733 firstPubKey: "03c8310ef78a379ce91ed3d7998e1f356dbcb089869f9c9d8f8571b0d8414acbdc",
734 firstPrivKey: "L2q3Bvqe6kBRSqUaJpew7pLacnWjsJdUk7hwV1bTdDu665gXHDj6",
d0889ab9 735 };
736 testNetwork(done, params);
737});
738
0460b53f
IC
739it('Allows selection of myriadcoin', function(done) {
740 var params = {
741 selectText: "XMY - Myriadcoin",
1dafc30d 742 phrase: "abandon abandon ability",
0460b53f 743 firstAddress: "MJEswvRR46wh9BoiVj9DzKYMBkCramhoBV",
1dafc30d
IC
744 firstPubKey: "037ad798b3173b0af46acddd1501ed53ce654840f29e4710c3081134b1193f811b",
745 firstPrivKey: "TMMUiQ3yqes7wjWvCro1Ghbu7eFXm8wQgX89v4Wgxm5qFZJAVEVD",
0460b53f
IC
746 };
747 testNetwork(done, params);
748});
749it('Allows selection of pivx', function(done) {
750 var params = {
751 selectText: "PIVX - PIVX",
1dafc30d 752 phrase: "abandon abandon ability",
0460b53f 753 firstAddress: "DBxgT7faCuno7jmtKuu6KWCiwqsVPqh1tS",
1dafc30d
IC
754 firstPubKey: "022583478df6a5ac35380e7cdcd9f7ab0d43f5eb82452d4aa1f74f04c810fcde8c",
755 firstPrivKey: "YVdYDdkuTbra4EVRLWoBUCCm9WMLuXZy3ZpK6iDBCi13ttreZ4cD",
0460b53f
IC
756 };
757 testNetwork(done, params);
758});
759it('Allows selection of pivx testnet', function(done) {
760 var params = {
761 selectText: "PIVX - PIVX Testnet",
1dafc30d 762 phrase: "abandon abandon ability",
0460b53f 763 firstAddress: "yB5U384n6dGkVE3by5y9VdvHHPwPg68fQj",
1dafc30d
IC
764 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
765 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
0460b53f
IC
766 };
767 testNetwork(done, params);
768});
769it('Allows selection of maza', function(done) {
770 var params = {
771 selectText: "MAZA - Maza",
1dafc30d 772 phrase: "abandon abandon ability",
0460b53f 773 firstAddress: "MGW4Bmi2NEm4PxSjgeFwhP9vg18JHoRnfw",
1dafc30d
IC
774 firstPubKey: "022b9d4376588a736d43301a659ef288302472aeff6344f5d8a5bfe376733e0da8",
775 firstPrivKey: "aH9R7KaHm6D3p44zDM2Vf6vY9x7bHVdaZGkBb2rHeXAZzEKnQ66G",
0460b53f
IC
776 };
777 testNetwork(done, params);
778});
7d4e4cbe 779it('Allows selection of FIX', function(done) {
780 var params = {
781 selectText: "FIX - FIX",
1dafc30d 782 phrase: "abandon abandon ability",
7d4e4cbe 783 firstAddress: "FS5MEU8fs5dUvsaSCSusV8RQtC8j2h3JEh",
1dafc30d
IC
784 firstPubKey: "026003e9a2bc6b9bd18bd7f8826cebbfd4d0554995141920eda2cb723ae53337ee",
785 firstPrivKey: "9uFsoZFuCUCMRF93aNKsLvYTX8jwYoKPbgENtdYURH1GCJvDNkps",
7d4e4cbe 786 };
787 testNetwork(done, params);
788});
789it('Allows selection of FIX testnet', function(done) {
790 var params = {
791 selectText: "FIX - FIX Testnet",
1dafc30d 792 phrase: "abandon abandon ability",
7d4e4cbe 793 firstAddress: "XpnU1HHdNG5YxvG9Rez4wjmidchxqnZaNa",
1dafc30d
IC
794 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
795 firstPrivKey: "cBtMfPpQg4s1Ndfez7oLdedwu8CxshhWE5f7qunhLsY4ueNvKKyM",
7d4e4cbe 796 };
797 testNetwork(done, params);
798});
0460b53f
IC
799it('Allows selection of fujicoin', function(done) {
800 var params = {
801 selectText: "FJC - Fujicoin",
1dafc30d 802 phrase: "abandon abandon ability",
0460b53f 803 firstAddress: "FgiaLpG7C99DyR4WnPxXedRVHXSfKzUDhF",
1dafc30d
IC
804 firstPubKey: "022b41c7ecbae94c0c926dda9304ccf6e6b22f6f6879e2fc52823b154d118a290e",
805 firstPrivKey: "RMFbyVXUF5Ndji4H75jXrnXi9KH6QFKgA6zDfuisa57BrHCN8MSG",
0460b53f
IC
806 };
807 testNetwork(done, params);
808});
809it('Allows selection of nubits', function(done) {
810 var params = {
811 selectText: "USNBT - NuBits",
1dafc30d 812 phrase: "abandon abandon ability",
0460b53f 813 firstAddress: "BLxkabXuZSJSdesLD7KxZdqovd4YwyBTU6",
1dafc30d
IC
814 firstPubKey: "03a37da71e839af0e3fc7cef0f3a82fbff64e372eb7fd067dc452d13b7b269e858",
815 firstPrivKey: "PJ9vZVjQWXNQDbfZbmFiDTcUGpJHiWc923LcX7oKSYHuLRvWhdJ3",
0460b53f
IC
816 };
817 testNetwork(done, params);
818});
1f354b03
IC
819it('Allows selection of bitcoin gold', function(done) {
820 var params = {
821 selectText: "BTG - Bitcoin Gold",
1dafc30d 822 phrase: "abandon abandon ability",
88ae1301 823 firstAddress: "GdDqug4WUsn5syNbSTHatNn4XnuwZtzedx",
1dafc30d
IC
824 firstPubKey: "02e48e4053db573bb74fb67a47c91443ec7c0ed5f3f25aa8a408bad798f0230086",
825 firstPrivKey: "KwxCxhXq72JzuDNEj2VzzjKr1XU4tvpuksdEKBhngFuSEK8XWCBa",
1f354b03
IC
826 };
827 testNetwork(done, params);
828});
5a10834a
IC
829it('Allows selection of monacoin', function(done) {
830 var params = {
831 selectText: "MONA - Monacoin",
1dafc30d 832 phrase: "abandon abandon ability",
5a10834a 833 firstAddress: "MKMiMr7MyjDKjJbCBzgF6u4ByqTS4NkRB1",
1dafc30d
IC
834 firstPubKey: "020b104320aaeb1ec921874e96cafd5add3c0de8d785cd01dc93e5f2b31fa352f4",
835 firstPrivKey: "T45jYrkbSutUvNF1cytpmbvyLR7qWWEXg5r7udj4mqrauzEsxHAG",
5a10834a
IC
836 };
837 testNetwork(done, params);
838});
423fb969
IC
839it('Allows selection of AXE', function(done) {
840 var params = {
841 selectText: "AXE - Axe",
1dafc30d 842 phrase: "abandon abandon ability",
2ab3faf4 843 firstAddress: "PScwtLUyPiGrqtKXrHF37DGETLXLZdw4up",
1dafc30d
IC
844 firstPubKey: "0288ea360af543ff72c79560f9f0ed8ed5386681fc3cc5edc84921c1118d989bce",
845 firstPrivKey: "XJKs1GN3sABamT6daKdRSjBgE2XPrnwBurWyBSVJht6zv5kS2dZd",
423fb969
IC
846 };
847 testNetwork(done, params);
848});
048721a6
IC
849it('Allows selection of BlackCoin', function(done) {
850 var params = {
851 selectText: "BLK - BlackCoin",
1dafc30d 852 phrase: "abandon abandon ability",
048721a6 853 firstAddress: "B5MznAKwj7uQ42vDz3w4onhBXPcqhTwJ9z",
1dafc30d
IC
854 firstPubKey: "03f500b73bad9955fbe26a27bbeefa4ec00119532449eeccfb1f021cafa638d046",
855 firstPrivKey: "Piyy1AGXZ9wRJdiUMPm97WAmN1DHvSxtjCpkYrtX2qyvc4huUxe9",
048721a6
IC
856 };
857 testNetwork(done, params);
858});
e5167afe
IC
859it('Allows selection of Neblio', function(done) {
860 var params = {
861 selectText: "NEBL - Neblio",
1dafc30d 862 phrase: "abandon abandon ability",
e5167afe 863 firstAddress: "NefkeEEvhusbHMmTRrxx7H9wFnUXd8qQsE",
1dafc30d
IC
864 firstPubKey: "0274d827c4aef5b009e0c5ddd3c852a9a0bd91cb37cfb72a5f07d570e4ce7e1569",
865 firstPrivKey: "TpEwnrinfiH7AMDJLvFzNoW1duU2rg7hox6tgF4wMmcnQSmNmQZM",
e5167afe
IC
866 };
867 testNetwork(done, params);
868});
680b94c1
IC
869it('Allows selection of Beetlecoin', function(done) {
870 var params = {
871 selectText: "BEET - Beetlecoin",
1dafc30d 872 phrase: "abandon abandon ability",
680b94c1 873 firstAddress: "BVmtbEsGrjpknprmpHFq26z4kYHJUFHE71",
1dafc30d
IC
874 firstPubKey: "03e8e78daa2d96e390b55426d6b4cad887bdc028a394847308ad4910d00875b04c",
875 firstPrivKey: "Pkb5yU9mK1CzSQuYKm6CYmaJxDEiycipm426F3EhYtHPJdBJxViG",
680b94c1
IC
876 };
877 testNetwork(done, params);
878});
85f762c9 879it('Allows selection of Adcoin', function(done) {
880 var params = {
881 selectText: "ACC - Adcoin",
1dafc30d 882 phrase: "abandon abandon ability",
85f762c9 883 firstAddress: "AcEDM6V5sF4kFHC76MJjjfProtS5Sw2qcd",
1dafc30d
IC
884 firstPubKey: "026625ec7d1b747bd361a57c593fd8384fcdc65696aed5b72f64e73dbf2b24e854",
885 firstPrivKey: "T4B9YVUonpM7tQQEkqv4QjMxWJqxyqcJt78H7XqsRXRvuvd2XGog",
85f762c9 886 };
887 testNetwork(done, params);
888});
889it('Allows selection of Asiacoin', function(done) {
890 var params = {
891 selectText: "AC - Asiacoin",
1dafc30d 892 phrase: "abandon abandon ability",
85f762c9 893 firstAddress: "ALupuEEz7kJjQTAvmtcBMBVuEjPa7GqZzE",
1dafc30d
IC
894 firstPubKey: "0338b40a58e69c087f5092223555c1ce48988e5b2b6bb15f42d881109aa1499d39",
895 firstPrivKey: "PNRyYtznRQBbD3GNCt86uHdWEHyeFr7ZszqckXCt7ZXEcRF29Z4X",
85f762c9 896 };
897 testNetwork(done, params);
898});
31264e8b
PT
899it('Allows selection of Aryacoin', function(done) {
900 var params = {
901 selectText: "ARYA - Aryacoin",
1dafc30d 902 phrase: "abandon abandon ability",
31264e8b 903 firstAddress: "Abr6gX25KaU9BpwD34UfsL3A4n89NvYYSf",
1dafc30d
IC
904 firstPubKey: "03973c0669f332a69e8f0661ffddc7fd86dd7fdb768a40608fcbf0efceebf900e0",
905 firstPrivKey: "PNukdY6bBGJhFDnJGeRFrJ5ptj3WD1xZHbPv8ubjMknFz2L6sZFi",
31264e8b
PT
906 };
907 testNetwork(done, params);
908});
85f762c9 909it('Allows selection of Auroracoin', function(done) {
910 var params = {
911 selectText: "AUR - Auroracoin",
1dafc30d 912 phrase: "abandon abandon ability",
85f762c9 913 firstAddress: "ANuraS6F4Jpi413FEnavjYkKYJJRHkgYCm",
1dafc30d
IC
914 firstPubKey: "03f843b9258aa001f24ebe3a77b6746a20ffda9f60934da8ed44f83d081977fe4b",
915 firstPrivKey: "PQyDA9ewjeMNvNy6ZaUEWVwTNHFPp2J3F131msPx4XFNgMuKMaXF",
85f762c9 916 };
917 testNetwork(done, params);
918});
919it('Allows selection of Bata', function(done) {
920 var params = {
921 selectText: "BTA - Bata",
1dafc30d 922 phrase: "abandon abandon ability",
85f762c9 923 firstAddress: "BGxBdNeYPtF3GCuTtZBPQdFxCkdBYSF3fj",
1dafc30d
IC
924 firstPubKey: "033f35cba191c80f5246113ef33cd8a1e2449d304ad25afbd25e86aff333f07472",
925 firstPrivKey: "RKbjo1gnyFsuEimVGGybBfbvcp6fCCY35D9SY38xLAwrSrQ3B5v9",
85f762c9 926 };
927 testNetwork(done, params);
928});
929it('Allows selection of Belacoin', function(done) {
930 var params = {
931 selectText: "BELA - Belacoin",
1dafc30d 932 phrase: "abandon abandon ability",
85f762c9 933 firstAddress: "BEeetqpNffdzeknSpNmQp5KAFh2KK1Qx7S",
1dafc30d
IC
934 firstPubKey: "039d895165f9c8218c12499820b783d920b632b49b0ca70b9352171b2f4273bf0b",
935 firstPrivKey: "PeicG333UdMZ1t5PoHCt2Yepc7X15wHPawvsusWWspKCw99Dfqmx",
85f762c9 936 };
937 testNetwork(done, params);
938});
939it('Allows selection of Bitcoin Atom', function(done) {
940 var params = {
941 selectText: "BCA - Bitcoin Atom",
1dafc30d 942 phrase: "abandon abandon ability",
85f762c9 943 firstAddress: "AMy6qMbJeC4zsGRL6iWszmeCdQH65fgfih",
1dafc30d
IC
944 firstPubKey: "02efe1e4f85342c8c57c4d6e6f48758f7be4e059d61586f769e33dd5bf0aa78a04",
945 firstPrivKey: "Ky4hiMBLXZEj3TFknsuvceh16ttBfw9U7ReMgGWBtoYg1LPuxxUq",
85f762c9 946 };
947 testNetwork(done, params);
948});
949it('Allows selection of Bitcoinplus', function(done) {
950 var params = {
951 selectText: "XBC - Bitcoinplus",
1dafc30d 952 phrase: "abandon abandon ability",
85f762c9 953 firstAddress: "B7FSynZoDbEwTCSgsXq9nJ5ue8owYLVL8r",
1dafc30d
IC
954 firstPubKey: "03ca81fbc766f6a38c7d122facd68c87ceeb57a0ee7d58927132a77704dfe88f92",
955 firstPrivKey: "Pjjssfh7oJnFZfcxxooUvUqqxtb35oiurrDm3rEHCGpyCW1tPEG2",
85f762c9 956 };
957 testNetwork(done, params);
958});
1e2cc748 959it('Allows selection of Bitcoin Private', function(done) {
960 var params = {
961 selectText: "BTCP - Bitcoin Private",
1dafc30d 962 phrase: "abandon abandon ability",
1e2cc748 963 firstAddress: "b1M3PbiXXyN6Hdivdw5rJv5VKpLjPzhm4jM",
1dafc30d
IC
964 firstPubKey: "03b4dae910c8563ae77e4c665022f8afbf8bcc659ce3bc790a74956e5ebba932af",
965 firstPrivKey: "L5U3Rfy7otN5JQP9iveYkT1pB9va71uebx7VE8reBbiAofKCiCxk",
1e2cc748 966 };
967 testNetwork(done, params);
968});
31264e8b
PT
969it('Allows selection of Bitcoin SV', function(done) {
970 var params = {
971 selectText: "BSV - BitcoinSV",
1dafc30d 972 phrase: "abandon abandon ability",
31264e8b 973 firstAddress: "1N4mgtE5yxifch9jWs7Sds6oVqxdy2t576",
1dafc30d
IC
974 firstPubKey: "0280bbf3fd6f1c7ab4b04cca0ab6e23487fafa9c5edea3d1882d8e967111ee8b38",
975 firstPrivKey: "L3oBCYKNpT6uc5qeYGN9NFNyvQsTUGBV7v2cqeB76GfWzuGJDYeY",
31264e8b
PT
976 };
977 testNetwork(done, params);
978});
1e2cc748 979it('Allows selection of Bitcoinz', function(done) {
980 var params = {
981 selectText: "BTCZ - Bitcoinz",
1dafc30d 982 phrase: "abandon abandon ability",
1e2cc748 983 firstAddress: "t1X2YQoxs8cYRo2oaBYgVEwW5QNjCC59NYc",
1dafc30d
IC
984 firstPubKey: "033eb18e80984fa3fbaeee1096977d6b169399123641dc97ceba00910c8ad211d4",
985 firstPrivKey: "L1qcDeAXPxMSgnXvquJo5Dd4myFxxxrWNgi99Ns26GPNyRW7eVuZ",
1e2cc748 986 };
987 testNetwork(done, params);
988});
5ed5f661
D
989it('Allows selection of BitCloud', function(done) {
990 var params = {
991 selectText: "BTDX - BitCloud",
1dafc30d 992 phrase: "abandon abandon ability",
33816040 993 firstAddress: "BHbWitXCNgTf1BhsRDNMP186EeibuzmrBi",
1dafc30d
IC
994 firstPubKey: "032ca47d6a35bd01ba3832791bcb0ee5676b1a63a491b42c39a4b214d78bf64fd3",
995 firstPrivKey: "PgTZBt9exdzZSWfhdwXKVmz5WBFjAJFjNLa9552FCx1X6mnztNSL",
5ed5f661
D
996 };
997 testNetwork(done, params);
998});
85f762c9 999it('Allows selection of Bitcore', function(done) {
1000 var params = {
1001 selectText: "BTX - Bitcore",
1dafc30d 1002 phrase: "abandon abandon ability",
b7de1f3d 1003 firstAddress: "2Rgp5Znhpy34TK4QmPkfCiYs9r4KovfTH9",
1dafc30d
IC
1004 firstPubKey: "02caa73ee839b074c8d353f6869222bafd8ce5ad3bcb1c0bd404d108390b2a6438",
1005 firstPrivKey: "L4286qDXUJfVq4ebbHHUVDoFpEudJj81FUWkjwNeQ132gFCDGUBj",
85f762c9 1006 };
1007 testNetwork(done, params);
1008});
1009it('Allows selection of Bitsend', function(done) {
1010 var params = {
1011 selectText: "BSD - Bitsend",
1dafc30d 1012 phrase: "abandon abandon ability",
85f762c9 1013 firstAddress: "iBPk7LYjDun3EPk7CRR8UUmnPoceVc1bp2",
1dafc30d
IC
1014 firstPubKey: "03e6b12ed885225302fc126980e42abfee1c3350b77b61b01abcf200b5e9a9fee5",
1015 firstPrivKey: "XCTxjfV68KfXKySGJyZTYvYMBDFKSPJu41W3SN1bRpJch5R498mC",
85f762c9 1016 };
1017 testNetwork(done, params);
1018});
1019it('Allows selection of Britcoin', function(done) {
1020 var params = {
1021 selectText: "BRIT - Britcoin",
1dafc30d 1022 phrase: "abandon abandon ability",
85f762c9 1023 firstAddress: "B6Aue4J2XLs1f1dtD4H1SHYFfh4XrmEbrw",
1dafc30d
IC
1024 firstPubKey: "035dee3aad6f635aeffe61a28e82a58271b984d20cc3766f63d9acb29ecee91d3f",
1025 firstPrivKey: "PdyPdAngoD42Pe5qCd2en6nS1j4rqVyH6cFGkCDEu2nEMt8DHsoz",
85f762c9 1026 };
1027 testNetwork(done, params);
1028});
1029it('Allows selection of Canadaecoin', function(done) {
1030 var params = {
1031 selectText: "CDN - Canadaecoin",
1dafc30d 1032 phrase: "abandon abandon ability",
85f762c9 1033 firstAddress: "CanAyCfd5Rj2CQVfaoAmvDUZunPM5W1AEQ",
1dafc30d
IC
1034 firstPubKey: "03124e22733a75beba1e4f2635d08e034772bf6cbe8102404226a9402e135ff7f6",
1035 firstPrivKey: "QCEMYNRcKqGgYXhxDNZfrF9m8sqd28NujXpjDNuN7r525rrXPnLm",
85f762c9 1036 };
1037 testNetwork(done, params);
1038});
1039it('Allows selection of Cannacoin', function(done) {
1040 var params = {
1041 selectText: "CCN - Cannacoin",
1dafc30d 1042 phrase: "abandon abandon ability",
85f762c9 1043 firstAddress: "CYjW8xWB43g6krLJTmmrPk1PonoQX7h9Qd",
1dafc30d
IC
1044 firstPubKey: "03bd05a584f418aa8d65a05c7bcc301eb552f67aa380f15e4b29c0b8eec698b443",
1045 firstPrivKey: "QAM1aUWMGEDdcDsgaPQKXcMe8Z3vEfDaPSds3wTFz8USQ3yht7Kk",
85f762c9 1046 };
1047 testNetwork(done, params);
1048});
1049it('Allows selection of Clubcoin', function(done) {
1050 var params = {
1051 selectText: "CLUB - Clubcoin",
1dafc30d 1052 phrase: "abandon abandon ability",
85f762c9 1053 firstAddress: "CHMDEXN4sihpSVX4GyAa2hZ62shnby7uyN",
1dafc30d
IC
1054 firstPubKey: "0356187f1336ac2e340145478f02024ce1c318e3648cbba38262afbde7f2dc0055",
1055 firstPrivKey: "PeJx6v8h1N6GvTj7VkK7vWqjdWJb4QXzfrDgJjFao8bkpRrDiymm",
85f762c9 1056 };
1057 testNetwork(done, params);
1058});
1059it('Allows selection of Compcoin', function(done) {
1060 var params = {
1061 selectText: "CMP - Compcoin",
1dafc30d 1062 phrase: "abandon abandon ability",
85f762c9 1063 firstAddress: "CLshtw3zhxkseBJS46UF12v3AFy9Dx7JVv",
1dafc30d
IC
1064 firstPubKey: "027d1b4f1798882b8978eb3ab0e8b503aa1fb4cf058e0086cf25326fb6a8751aae",
1065 firstPrivKey: "QDq6KKEdmrzHbZHmgzsGcweUFwYA7mVvvfeAKsPSxfxHNv73ETr7",
85f762c9 1066 };
1067 testNetwork(done, params);
1068});
519e9dc7
MKA
1069it('Allows selection of CPUchain', function(done) {
1070 var params = {
1071 selectText: "CPU - CPUchain",
1dafc30d 1072 phrase: "abandon abandon ability",
8817e248 1073 firstAddress: "CWSpLpW7jS4mBHJnkz3mmL5s3yQMg93zK8",
1dafc30d
IC
1074 firstPubKey: "0390845eef5c5993069211f94d9f3990c27c380700bb92ae629d2a5afae1c08806",
1075 firstPrivKey: "L378gxzvUEX9JUFnfXBik2H4gV7XM4dzXWKM9rvR8UZr2rBphL1t",
519e9dc7
MKA
1076 };
1077 testNetwork(done, params);
1078});
85f762c9 1079it('Allows selection of Crave', function(done) {
1080 var params = {
1081 selectText: "CRAVE - Crave",
1dafc30d 1082 phrase: "abandon abandon ability",
85f762c9 1083 firstAddress: "VCYJeti6uKMNBFKCL7eP96UwuFWYHM7c85",
1dafc30d
IC
1084 firstPubKey: "02c8938f30cc46013706586753d6dca3e4ac6b7d6924dfc35d444c3605f35da4c7",
1085 firstPrivKey: "PjRdEuhRZ6rufXAdU6amoaPDRZamWmxN46qbmSPyqUKsJzChCjZT",
85f762c9 1086 };
1087 testNetwork(done, params);
1088});
1089it('Allows selection of Defcoin', function(done) {
1090 var params = {
1091 selectText: "DFC - Defcoin",
1dafc30d 1092 phrase: "abandon abandon ability",
85f762c9 1093 firstAddress: "D8swcgyaaFUrXZU3ATwbgy16buCpWqbG1M",
1dafc30d
IC
1094 firstPubKey: "02d02cc83ddfaa5aed4fb9b611b504cccbfa8397485411f16816fc28dccb51e609",
1095 firstPrivKey: "QSRhMr1B4tt7DEcgxji6NrEfS51wQ6GypfMkqgNDHuWVKo2RzTac",
85f762c9 1096 };
1097 testNetwork(done, params);
1098});
1099it('Allows selection of Diamond', function(done) {
1100 var params = {
1101 selectText: "DMD - Diamond",
1dafc30d 1102 phrase: "abandon abandon ability",
85f762c9 1103 firstAddress: "dJnrVbLL9UPjdaVRz2C8VpqHZknqAqjLek",
1dafc30d
IC
1104 firstPubKey: "03750645ffc120a0ffda07f01b0cc0d321bccf02eaedc98907672d78f2b2ef20d6",
1105 firstPrivKey: "ZKnjDNkhgCwRs8KV5Mf33k1USiiiP8AuXKM2xR4zhd3PAhtVmkEg",
85f762c9 1106 };
1107 testNetwork(done, params);
1108});
1109it('Allows selection of Digibyte', function(done) {
1110 var params = {
1111 selectText: "DGB - Digibyte",
1dafc30d 1112 phrase: "abandon abandon ability",
85f762c9 1113 firstAddress: "D85Rp9jwLtMdmP6wGjTiqHBdVQLST3YCEq",
1dafc30d
IC
1114 firstPubKey: "02f86cc0afd113956e995fb9cbe33b68e59e9175c0c89419efc4031f2e3c128288",
1115 firstPrivKey: "L1w9pD4XodykLEJxiK1R9SVELpftD9x1QtGjHEb1nWviAvYVZbwv",
85f762c9 1116 };
1117 testNetwork(done, params);
1118});
1119it('Allows selection of Digitalcoin', function(done) {
1120 var params = {
1121 selectText: "DGC - Digitalcoin",
1dafc30d 1122 phrase: "abandon abandon ability",
85f762c9 1123 firstAddress: "DKw4UGKEAZWweDNEbBFNQx4EM8x1mpUdia",
1dafc30d
IC
1124 firstPubKey: "02148710e3f09fa9e108bd90a3d53e0eeea9b6ee929c4668a7d64732e3fc839ff7",
1125 firstPrivKey: "QVBstKEkSbT4M9aDbBTkqJkpLCaGjL5zYSiiufHwMxGCn2dunbYL",
85f762c9 1126 };
1127 testNetwork(done, params);
1128});
1129it('Allows selection of Ecoin', function(done) {
1130 var params = {
1131 selectText: "ECN - Ecoin",
1dafc30d 1132 phrase: "abandon abandon ability",
85f762c9 1133 firstAddress: "e6WFPLG5gcXyF7cESFteH1hE2XSmowW5yB",
1dafc30d
IC
1134 firstPubKey: "03a74536710cba6aa02b543f1ac4a76d241b47a96e38cfd002eb975cdef4b9ec19",
1135 firstPrivKey: "ZZPUTdAqpJ3s6S6xe2RpZD3jyEqwGk5MRkJHSpar1rESp4BFEqLV",
85f762c9 1136 };
1137 testNetwork(done, params);
1138});
1139it('Allows selection of Edrcoin', function(done) {
1140 var params = {
1141 selectText: "EDRC - Edrcoin",
1dafc30d 1142 phrase: "abandon abandon ability",
85f762c9 1143 firstAddress: "eh1nUJsvgKPFv6ebMBfcwJ299GMCpjeZUG",
1dafc30d
IC
1144 firstPubKey: "02b541bdd9ff6ffc03ec4749dbe1a8a4ac8b02dc528758acac43eb1f38b5f48f27",
1145 firstPrivKey: "ZjZir6LUrg6A8WqcCeCeM249TGCxJcgGkEL6VefJJV1mGsGb7MEb",
85f762c9 1146 };
1147 testNetwork(done, params);
1148});
1149it('Allows selection of Egulden', function(done) {
1150 var params = {
1151 selectText: "EFL - Egulden",
1dafc30d 1152 phrase: "abandon abandon ability",
85f762c9 1153 firstAddress: "Lg66yt55R7edRM58cDhKzXik2kFme3viX7",
1dafc30d
IC
1154 firstPubKey: "02d8d54be535836e70b9feed7a2502c026d714894342746f15d21c6bc80e1f97e4",
1155 firstPrivKey: "T7NPtpaVXs7SBfsCzp3ooadkctNqcZW6HpNHeT3U8EAXc6NtDJ4c",
85f762c9 1156 };
1157 testNetwork(done, params);
1158});
1159it('Allows selection of Einsteinium', function(done) {
1160 var params = {
1161 selectText: "EMC2 - Einsteinium",
1dafc30d 1162 phrase: "abandon abandon ability",
85f762c9 1163 firstAddress: "EVAABm9hXKHk2MpVMbwNakRubFnNha5m8m",
1dafc30d
IC
1164 firstPubKey: "02826e69c802fbf71ca8e7daf9fdac2e371b86847b5397422997785cefb973269b",
1165 firstPrivKey: "QwySA5DiFKbvMcm7H3xXfsDUdq1Q5RPYjBAcLjZKkESxmJMXBvL2",
85f762c9 1166 };
1167 testNetwork(done, params);
1168});
0ae59396
JU
1169it('Allows selection of EOSIO', function(done) {
1170 var params = {
1171 selectText: "EOS - EOSIO",
1dafc30d 1172 phrase: "abandon abandon ability",
0ae59396 1173 firstPubKey: "EOS692VJTBK3Rmw93onNnpnZ8ZtmE9PdxjDStArvbyzoe11QUTNoy",
1dafc30d 1174 firstPrivKey: "5Jef4qXr3nF8cjudHNQBaComNB653dnQX4pWec32xXRVThBLiCM",
0ae59396 1175 };
1dafc30d 1176 testNetwork(done, params);
0ae59396 1177});
85f762c9 1178it('Allows selection of Europecoin', function(done) {
1179 var params = {
1180 selectText: "ERC - Europecoin",
1dafc30d 1181 phrase: "abandon abandon ability",
85f762c9 1182 firstAddress: "ESA2YwPYntAoaPrE8Fm5qkKRtkcwLcwD6R",
1dafc30d
IC
1183 firstPubKey: "038f16d567cdefac2813b64d465f5cd8d6d59df9dfe4d16302a19b5e0b7179d685",
1184 firstPrivKey: "RzXndDAzJ4Wft6HXkpopV7vRnRBeVw2o6dKp44FYQgriYWngseBu",
85f762c9 1185 };
1186 testNetwork(done, params);
1187});
1188it('Allows selection of Exclusivecoin', function(done) {
1189 var params = {
1190 selectText: "EXCL - Exclusivecoin",
1dafc30d 1191 phrase: "abandon abandon ability",
85f762c9 1192 firstAddress: "EbUa6m8UZW6nTxsYZD2FsDjkadKbp5M6JT",
1dafc30d
IC
1193 firstPubKey: "0291a6b82197e13aa2fd65bd1f2a6e905a9a2baaa36dfb5da10690022f7f9e998d",
1194 firstPrivKey: "Qu6pr1srXmEFzWSa4Ry1sjV6qDj4TEf4q2CxHBSRByiSBLsm967z",
85f762c9 1195 };
1196 testNetwork(done, params);
1197});
1198it('Allows selection of Feathercoin', function(done) {
1199 var params = {
1200 selectText: "FTC - Feathercoin",
1dafc30d 1201 phrase: "abandon abandon ability",
85f762c9 1202 firstAddress: "6gDdjAMoSgQaW8UhqK3oboHs6ftGAroKkM",
1dafc30d
IC
1203 firstPubKey: "02e9f5c37fba2b6457f3c59de5bf5be2efe524751a682a47765825cb9d82d339f3",
1204 firstPrivKey: "N5487NUGCd1JnWzZzhjX1uu6SNGnpQKjeWuK6Y1NzNHjGaLysCdi",
85f762c9 1205 };
1206 testNetwork(done, params);
1207});
1208it('Allows selection of Firstcoin', function(done) {
1209 var params = {
1210 selectText: "FRST - Firstcoin",
1dafc30d 1211 phrase: "abandon abandon ability",
85f762c9 1212 firstAddress: "FJN9GzfMm7Q8R4DJwK1H9F6A1GTghvFiMJ",
1dafc30d
IC
1213 firstPubKey: "029300108c006d1dc75847fece915138747b7bc17b515eae7458da98d2f14d7178",
1214 firstPrivKey: "RDxAN3n3k2dEZ4Ln3bbozzZ3Jgg7CQdgzYDCURmPghKQdzctX7ck",
85f762c9 1215 };
1216 testNetwork(done, params);
1217});
1218it('Allows selection of Flashcoin', function(done) {
1219 var params = {
1220 selectText: "FLASH - Flashcoin",
1dafc30d 1221 phrase: "abandon abandon ability",
85f762c9 1222 firstAddress: "UWfpf5LfMmLxZYooEb2EyvWhZ8NG7EZDRt",
1dafc30d
IC
1223 firstPubKey: "032d55eae8073e75f02e9674b0ac3f69190ad359ad37ee4c4c11d12bcfee13d439",
1224 firstPrivKey: "W6pedhBW35Twq8ZmgTQi7sHx6wczQanSk2FUpcFWtgEW29jowsvi",
85f762c9 1225 };
1226 testNetwork(done, params);
1227});
1228it('Allows selection of GCRCoin', function(done) {
1229 var params = {
1230 selectText: "GCR - GCRCoin",
1dafc30d 1231 phrase: "abandon abandon ability",
85f762c9 1232 firstAddress: "GJjF5cLwyXLacpuvXAVksxGxKvHDjx58d6",
1dafc30d
IC
1233 firstPubKey: "0356187f1336ac2e340145478f02024ce1c318e3648cbba38262afbde7f2dc0055",
1234 firstPrivKey: "Pntag5VbBX1Qtyjt3pi1igwDswWEtpoiqHqosBbgHcMU6m2e7t9J",
85f762c9 1235 };
1236 testNetwork(done, params);
1237});
1238it('Allows selection of Gobyte', function(done) {
1239 var params = {
1240 selectText: "GBX - Gobyte",
1dafc30d 1241 phrase: "abandon abandon ability",
85f762c9 1242 firstAddress: "GS813Ys2brkmvSUw1rUqGPm2HqQVDHJRyA",
1dafc30d
IC
1243 firstPubKey: "036f84f44e4c8bffe039c2d9da087b006ebbfcdcf24b32a6434b2fad708ef00ae0",
1244 firstPrivKey: "WLiSrhfqRwgNmw7rhGHFoXLEuNGXxQYuKb9PK84AZmTfiHN9dz22",
85f762c9 1245 };
1246 testNetwork(done, params);
1247});
1248it('Allows selection of Gridcoin', function(done) {
1249 var params = {
1250 selectText: "GRC - Gridcoin",
1dafc30d 1251 phrase: "abandon abandon ability",
85f762c9 1252 firstAddress: "SGrWbBPvobgqKRF8td1Kdc9vbRY7MJ78Y9",
1dafc30d
IC
1253 firstPubKey: "0377436f8c4c4d96d5ddfe6875abeb589deec595331b9a915b7e8d81a4134926ce",
1254 firstPrivKey: "V7h5EhRuWGM8uqAouxHr9uNt8ZLCQ7kmpA27tvKDbUE3zBarH81n",
85f762c9 1255 };
1256 testNetwork(done, params);
1257});
1258it('Allows selection of Gulden', function(done) {
1259 var params = {
1260 selectText: "NLG - Gulden",
1dafc30d 1261 phrase: "abandon abandon ability",
85f762c9 1262 firstAddress: "GcDP7cNEc33MPPdTFNJ8pZc6VMZJ2CbKxY",
1dafc30d
IC
1263 firstPubKey: "03ff51002146450eb68f294dbe34f3e208f8694b51079f81e3f7dbd403cc10df41",
1264 firstPrivKey: "Fc6gU4tscBk3pybMWU1ajS1tLvNerXC24hQJ1F944QqdgSSrr3XW",
85f762c9 1265 };
1266 testNetwork(done, params);
1267});
1268it('Allows selection of Helleniccoin', function(done) {
1269 var params = {
1270 selectText: "HNC - Helleniccoin",
1dafc30d 1271 phrase: "abandon abandon ability",
85f762c9 1272 firstAddress: "LbHEKe5H72zp9G1fuWNiiNePTUfJb88915",
1dafc30d
IC
1273 firstPubKey: "02e602000d65b969ac27172297ee907684bfc606f457ef0bad62c229edb17d5cb2",
1274 firstPrivKey: "T6JEq9jKLvztjhg4tJMezy1L4NjnMfLDZJe1egVzPBU3Q5XPBFrz",
85f762c9 1275 };
1276 testNetwork(done, params);
1277});
1278it('Allows selection of Hempcoin', function(done) {
1279 var params = {
1280 selectText: "THC - Hempcoin",
1dafc30d 1281 phrase: "abandon abandon ability",
85f762c9 1282 firstAddress: "H8sdWbZyJV4gyXyHtLXDaNnAuUDhK5mfTV",
1dafc30d
IC
1283 firstPubKey: "02e40aaa6bf20e32d9f5976f57e9bf7a8f75db36b96a9033c20b681c9d9454b617",
1284 firstPrivKey: "Ry5Dg2yR32uhbrPLdNmsK1TRbZ1bHLvFp7kcPgeMzVPN6ycu9Jj5",
85f762c9 1285 };
1286 testNetwork(done, params);
1287});
1288it('Allows selection of Insane', function(done) {
1289 var params = {
1290 selectText: "INSN - Insane",
1dafc30d 1291 phrase: "abandon abandon ability",
85f762c9 1292 firstAddress: "iMPqEJMiXWuxC9U2NVinCCMr4t72h58EWx",
1dafc30d
IC
1293 firstPubKey: "036ec4cf4b92300f12ff824b1eca775b27b1a728f6b57c6354ce791fd8ea0f3497",
1294 firstPrivKey: "9HA4X5kXWKxLjybjko8Z5wDo19UUJKroRrZ1BuKCtsfcfNB48K61",
85f762c9 1295 };
1296 testNetwork(done, params);
1297});
1298it('Allows selection of Iop', function(done) {
1299 var params = {
1300 selectText: "IOP - Iop",
1dafc30d 1301 phrase: "abandon abandon ability",
85f762c9 1302 firstAddress: "pGKQmcaPf95Ur5o6oHK4qdiZ52p1yaTvq1",
1dafc30d
IC
1303 firstPubKey: "02bbaa07f154d04b04dec0978a1655952e1a09a3c0e7798085902273965d93c2f6",
1304 firstPrivKey: "8MDnKDhVSp84AqzYN5g18MhMvHk3UMYnP51EVjidSas1pT62Sdpc",
85f762c9 1305 };
1306 testNetwork(done, params);
1307});
1308it('Allows selection of Ixcoin', function(done) {
1309 var params = {
1310 selectText: "IXC - Ixcoin",
1dafc30d 1311 phrase: "abandon abandon ability",
85f762c9 1312 firstAddress: "xgE9bTZ6YypT3E6ByzkTt31Hq68E9BqywH",
1dafc30d
IC
1313 firstPubKey: "0257766cea209cf52ba08776b6dfa263a4759e1e148f25d0cab3a91a60b6a52062",
1314 firstPrivKey: "KxdDep6zGCWoRt6arat5DVR5s6a8vmZtuekwHafEwRc7VGxfeD4Y",
85f762c9 1315 };
1316 testNetwork(done, params);
1317});
0a5d28a7 1318it('Allows selection of Kobocoin', function(done) {
1319 var params = {
1320 selectText: "KOBO - Kobocoin",
1dafc30d 1321 phrase: "abandon abandon ability",
0a5d28a7 1322 firstAddress: "FTVoNJETXDAM8x7MnmdE8RwWndSr9PQWhy",
1dafc30d
IC
1323 firstPubKey: "0225753a5e232b384dce73b58d25fb90172faaf4c83a8850189abd8cae86495601",
1324 firstPrivKey: "R7u1uvHmVGkGqjURaNoppFjPNBzPYt37QwttrJc6F2K1WRm1zKoQ",
0a5d28a7 1325 };
1326 testNetwork(done, params);
1327});
85f762c9 1328it('Allows selection of Landcoin', function(done) {
1329 var params = {
1330 selectText: "LDCN - Landcoin",
1dafc30d 1331 phrase: "abandon abandon ability",
85f762c9 1332 firstAddress: "LLvLwNjG1aJcn1RS4W4GJUbv8fNaRATG7c",
1dafc30d
IC
1333 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
1334 firstPrivKey: "T8rHy2tA1yykFgCpr6KrgcrhqbevpxG923qSZbJHALYGwy3M3qAw",
85f762c9 1335 };
1336 testNetwork(done, params);
1337});
1338it('Allows selection of Library Credits', function(done) {
1339 var params = {
1340 selectText: "LBC - Library Credits",
1dafc30d 1341 phrase: "abandon abandon ability",
85f762c9 1342 firstAddress: "bQJEQrHDJyHdqycB32uysh1SWn8Ln8LMdg",
1dafc30d
IC
1343 firstPubKey: "02abd5018c033f59f49f28ee76d93c41323890928e25c171ccc7c61ed753cde8ad",
1344 firstPrivKey: "5CWjkFs7be8vPa3CZEodPDsMDSbvyT9gAC1n1w83znRz4poNK5nZ",
85f762c9 1345 };
1346 testNetwork(done, params);
1347});
1348it('Allows selection of Linx', function(done) {
1349 var params = {
1350 selectText: "LINX - Linx",
1dafc30d 1351 phrase: "abandon abandon ability",
85f762c9 1352 firstAddress: "XGWQ3cb3LGUB3VnHmj6xYSMgnokNbf6dyk",
1dafc30d
IC
1353 firstPubKey: "0232edeec8e3e021b53982a01943dea4398e9cc4b177c5483cf0e7774be41ea094",
1354 firstPrivKey: "X8YJFxPPmwyCBQ7Rp5bqn3V8U9rsaba5Tftsh3j8qZX9hjTTURgL",
85f762c9 1355 };
1356 testNetwork(done, params);
1357});
1358it('Allows selection of Litecoincash', function(done) {
1359 var params = {
1360 selectText: "LCC - Litecoincash",
1dafc30d 1361 phrase: "abandon abandon ability",
85f762c9 1362 firstAddress: "Ce5n7fjUuQPLutJ4W5nCCfQLKdKLE1mv9A",
1dafc30d
IC
1363 firstPubKey: "033af2daadddcc976ea61023783b350f9b1ac45a056dba2d3b8c6ceec9d5817a8d",
1364 firstPrivKey: "T6qztYVwa6onx5HjCB3XZcCtegpUjVKtocRCQ8daWj2b8tbrDZqp",
85f762c9 1365 };
1366 testNetwork(done, params);
1367});
1368it('Allows selection of Lynx', function(done) {
1369 var params = {
1370 selectText: "LYNX - Lynx",
1dafc30d 1371 phrase: "abandon abandon ability",
85f762c9 1372 firstAddress: "KUeY3ZdZkg96p4W98pj1JjygCFU1XqWdw3",
1dafc30d
IC
1373 firstPubKey: "0340435307cc0831d85adb70ceb518297cdebee8f25574d8eca0ff94e35fa759da",
1374 firstPrivKey: "SdwVFsLjH2wbWziEZTLPQ2iCBrt9vXHWr7X333RbFZG7hZg88u5V",
85f762c9 1375 };
1376 testNetwork(done, params);
1377});
5ed5f661
D
1378it('Allows selection of Megacoin', function(done) {
1379 var params = {
1380 selectText: "MEC - Megacoin",
1dafc30d 1381 phrase: "abandon abandon ability",
33816040 1382 firstAddress: "MDfAj9CzkC1HpcUiVGnHp8yKTa7WXgu8AY",
1dafc30d
IC
1383 firstPubKey: "02e560b00165c939ba08f5096201794a32e6de66216cdc5763472abf09a5e62380",
1384 firstPrivKey: "TSw7if5qV6HzW2hKhPjVvQBVUXt5aD17mM34PkueLrHQiXwMwcp4",
5ed5f661
D
1385 };
1386 testNetwork(done, params);
1387});
85f762c9 1388it('Allows selection of Minexcoin', function(done) {
1389 var params = {
1390 selectText: "MNX - Minexcoin",
1dafc30d 1391 phrase: "abandon abandon ability",
85f762c9 1392 firstAddress: "XC1VnyJVfiMDwWgFtAHDp41cgY3AHk3dJT",
1dafc30d
IC
1393 firstPubKey: "0232a31bee17b806941c419cea385d427f0d6c6fbd564fb2f366faa008aa15822c",
1394 firstPrivKey: "KzouDFGCydewfP2pGdGv62vwP7KBtaaSgBW28B94YuksV5y8jGyE",
85f762c9 1395 };
1396 testNetwork(done, params);
1397});
1398it('Allows selection of Navcoin', function(done) {
1399 var params = {
1400 selectText: "NAV - Navcoin",
1dafc30d 1401 phrase: "abandon abandon ability",
85f762c9 1402 firstAddress: "NTQVTPK3NWSQLKoffkiQw99T8PifkF1Y2U",
1dafc30d
IC
1403 firstPubKey: "0345105cc449c627cfee118bcd7804465669e6b32e751a61e39737f5693f56d5f4",
1404 firstPrivKey: "PKXWZeQCqutM4vawyuNAHuAAkfEuWLVhwtszCRuWTecyJ92EMEE2",
85f762c9 1405 };
1406 testNetwork(done, params);
1407});
491948db 1408it('Allows selection of Nebulas', function(done) {
1409 var params = {
1410 selectText: "NAS - Nebulas",
1dafc30d 1411 phrase: "abandon abandon ability",
491948db 1412 firstAddress: "n1PbK61DGBfDoDusLw621G6sVSMfLLHdfnm",
1dafc30d
IC
1413 firstPubKey: "3a3ffb88114f54ed7525c987a3124dc5eefc221806bc049e1e08371cca5fbebea38c2ce791ee32912c1f7799fad99db91f6a3724def5e715b4ff64bc06fe4537",
1414 firstPrivKey: "78d2df373c54efe1bfda371ee7532892ea8ec046f45e5c7e2dfa8371ad190f8b",
491948db 1415 };
1416 testNetwork(done, params);
1417});
85f762c9 1418it('Allows selection of Neoscoin', function(done) {
1419 var params = {
1420 selectText: "NEOS - Neoscoin",
1dafc30d 1421 phrase: "abandon abandon ability",
85f762c9 1422 firstAddress: "NgATz6QbQNXvayHQ4CpZayugb9HeaPDdby",
1dafc30d
IC
1423 firstPubKey: "021bf6bd94ac773ed78b6e682bf6509a08944b67925a3ea9ec94f500479f637f63",
1424 firstPrivKey: "TBebkUs87R1WLhMPHMzCYF2FmiHzuVcCrhgf2rRwsSpi35SGZPMc",
85f762c9 1425 };
1426 testNetwork(done, params);
1427});
10980ed6 1428it('Allows selection of Nix', function(done) {
1429 var params = {
1430 selectText: "NIX - NIX Platform",
1dafc30d 1431 phrase: "abandon abandon ability",
10980ed6 1432 firstAddress: "GgcNW2SQQXB4LWHRQTHKkQF3GzXNSLqS8u",
1dafc30d
IC
1433 firstPubKey: "02438f5277bc74be69e99eee406cda968705a8ab26b9aecfaa1bbc9d3700fa2eae",
1434 firstPrivKey: "L44wVS6tPZhVGfnJhXTfEyBZwLggW61GKKRVDaEKSaWAt2HkALyT",
10980ed6 1435 };
1436 testNetwork(done, params);
1437});
85f762c9 1438it('Allows selection of Neurocoin', function(done) {
1439 var params = {
1440 selectText: "NRO - Neurocoin",
1dafc30d 1441 phrase: "abandon abandon ability",
85f762c9 1442 firstAddress: "NVdYErQ3mFpDuF5DquW9WMiT7sLc8ufFTn",
1dafc30d
IC
1443 firstPubKey: "03a3690f587d97dee95393d6dfe9daa81d60354657f84a75fb6733335a1c0588db",
1444 firstPrivKey: "Tn3LK6WyQRczahRsf3cZCpS12VxvbdhM6zSARDvGxhNoxCCN7oKv",
85f762c9 1445 };
1446 testNetwork(done, params);
1447});
1448it('Allows selection of Newyorkc', function(done) {
1449 var params = {
1450 selectText: "NYC - Newyorkc",
1dafc30d 1451 phrase: "abandon abandon ability",
85f762c9 1452 firstAddress: "RSVMfyH1fKfy3puADJEhut2vfkRyon6imm",
1dafc30d
IC
1453 firstPubKey: "02c1f71b4e74098cf6dc66c5c0e386c695002093e986698e53f50162493b2deec8",
1454 firstPrivKey: "UqWMjJsXSsC4X7vgCTxLwxV21yA8vDosyGW2rBTYnn7MfFUbKZFy",
85f762c9 1455 };
1456 testNetwork(done, params);
1457});
1458it('Allows selection of Novacoin', function(done) {
1459 var params = {
1460 selectText: "NVC - Novacoin",
1dafc30d 1461 phrase: "abandon abandon ability",
85f762c9 1462 firstAddress: "4JRvUmxcKCJmaMXZyvRoSS1cmG2XvnZfHN",
1dafc30d
IC
1463 firstPubKey: "0252531247a5e26a866909467ce552a3433b00f86319446aa3584723ad637be28a",
1464 firstPrivKey: "MD2NsZQtBdXGvox6VzpZfnhHyDJ2NHzzdSE6jUeUjQuaBRQ3LXUg",
85f762c9 1465 };
1466 testNetwork(done, params);
1467});
1468it('Allows selection of Nushares', function(done) {
1469 var params = {
1470 selectText: "NSR - Nushares",
1dafc30d 1471 phrase: "abandon abandon ability",
85f762c9 1472 firstAddress: "SecjXzU3c7EecdT7EbC4vvmbdtBBokWh6J",
1dafc30d
IC
1473 firstPubKey: "02e0e94d07415703fd89b8a72f22fc28e7b916c0649bea2c53e6600377a4d125b5",
1474 firstPrivKey: "P5SXdUhciyemKJojb5tBFPKjVyX4Ymf1wdKDPmYHRigxPAnDNudM",
85f762c9 1475 };
1476 testNetwork(done, params);
1477});
1478it('Allows selection of Okcash', function(done) {
1479 var params = {
1480 selectText: "OK - Okcash",
1dafc30d 1481 phrase: "abandon abandon ability",
85f762c9 1482 firstAddress: "PV4Qp1TUYuGv4TqVtLZtqvrsWWRycfx1Yi",
1dafc30d
IC
1483 firstPubKey: "02ab6d1d1b2c6f19f9c13cf0cd48e352e04245026d25de014cde0493c773f27789",
1484 firstPrivKey: "WuuneUUV8naqRRs1mSAdSVfZ9g6VXLWRV7NVEYdugts8vT2iNXR",
85f762c9 1485 };
1486 testNetwork(done, params);
1487});
1488it('Allows selection of Omnicore', function(done) {
1489 var params = {
1490 selectText: "OMNI - Omnicore",
1dafc30d 1491 phrase: "abandon abandon ability",
85f762c9 1492 firstAddress: "1Q1t3gonjCT3rW38TsTsCvgSc3hh7zBGbi",
1dafc30d
IC
1493 firstPubKey: "02a8cadac7ee1d034f968c1441481fc2c941c8f529a17b6810e917f9ccc893fa3a",
1494 firstPrivKey: "KyvFh1tWTBsLWxJTVjpTpfjJ7eha81iks7NiD6FvrC23o24oAhcs",
85f762c9 1495 };
1496 testNetwork(done, params);
1497});
af14981d
A
1498it('Allows selection of DeepOnion', function(done) {
1499 var params = {
1500 selectText: "ONION - DeepOnion",
1dafc30d 1501 phrase: "abandon abandon ability",
858c29e3 1502 firstAddress: "DYREY7XCFXVqJ3x5UuN43k2JwD2s1kif48",
1dafc30d
IC
1503 firstPubKey: "030ed256ea98edd15006a57fd4d3c60b2b811ecd74107c3fa1ac36558107c139b3",
1504 firstPrivKey: "QZZHsJF9C9okF5JV2qx4H1NgCCQqeio6k8cryKyrpU3TPnDhSzwV",
af14981d
A
1505 };
1506 testNetwork(done, params);
1507});
85f762c9 1508it('Allows selection of Pesobit', function(done) {
1509 var params = {
1510 selectText: "PSB - Pesobit",
1dafc30d 1511 phrase: "abandon abandon ability",
85f762c9 1512 firstAddress: "PDePsF7ALyXP7JaywokdYiRTDtKa14MAr1",
1dafc30d
IC
1513 firstPubKey: "023dd8af1b0196275ee2fb450279656ab16f86221d47f62094c78088200d67e90f",
1514 firstPrivKey: "U9eg6xGhoA9H4aHmQtXPP1uR3dR3EjbdmTr3ejVK5jdhWFoJotSj",
85f762c9 1515 };
1516 testNetwork(done, params);
1517});
1518it('Allows selection of Pinkcoin', function(done) {
1519 var params = {
1520 selectText: "PINK - Pinkcoin",
1dafc30d 1521 phrase: "abandon abandon ability",
85f762c9 1522 firstAddress: "2TgjYQffjbzUHJghNaVbdsjHbRwruC3yzC",
1dafc30d
IC
1523 firstPubKey: "02fcc7a9d26b78c1ef3149dc3fcb9fbd68293fe5627a9099a01e5acf5f848d029d",
1524 firstPrivKey: "LX84Cjro1aRwwqTDu2jqNTPvproSm7VJCyMFLCeEKa4LTFGzXgks",
85f762c9 1525 };
1526 testNetwork(done, params);
1527});
1528it('Allows selection of POSWcoin', function(done) {
1529 var params = {
1530 selectText: "POSW - POSWcoin",
1dafc30d 1531 phrase: "abandon abandon ability",
85f762c9 1532 firstAddress: "PNxewmZoPnGBvoEbH6hgQZCK1igDiBCdgC",
1dafc30d
IC
1533 firstPubKey: "0358e511140f2f2bc96debf22639b36cc9b12addc386ac7a1de7dca05896ec0162",
1534 firstPrivKey: "UCs7SQEhD8r3GwXL99M8sBuxcqB9uke6kRSh7qQfbH9VdS6g919B",
85f762c9 1535 };
1536 testNetwork(done, params);
1537});
1538it('Allows selection of Potcoin', function(done) {
1539 var params = {
1540 selectText: "POT - Potcoin",
1dafc30d 1541 phrase: "abandon abandon ability",
85f762c9 1542 firstAddress: "PEo7Vg2ctXgpP4vuLPeY9aGJtZotyrmiHc",
1dafc30d
IC
1543 firstPubKey: "02b86d3f153eac657f140a8ce9ae530504eea3c9894e594b9c9ddf0cfe393dc8ab",
1544 firstPrivKey: "U89dfzjfUtTSEKaRzr3FPw7ark3bjZAzTVw5kedjBcFj1UAdBcdE",
85f762c9 1545 };
1546 testNetwork(done, params);
1547});
1548it('Allows selection of Putincoin', function(done) {
1549 var params = {
1550 selectText: "PUT - Putincoin",
1dafc30d 1551 phrase: "abandon abandon ability",
85f762c9 1552 firstAddress: "PViWnfr2uFtovd6e7joM49C94CsGSnqJis",
1dafc30d
IC
1553 firstPubKey: "0387bbd868cb20682619733e63205c66d460014714db26593d55c916c34f7e7970",
1554 firstPrivKey: "UBB9nGXWEMjhmvWqta83YkSYLLc1vjkqsnP289jbwMPG72LpAiUg",
85f762c9 1555 };
1556 testNetwork(done, params);
1557});
31264e8b
PT
1558it('Allows selection of Rapids', function(done) {
1559 var params = {
1560 selectText: "RPD - Rapids",
1dafc30d 1561 phrase: "abandon abandon ability",
31264e8b 1562 firstAddress: "Ri8XxUdZaXS5LqxmFJcFEjFinkaMbmhSUp",
1dafc30d
IC
1563 firstPubKey: "03cf69b270c1d03bbedb39f21d70a0a2aa0192b7dfb26bff4bf9a4ed8315d90f4e",
1564 firstPrivKey: "7sgLTht7XHwAkEgEpm7FJE6Tkv7GqCXxSSKPsr4hWYDNePUhBx6t",
31264e8b
PT
1565 };
1566 testNetwork(done, params);
1567});
1fe8f519 1568it('Allows selection of Ravencoin', function(done) {
1569 var params = {
1570 selectText: "RVN - Ravencoin",
1dafc30d 1571 phrase: "abandon abandon ability",
1fe8f519 1572 firstAddress: "RBuDoVNnzvFsEcX8XKPm8ic4mgiCzjUCNk",
1dafc30d
IC
1573 firstPubKey: "02135446ddfa13617ada02187702b51c3ae17a671773aa7ab7100a3cb89b7c9eb1",
1574 firstPrivKey: "KwRpyD9EmoyjQQRKtFVYL1WkS9Ywue8zSpebRPtXViiGR8kWUEJV",
1fe8f519 1575 };
1576 testNetwork(done, params);
1577});
85f762c9 1578it('Allows selection of Reddcoin', function(done) {
1579 var params = {
1580 selectText: "RDD - Reddcoin",
1dafc30d 1581 phrase: "abandon abandon ability",
2ab3faf4 1582 firstAddress: "RtgRvXMBng1y51ftteveFqwNfyRG18HpxQ",
1dafc30d
IC
1583 firstPubKey: "026565dd8a2e6f75e6391fbe16e6fb7dfab8b9cba85ea56b63f015d98c13d8f46d",
1584 firstPrivKey: "V1cNKW3ZYbRXosccyG9d3t4g7nGCBGyQJi7zLe6WZ3tExXMUqqK1",
85f762c9 1585 };
1586 testNetwork(done, params);
1587});
1588it('Allows selection of RevolutionVR', function(done) {
1589 var params = {
1590 selectText: "RVR - RevolutionVR",
1dafc30d 1591 phrase: "abandon abandon ability",
85f762c9 1592 firstAddress: "VXeeoP2jkzZnMFxtc66ZBZK1NHN5QJnnjL",
1dafc30d
IC
1593 firstPubKey: "03c107f37ffb305d70a690ecd89254a67099d8855a4162762c62e3ad72e78c50e4",
1594 firstPrivKey: "WQdDNS6ZPZcFfBn7AwFMu1GHkm5jScBwpVDqNjmC16PEU7yG97vP",
85f762c9 1595 };
1596 testNetwork(done, params);
1597});
1598it('Allows selection of Rubycoin', function(done) {
1599 var params = {
1600 selectText: "RBY - Rubycoin",
1dafc30d 1601 phrase: "abandon abandon ability",
85f762c9 1602 firstAddress: "RV76JDtjTs11JdMDRToYn6CHecMRPLnKS6",
1dafc30d
IC
1603 firstPubKey: "037828022748cf1f2107e9d99f7a19b8b44ebb24b332c51c0ca1cecec301cf1797",
1604 firstPrivKey: "UwQPqs31g9AKQzLjHNqgXN66tout2i6F7VSiCsSsR3LVHq7aToVL",
85f762c9 1605 };
1606 testNetwork(done, params);
1607});
7878bb32
S
1608it('Allows selection of Salus', function(done) {
1609 var params = {
1610 selectText: "SLS - Salus",
1dafc30d 1611 phrase: "abandon abandon ability",
65afae0b 1612 firstAddress: "SNzPi1CafHFm3WWjRo43aMgiaEEj3ogjww",
1dafc30d
IC
1613 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
1614 firstPrivKey: "VMYkYTHeeHiosSQM9EFFdEH1a7fiMEL3TgBPxQVhXWqxAvyQ3uJL",
7878bb32 1615 };
65afae0b 1616 testNetwork(done, params);
c4086c24 1617});
85f762c9 1618it('Allows selection of Smileycoin', function(done) {
1619 var params = {
1620 selectText: "SMLY - Smileycoin",
1dafc30d 1621 phrase: "abandon abandon ability",
85f762c9 1622 firstAddress: "BEZVnEBCAyFByrgKpwAgYgtvP4rKAd9Sj2",
1dafc30d
IC
1623 firstPubKey: "02145f25ab87def3ce6decffc6bf740037dc467a32ff8e62f147c70f5092074f2b",
1624 firstPrivKey: "pC32pZDfv3L3vegrv8gptiyc3SkJEZ6BigioGjLmD3wFw2h1qcz",
85f762c9 1625 };
1626 testNetwork(done, params);
1627});
1628it('Allows selection of Solarcoin', function(done) {
1629 var params = {
1630 selectText: "SLR - Solarcoin",
1dafc30d 1631 phrase: "abandon abandon ability",
85f762c9 1632 firstAddress: "8LZ13HbnjtaMJWSvvVFNTLf71zFfDrhwLu",
1dafc30d
IC
1633 firstPubKey: "0305dbadd4fd239ecfca9239c9405e3b12178d46bdaf7520d511339a05367a3c88",
1634 firstPrivKey: "NeNfMe2zy5R6eUVJ3pZ4hs17s4xtm7xHjLJoe1hgCwVoYsfHx5Jy",
85f762c9 1635 };
1636 testNetwork(done, params);
1637});
ae51db39
B
1638it('Allows selection of stash', function(done) {
1639 var params = {
1640 selectText: "STASH - Stash",
1dafc30d 1641 phrase: "abandon abandon ability",
ae51db39 1642 firstAddress: "XxwAsWB7REDKmAvHA85SbEZQQtpxeUDxS3",
1dafc30d
IC
1643 firstPubKey: "030caa120ce0fbd2c2d08a24c15086bafcf55d3862f423b0e55fd376474a0e7160",
1644 firstPrivKey: "XF3r4xQozRKvRUNgQG1bx8MGCuSLzV82XrNfB52Utpaixm8tWmWz",
ae51db39
B
1645 };
1646 testNetwork(done, params);
1647});
1648it('Allows selection of stash testnet', function(done) {
1649 var params = {
1650 selectText: "STASH - Stash Testnet",
1dafc30d 1651 phrase: "abandon abandon ability",
f40c5c24 1652 firstAddress: "yWQCTSkUst7ddYuebKsqa1kSoXEjpCkGKR",
1dafc30d
IC
1653 firstPubKey: "02a709b853a4ac1739c036c3d2bcf03b3e8c54b64927c57a07ac05c8e903545dd0",
1654 firstPrivKey: "cNrt5ghh7pPGQZVZkL5FJFNsWQQTKQPtLJz2JT7KnsfpzeAPYSp3",
ae51db39
B
1655 };
1656 testNetwork(done, params);
1657});
85f762c9 1658it('Allows selection of Stratis', function(done) {
1659 var params = {
1660 selectText: "STRAT - Stratis",
1dafc30d 1661 phrase: "abandon abandon ability",
85f762c9 1662 firstAddress: "ScfJnq3QDhKgDMEds6sqUE1ot6ShfhmXXq",
1dafc30d
IC
1663 firstPubKey: "0269cea528e4ed01b44729287c831fe1889b196fee6202956a7e5c9486c3bc5c00",
1664 firstPrivKey: "VLx3VXEsVzWVeZjHvrgCJ8N1H7JCEWTSHiEGsYUEZCedHR6yBqDU",
85f762c9 1665 };
1666 testNetwork(done, params);
1667});
e96d3876
AD
1668it('Allows selection of Stratis Test', function(done) {
1669 var params = {
c990aff8 1670 selectText: "TSTRAT - Stratis Testnet",
1dafc30d 1671 phrase: "abandon abandon ability",
e96d3876 1672 firstAddress: "TRLWm3dye4FRrDWouwYUSUZP96xb76mBE3",
1dafc30d
IC
1673 firstPubKey: "0269cea528e4ed01b44729287c831fe1889b196fee6202956a7e5c9486c3bc5c00",
1674 firstPrivKey: "VLx3VXEsVzWVeZjHvrgCJ8N1H7JCEWTSHiEGsYUEZCedHR6yBqDU",
e96d3876
AD
1675 };
1676 testNetwork(done, params);
1677});
4958ea80
JC
1678it('Allows selection of Sugarchain', function(done) {
1679 var params = {
1680 selectText: "SUGAR - Sugarchain",
1681 phrase: "abandon abandon ability",
1682 firstAddress: "SYnd31fYr39VgKju87Vz1sYBmEeHg5cudk",
1683 firstPubKey: "035bc9fa22eff2246ec07bb09c9e32f5f9fee517b4f49a8f117508f8fb41905b25",
1684 firstPrivKey: "L2G3axGdZv5EV8osAsBPMese74i4dTHaGvxDh7DsRF5Ky6hKkPDY",
1685 };
1686 testNetwork(done, params);
1687});
75944050
JC
1688it('Allows selection of Sugarchain Testnet', function(done) {
1689 var params = {
1690 selectText: "TUGAR - Sugarchain Testnet",
1691 phrase: "abandon abandon ability",
1692 firstAddress: "TkoRzLZQyaY88dAACNVwUFMYekR7pv6CbY",
1693 firstPubKey: "035bc9fa22eff2246ec07bb09c9e32f5f9fee517b4f49a8f117508f8fb41905b25",
1694 firstPrivKey: "cSd33sGUzymVeaH8ZGzWiyNhjJ1UHuPGLy6goXgNvMjLDqioARWW",
1695 };
1696 testNetwork(done, params);
1697});
85f762c9 1698it('Allows selection of Syscoin', function(done) {
1699 var params = {
1700 selectText: "SYS - Syscoin",
1dafc30d 1701 phrase: "abandon abandon ability",
85f762c9 1702 firstAddress: "SZwJi42Pst3VAMomyK5DG4157WM5ofRmSj",
1dafc30d
IC
1703 firstPubKey: "02219514722373a337c6425ca5ccc423e160f0abf66b57a71fba4db7aca6957f6a",
1704 firstPrivKey: "L36rm7aHFTz571YY87nA3ZLace8NcqPYZsyuyREuT4wXFtTBqLrc",
85f762c9 1705 };
1706 testNetwork(done, params);
1707});
1708it('Allows selection of Toa', function(done) {
1709 var params = {
1710 selectText: "TOA - Toa",
1dafc30d 1711 phrase: "abandon abandon ability",
85f762c9 1712 firstAddress: "TSe1QAnUwQzUfbBusDzRJ9URttrRGKoNKF",
1dafc30d
IC
1713 firstPubKey: "0332facd2ea64c2f1e6152961340b7e51ca77f1bffa0f950442b4ef5021f7ee86c",
1714 firstPrivKey: "VdSdDaM1Kjw1SzzW7KCzFEFi7Zf5egUHVofSiLkrSh7K6bbYZhnb",
85f762c9 1715 };
1716 testNetwork(done, params);
82e3938a 1717});
1718it('Allows selection of TWINS', function(done) {
1719 var params = {
1720 selectText: "TWINS - TWINS",
1dafc30d 1721 phrase: "abandon abandon ability",
82e3938a 1722 firstAddress: "WPpJnfLLubNmF7HLNxg8d8zH5haxn4wri8",
1dafc30d
IC
1723 firstPubKey: "02a4b9bda2a7a2e4540d54c4afb3a3007f6f22f8cd2df67d5c69388fd8ddc16a07",
1724 firstPrivKey: "Au5fg7nYMXHmNT9BSfQVNxaUduP9cgJASeNDMrP9qfoWi2ZTmR48",
82e3938a 1725 };
1726 testNetwork(done, params);
1727});
1728it('Allows selection of TWINS testnet', function(done) {
1729 var params = {
1730 selectText: "TWINS - TWINS Testnet",
1dafc30d 1731 phrase: "abandon abandon ability",
82e3938a 1732 firstAddress: "XpnU1HHdNG5YxvG9Rez4wjmidchxqnZaNa",
1dafc30d
IC
1733 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
1734 firstPrivKey: "cBtMfPpQg4s1Ndfez7oLdedwu8CxshhWE5f7qunhLsY4ueNvKKyM",
82e3938a 1735 };
1736 testNetwork(done, params);
85f762c9 1737});
1738it('Allows selection of Ultimatesecurecash', function(done) {
1739 var params = {
1740 selectText: "USC - Ultimatesecurecash",
1dafc30d 1741 phrase: "abandon abandon ability",
85f762c9 1742 firstAddress: "UPyLAZU2Che5fiy7Ed8xVJFmXAUhitA4ug",
1dafc30d
IC
1743 firstPubKey: "03a529111ee6d54965962b289f7537db1edb57863e2e10dd96939f8d3501ecebd4",
1744 firstPrivKey: "VG1ZbBExPyeeT72EL1jQU8SvXkpK6heTept76wLiGCuMgRHqrz9L",
85f762c9 1745 };
1746 testNetwork(done, params);
1747});
1748it('Allows selection of Unobtanium', function(done) {
1749 var params = {
1750 selectText: "UNO - Unobtanium",
1dafc30d 1751 phrase: "abandon abandon ability",
85f762c9 1752 firstAddress: "uUBMPVMXrR6qhqornJqKTWgr8L69vihSL9",
1dafc30d
IC
1753 firstPubKey: "026dd108ff43d425ad923f2107f5fc166cbb90dd0bd04b157c1ebdc9c04a423e0f",
1754 firstPrivKey: "aAf6LmMJpWQMZbHVSHtkKDCNViknGD4TQ3y1rwvJe2L55dwpbqBV",
85f762c9 1755 };
1756 testNetwork(done, params);
1757});
1758it('Allows selection of Vcash', function(done) {
1759 var params = {
1760 selectText: "XVC - Vcash",
1dafc30d 1761 phrase: "abandon abandon ability",
85f762c9 1762 firstAddress: "VuL53MSY6KjvAjKSeRkh3NDnKykacDVeps",
1dafc30d
IC
1763 firstPubKey: "03ab245795cf39c4084684d039a01c387472c3626d93d24289d229c27ce9eeeace",
1764 firstPrivKey: "WVC2yAf2rFHzjbKKJeZWNFjMqQ9ATRg3xdtG2FfVDQATpNj5fHy9",
85f762c9 1765 };
1766 testNetwork(done, params);
1767});
1768it('Allows selection of Verge', function(done) {
1769 var params = {
1770 selectText: "XVG - Verge",
1dafc30d 1771 phrase: "abandon abandon ability",
85f762c9 1772 firstAddress: "DCrVuGkMjLJpTGgwAgv9AcMdeb1nkWbjZA",
1dafc30d
IC
1773 firstPubKey: "03cd21de72f291cd5a3632a23a710616416743f60b4667a0f8d3fc03c7fd6e0c77",
1774 firstPrivKey: "QRpRGbTRC7P12PyhiFqyZpVwK5XCGe5Lmr9hbV7ujcjg9cjUGqF7",
85f762c9 1775 };
1776 testNetwork(done, params);
1777});
1778it('Allows selection of Vertcoin', function(done) {
1779 var params = {
1780 selectText: "VTC - Vertcoin",
1dafc30d 1781 phrase: "abandon abandon ability",
85f762c9 1782 firstAddress: "Vf6koGuiWdXQfx8tNqxoNeEDxh4xh5cxsG",
1dafc30d
IC
1783 firstPubKey: "02f15155bc5445fc764db199da5e7ac92112ab9f2a5e408904f145ea29d169010a",
1784 firstPrivKey: "Kxu4LwEJZooaVWGT9ZLzJBuaUFr1hLjuottjT7eTNNWJKk7Hur1u",
85f762c9 1785 };
1786 testNetwork(done, params);
1787});
1788it('Allows selection of Vivo', function(done) {
1789 var params = {
1790 selectText: "VIVO - Vivo",
1dafc30d 1791 phrase: "abandon abandon ability",
85f762c9 1792 firstAddress: "VFmBwuXXGhJe7MarQG2GfzHMFebRHgfSpB",
1dafc30d
IC
1793 firstPubKey: "02d24546a74522e0dc8bbfde66e65201ae81b0f6e2b60239c8baf09c1a53b73f8c",
1794 firstPrivKey: "WLSLMqZjuwzibyhPfaYvxG4z1tRnmVX4yYFtbQmHhU4eKt12Nuqq",
85f762c9 1795 };
1796 testNetwork(done, params);
1797});
1798it('Allows selection of Vpncoin', function(done) {
1799 var params = {
1800 selectText: "VASH - Vpncoin",
1dafc30d 1801 phrase: "abandon abandon ability",
85f762c9 1802 firstAddress: "VoEmH1qXC4TsSgBAStR21QYetwnFqbqCx9",
1dafc30d
IC
1803 firstPubKey: "039e579dd18157ef1dff74d46f0bdb95f729d3985f0d4f9167fed4095b1aba846c",
1804 firstPrivKey: "WTbS2wjqeTzs8nk1E1N8RxpPUow8wNkgCjfDCuvDLRHaWFuNhxMz",
85f762c9 1805 };
1806 testNetwork(done, params);
1807});
881fbe22
MR
1808it('Allows selection of VeChain', function(done) {
1809 var params = {
1810 selectText: "VET - VeChain",
1dafc30d 1811 phrase: "abandon abandon ability",
c394ec3c 1812 firstAddress: "0xdba55B1B6070f3a733D5eDFf35F0da4A00E455F2",
1dafc30d
IC
1813 firstPubKey: "0x0386911777255ed1d57906dcc85ca7fd4ba9eb4c8160ced97817933919d1ffe7ad",
1814 firstPrivKey: "0x3ec2b392952fe8a82a319c8ca9a4bb9c1db7beb09c64799da7693615ba1a787e",
881fbe22
MR
1815 };
1816 testNetwork(done, params);
1817});
85f762c9 1818it('Allows selection of Whitecoin', function(done) {
1819 var params = {
1820 selectText: "XWC - Whitecoin",
1dafc30d 1821 phrase: "abandon abandon ability",
85f762c9 1822 firstAddress: "WcSwCAUqrSgeSYbsaS3SSWWhsx8KRYTFDR",
1dafc30d
IC
1823 firstPubKey: "03d3f4fa758f6260bfb39664d248a32258b53a90a71224db056ee79abaa3e9f208",
1824 firstPrivKey: "WrGUVSubUyDx5wzjfwi3EhhUwf5anHFW7Dv9kAaTu39CtDDBJWM9",
85f762c9 1825 };
1826 testNetwork(done, params);
1827});
1828it('Allows selection of Wincoin', function(done) {
1829 var params = {
1830 selectText: "WC - Wincoin",
1dafc30d 1831 phrase: "abandon abandon ability",
85f762c9 1832 firstAddress: "WaDVCESMGgyKgNESdn3u43NnwmGSkZED3Z",
1dafc30d
IC
1833 firstPubKey: "02d10b29f6d88dd86f733b2140ba2207a9dfb5d014bb287541c66a41e467e231a7",
1834 firstPrivKey: "WmLWUvbz8UF1s7PrHyeQBMLbt4LpmQrwbzatvusvx6SRoNASbWtW",
85f762c9 1835 };
1836 testNetwork(done, params);
1837});
1838it('Allows selection of Zcoin', function(done) {
1839 var params = {
1840 selectText: "XZC - Zcoin",
1dafc30d 1841 phrase: "abandon abandon ability",
85f762c9 1842 firstAddress: "a6VcMdP4XgAA9Tr7xNszmPG5FZpfRf17Cq",
1dafc30d
IC
1843 firstPubKey: "0236f2348c32dc62d69488b01988ed1154df261723ec60461cb6e62189984c62db",
1844 firstPrivKey: "Y8k3XQRQrJoABEao4Sw45s744g6xth7yviNqFcN7zqPqKUJrrKTQ",
85f762c9 1845 };
1846 testNetwork(done, params);
1847});
0702ecd3 1848it('Allows selection of Zcash', function(done) {
1849 var params = {
1850 selectText: "ZEC - Zcash",
1dafc30d 1851 phrase: "abandon abandon ability",
0702ecd3 1852 firstAddress: "t1Sz8AneMcVuzUg3tPJ8et5AS5LFJ7K2EF9",
1dafc30d
IC
1853 firstPubKey: "035864cede8db462f7ccfda96bd7358156e198a894032cfc87505d82abb6d48b48",
1854 firstPrivKey: "L1eU2kCeBQBZTQKKt7uYu4pb6Z1ZMy1Km1VMznUvGyH64GTxMqfL",
0702ecd3 1855 };
1856 testNetwork(done, params);
1857});
1e2cc748 1858it('Allows selection of Zclassic', function(done) {
1859 var params = {
1860 selectText: "ZCL - Zclassic",
1dafc30d 1861 phrase: "abandon abandon ability",
1e2cc748 1862 firstAddress: "t1TBMxTvVJRybUbMLGWq8H4A8F4VUL7czEc",
1dafc30d
IC
1863 firstPubKey: "02fbdf32c4d9e692d4a94aa09f830a2a3b7b73f5c4f313b8234fc39a8b151c9ab7",
1864 firstPrivKey: "L5N7BBrrAweLcbAQGVDLZAaX9DnfAiD2VCZBBU1U3HBftFsRfHm7",
1e2cc748 1865 };
1866 testNetwork(done, params);
1867});
ec38b3a2 1868it('Allows selection of Horizen', function(done) {
1e2cc748 1869 var params = {
ec38b3a2 1870 selectText: "ZEN - Horizen",
1dafc30d 1871 phrase: "abandon abandon ability",
1e2cc748 1872 firstAddress: "znWh9XASyW2dZq5tck84wFjiwuqVysi7q3p",
1dafc30d
IC
1873 firstPubKey: "0326a78c08ef8a2b6c0d0d3959ffeddaad64fc921b0e714baeafff4785db31ff7a",
1874 firstPrivKey: "L25L6Ctvb4fr6fTaVVECE2CVoeGuttfUJqk1HQxfuejgb5QZHu8y",
1e2cc748 1875 };
1876 testNetwork(done, params);
1877});
1878it('Allows selection of Energi', function(done) {
1879 var params = {
1880 selectText: "NRG - Energi",
1dafc30d 1881 phrase: "abandon abandon ability",
1e2cc748 1882 firstAddress: "EejRy4t4nidzhGGzkJUgFP3z4HYBjhTsRt",
1dafc30d
IC
1883 firstPubKey: "03a4aa1d4d5bdce7c18df69b123ef292e7e9b6069948b14bf3ee089188076e7c80",
1884 firstPrivKey: "GkMWjZtHh9RXFeNL2m5GKPp3wdNmiaSqqUWVLunR766TjbigK4FC",
1e2cc748 1885 };
1886 testNetwork(done, params);
1887});
bb381a72 1888it('Allows selection of Ethereum Classic', function(done) {
1889 var params = {
1890 selectText: "ETC - Ethereum Classic",
1dafc30d 1891 phrase: "abandon abandon ability",
c394ec3c 1892 firstAddress: "0x3c05e5556693808367afB62eF3b63e35d6eD249A",
1dafc30d
IC
1893 firstPubKey: "0x02afa443029a20b62fe90c3eaa772d440d8e2ddc1ad247c3473b3ff34dc0583f3f",
1894 firstPrivKey: "0x5253e43358ddb97c8c710a2f51fcbdf7c07aad193ddd29c8b57dbab50d6141f2",
bb381a72 1895 };
1896 testNetwork(done, params);
1897});
1898it('Allows selection of Pirl', function(done) {
1899 var params = {
1900 selectText: "PIRL - Pirl",
1dafc30d 1901 phrase: "abandon abandon ability",
c394ec3c 1902 firstAddress: "0xe77FC0723dA122B5025CA79193c28563eB47e776",
1dafc30d
IC
1903 firstPubKey: "0x039b4d13ecf9ef299546ba0d486969e0b659baa0cb71278501a46dce4381f612de",
1904 firstPrivKey: "0xe76ed1cffd0572b31be2ada6848d46e267b8b2242b30f1a92142f64ee4772460",
bb381a72 1905 };
1906 testNetwork(done, params);
1907});
1908it('Allows selection of MIX', function(done) {
1909 var params = {
1910 selectText: "MIX - MIX",
1dafc30d 1911 phrase: "abandon abandon ability",
c394ec3c 1912 firstAddress: "0x98BC5e63aeb6A4e82d72850d20710F07E29A29F1",
1dafc30d
IC
1913 firstPubKey: "0x02686ad3d73950627c46b73cd0c0d3b17e0bdcb89c094ce68b2f4219c09016c547",
1914 firstPrivKey: "0x70deca38fff7d8a2490491deb1bb7fbc979d6a0b97000b9f1eddefdd214eb7da",
bb381a72 1915 };
1916 testNetwork(done, params);
1917});
31264e8b
PT
1918it('Allows selection of Monkey Project', function(done) {
1919 var params = {
1920 selectText: "MONK - Monkey Project",
1dafc30d 1921 phrase: "abandon abandon ability",
31264e8b 1922 firstAddress: "MnLrcnnUzKnf7TzufjRe5DLZqQJz18oYyu",
1dafc30d
IC
1923 firstPubKey: "03a3f72bd9023fa12b22e5255d74e80420a968b577efbc52cea283da0f6690d4fc",
1924 firstPrivKey: "9B4CknHTfmvPS3oEG6AjJUMz1SZtJKN6rmEoaFoZNCJd1EU1xVdS",
31264e8b
PT
1925 };
1926 testNetwork(done, params);
1927});
1928
f3101bd3
LL
1929it('Allows selection of MOAC', function(done) {
1930 var params = {
1931 selectText: "MOAC - MOAC",
1932 phrase: "ill clump only blind unit burden thing track silver cloth review awake useful craft whale all satisfy else trophy sunset walk vanish hope valve",
1933 firstAddress: "0xa1350EA5707247e0092Ab780A0CDbeA9c8C7Acb5",
1934 firstPubKey: "0x0376b024c6068c9fda7e91779e115dcd3a70584fd6984e6dd25da144c46ca259c6",
1935 firstPrivKey: "0x2515f9db03c1e56de393648eabf35d288f730aadce5d30865c52e72b28e303c9",
1936 };
1937 testNetwork(done, params);
1938});
bb381a72 1939it('Allows selection of Musicoin', function(done) {
1940 var params = {
1941 selectText: "MUSIC - Musicoin",
1dafc30d 1942 phrase: "abandon abandon ability",
c394ec3c 1943 firstAddress: "0xDc060e4A0b0313ea83Cf6B3A39B9db2D29004897",
1dafc30d
IC
1944 firstPubKey: "0x02a17278d54548e7cf0c1e6120646174f42e380ae5a0080f1a0d09f118305d6f9f",
1945 firstPrivKey: "0xaea8683b8bfd56b6fc68c19b88eee4ccd2f00430bc466741d0297aa65c7b56a5",
bb381a72 1946 };
1947 testNetwork(done, params);
1948});
1949it('Allows selection of Poa', function(done) {
1950 var params = {
1951 selectText: "POA - Poa",
1dafc30d 1952 phrase: "abandon abandon ability",
c394ec3c 1953 firstAddress: "0x53aF28d754e106210C3d0467Dd581eaf7e3C5e60",
1dafc30d
IC
1954 firstPubKey: "0x02cda40cf7f21f370afe0206cbf219f963369d7c7229dc7ba64137358489d96567",
1955 firstPrivKey: "0xed0a44cff8e44fa978f339af3308ee439c30f4170671ad0e1ccd7e4bfff70ed9",
bb381a72 1956 };
1957 testNetwork(done, params);
1958});
1959it('Allows selection of Expanse', function(done) {
1960 var params = {
1961 selectText: "EXP - Expanse",
1dafc30d 1962 phrase: "abandon abandon ability",
c394ec3c 1963 firstAddress: "0xf57FeAbf26582b6E3E666559d3B1Cc6fB2b2c5F6",
1dafc30d
IC
1964 firstPubKey: "0x0232fa15f0971f93c182afea54cb28a3180f5a4c31759235ca6ceca47a5a777335",
1965 firstPrivKey: "0x9f96418f9ec3672b52c2a6421272650b2d5992d524a48905a4ff0ed9ce347c9b",
bb381a72 1966 };
1967 testNetwork(done, params);
1968});
1969it('Allows selection of Callisto', function(done) {
1970 var params = {
1971 selectText: "CLO - Callisto",
1dafc30d 1972 phrase: "abandon abandon ability",
c394ec3c 1973 firstAddress: "0x4f9364F7420B317266C51Dc8eB979717D4dE3f4E",
1dafc30d
IC
1974 firstPubKey: "0x0313d9db8d77249c768630a5a8315e08e3a3284d7e18774476d15e073931ddc15e",
1975 firstPrivKey: "0x02bbf00719f3730baf989f7392b8d55548dd349abd744c68242c69bd016ce28d",
bb381a72 1976 };
1977 testNetwork(done, params);
1978});
0afecfc7
IC
1979it('Allows selection of HUSH', function(done) {
1980 var params = {
318ec4dc 1981 selectText: "HUSH - Hush (Legacy)",
1dafc30d 1982 phrase: "abandon abandon ability",
0afecfc7 1983 firstAddress: "t1g6rLXUnJaiJuu4q4zmJjoa9Gk4fwKpiuA",
1dafc30d
IC
1984 firstPubKey: "038702683b2d7bbb5c35e18e01cd18483cda8485fb919f34c0186ae31a05007755",
1985 firstPrivKey: "Kx99fhLCDHPsBsZAJDH7v8vgGDch4rNr9VjhAUMfVevJWnoGr8WD",
0afecfc7
IC
1986 };
1987 testNetwork(done, params);
1988});
318ec4dc
PC
1989it('Allows selection of HUSH3', function(done) {
1990 var params = {
1991 selectText: "HUSH - Hush3",
1dafc30d 1992 phrase: "abandon abandon ability",
318ec4dc 1993 firstAddress: "RXWSQhwvw5jHPGP8bjwJhWoRnMLBnuPDKD",
1dafc30d
IC
1994 firstPubKey: "038702683b2d7bbb5c35e18e01cd18483cda8485fb919f34c0186ae31a05007755",
1995 firstPrivKey: "UpvyyNxAiWN7evMFUkxhgabuCHfq9xeTv17Wjj9LxN91QegKs6RR",
318ec4dc
PC
1996 };
1997 testNetwork(done, params);
1998});
a44c45e3 1999it('Allows selection of ExchangeCoin', function(done) {
2000 var params = {
2001 selectText: "EXCC - ExchangeCoin",
1dafc30d 2002 phrase: "abandon abandon ability",
a44c45e3 2003 firstAddress: "22txYKpFN5fwGwdSs2UBf7ywewbLM92YqK7E",
1dafc30d
IC
2004 firstPubKey: "033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3",
2005 firstPrivKey: "L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE",
a44c45e3 2006 };
2007 testNetwork(done, params);
2008});
2575538b
PC
2009it('Allows selection of Artax', function(done) {
2010 var params = {
2011 selectText: "XAX - Artax",
1dafc30d 2012 phrase: "abandon abandon ability",
2575538b 2013 firstAddress: "AYxaQPY7XLidG31V7F3yNzwxPYpYzRqG4q",
1dafc30d
IC
2014 firstPubKey: "02edef928ec3951112452119f9a63d9479741ea0fc497682bd13064cfc5d1cc4e3",
2015 firstPrivKey: "PMcqFx52ipYy9gZynEi5LYVD3XUC8YbQr2Neg6e3LFnh4yTBQ9yJ",
2575538b
PC
2016 };
2017 testNetwork(done, params);
2018});
8b2a093c
PC
2019it('Allows selection of BitcoinGreen', function(done) {
2020 var params = {
2021 selectText: "BITG - Bitcoin Green",
1dafc30d 2022 phrase: "abandon abandon ability",
8b2a093c 2023 firstAddress: "GeNGm9SkEfwbsws3UrrUSE2sJeyWYjzraY",
1dafc30d
IC
2024 firstPubKey: "02a8e34c2599a14ca861285b734750432a7ce10caf7f1ff5a366a94264c636a12b",
2025 firstPrivKey: "7uf6WeVgBqKR1WyUcaz1TLSKabyov9SfQDghyvfaCy6VZPwLNeku",
8b2a093c
PC
2026 };
2027 testNetwork(done, params);
2028});
45588661
KP
2029it('Allows selection of ANON', function(done) {
2030 var params = {
2031 selectText: "ANON - ANON",
1dafc30d 2032 phrase: "abandon abandon ability",
45588661 2033 firstAddress: "AnU6pijpEeUZFWSTyM2qTqZQn996Zq1Xard",
1dafc30d
IC
2034 firstPubKey: "032742ff4eaf9188d84d38dfb4a2fdbb541bfd3ca9ee533a7d1092940a1ea60bb4",
2035 firstPrivKey: "L2w3aoZExc9eHh1KMnDzrzaSVmfgQMvBxxFbtcegKNvrHVa4r81m",
45588661
KP
2036 };
2037 testNetwork(done, params);
2038});
d2ba3871
PC
2039it('Allows selection of ProjectCoin', function(done) {
2040 var params = {
2041 selectText: "PRJ - ProjectCoin",
1dafc30d 2042 phrase: "abandon abandon ability",
d2ba3871 2043 firstAddress: "PXZG97saRseSCftfe1mcFmfAA7pf6qBbaz",
1dafc30d
IC
2044 firstPubKey: "025f84297a93a33bccb735c931140ddb4279fe9d55a571ee7731259e3e19d0c7fe",
2045 firstPrivKey: "JRR5uB6daEtSCLNnv7hKSgZ5KmFdHMUcpTzJGtEAi9sWSiQd4hVQ",
d2ba3871
PC
2046 };
2047 testNetwork(done, params);
2048});
38d1b296
PC
2049it('Allows selection of Phore', function(done) {
2050 var params = {
2051 selectText: "PHR - Phore",
1dafc30d 2052 phrase: "abandon abandon ability",
38d1b296 2053 firstAddress: "PJThxpoXAG6hqrmdeQQbVDX4TJtFTMMymC",
1dafc30d
IC
2054 firstPubKey: "022ef3c4cbc0481fd925ecac51f09f2976ea024b0863b543b1b481181e1ef34265",
2055 firstPrivKey: "YPzQxHMA2Pm5S2p8Xwhmhm2PnH6ooYHrWNXiAKCCA2CjMtHyNzuh",
38d1b296
PC
2056 };
2057 testNetwork(done, params);
2058});
f1f1e39f
E
2059it('Allows selection of Safecoin', function(done) {
2060 var params = {
2061 selectText: "SAFE - Safecoin",
1dafc30d 2062 phrase: "abandon abandon ability",
869f5375 2063 firstAddress: "RtxHpnhJz6RY8k9owP3ua5QWraunmewB1G",
1dafc30d
IC
2064 firstPubKey: "0383956cd23c1124324c92ac69f4bcf71ad973892a83aceb4085041afb082f6db9",
2065 firstPrivKey: "Uznk2AHWqpSGRw8dmG3t3Q3rJJwyn3TcjzWh9EgDCQ9jU34DWF6m",
f1f1e39f
E
2066 };
2067 testNetwork(done, params);
2068 });
6f435817
U
2069it('Allows selection of Blocknode', function(done) {
2070 var params = {
2071 selectText: "BND - Blocknode",
1dafc30d 2072 phrase: "abandon abandon ability",
6f435817 2073 firstAddress: "BG8xZSAur2jYLG9VXt8dYfkKxxeR7w9bSe",
1dafc30d
IC
2074 firstPubKey: "03e91c00dcfca87c80f57691e34e0e4c55a18eb79048dbdd5f6d9c83daefea6459",
2075 firstPrivKey: "C6gySxND85cLnLgsjTfUxXmMzh8JrSR24vpQnUHqVMqGYy36k4ho",
6f435817
U
2076 };
2077 testNetwork(done, params);
2078});
2079it('Allows selection of Blocknode Testnet', function(done) {
2080 var params = {
2081 selectText: "tBND - Blocknode Testnet",
1dafc30d 2082 phrase: "abandon abandon ability",
6f435817 2083 firstAddress: "bSptsFyDktFSKpWveRywJsDoJA2TC6qfHv",
1dafc30d
IC
2084 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
2085 firstPrivKey: "MPuJVFnTAhFFvtLqgYL32FBF1g7jPraowuN5tV9EF2AtkYXCfkE3",
6f435817
U
2086 };
2087 testNetwork(done, params);
2088});
d4fcdda9
PC
2089it('Allows selection of LitecoinZ', function(done) {
2090 var params = {
2091 selectText: "LTZ - LitecoinZ",
1dafc30d 2092 phrase: "abandon abandon ability",
d4fcdda9 2093 firstAddress: "L1VTXju7hLgKV4T7fGXS9sKsnm2gmtRCmyw",
1dafc30d
IC
2094 firstPubKey: "03ea84a1cc8b43ea8330bc2f363e706a9ff2d48858185c42c296d06ddcb94bc827",
2095 firstPrivKey: "L1PktmLfTgVRQZsqs2ZoFBBqnVXi5hVAimJt8tmfT2ye95WH9zEd",
d4fcdda9
PC
2096 };
2097 testNetwork(done, params);
2098});
f22f7677
PC
2099it('Allows selection of BlockStamp', function(done) {
2100 var params = {
2101 selectText: "BST - BlockStamp",
1dafc30d 2102 phrase: "abandon abandon ability",
f22f7677 2103 firstAddress: "15gypKtim4cVTj137ApfryG17RkvSbPazZ",
1dafc30d
IC
2104 firstPubKey: "0277bc537f8354004f8a77e07fb78b38f291df7bc07819c2d7eab049b8d10b3f7f",
2105 firstPrivKey: "L1NmycTQz17fXBMzK25aBTnN7v5U6rz3AURjL72xyKg21zmAmgt7",
f22f7677
PC
2106 };
2107 testNetwork(done, params);
2108});
6cbd3bc8
HL
2109it('Allows selection of DEXON', function(done) {
2110 var params = {
2111 selectText: "DXN - DEXON",
1dafc30d 2112 phrase: "abandon abandon ability",
c394ec3c 2113 firstAddress: "0x136a58788033E028CCd740FbDec6734358DB56Ec",
1dafc30d
IC
2114 firstPubKey: "0x028d7fa8c3417904cec37946db8d12bba51d85dde25156651f216260e0ff641cf4",
2115 firstPrivKey: "0x8d7d8479dac38e786d4e493159dd655e116871d17ed803af6bb70207c60298ff",
6cbd3bc8
HL
2116 };
2117 testNetwork(done, params);
2118});
2885ddd5 2119it('Allows selection of Ellaism', function(done) {
2120 var params = {
2121 selectText: "ELLA - Ellaism",
1dafc30d 2122 phrase: "abandon abandon ability",
c394ec3c 2123 firstAddress: "0xa8B0BeA09eeBc41062308546a01d6E544277e2Ca",
1dafc30d
IC
2124 firstPubKey: "0x03698fee21c52ad4b4772df3da92ddf0278da529da231c2ebfb167c9e3cc88f29f",
2125 firstPrivKey: "0xe10bc99fcea6f5bca20c1b6e5386a18991b8d16d658b36881b7aca792e06bac2",
2885ddd5 2126 };
2127 testNetwork(done, params);
2128});
16afe3ec 2129it('Allows selection of Ethersocial Network', function(done) {
2130 var params = {
2131 selectText: "ESN - Ethersocial Network",
1dafc30d 2132 phrase: "abandon abandon ability",
c394ec3c 2133 firstAddress: "0x6EE99Be2A0C7F887a71e21C8608ACF0aa0D2b767",
1dafc30d
IC
2134 firstPubKey: "0x028df59c64daa4f1036fe0dc832c4e36d9df0692a7ed9a062d48a4662a01d2c7b3",
2135 firstPrivKey: "0x44e0316578fd8168022039d5dfd5838e70826686a4b05dec9c88100c30049fce",
16afe3ec 2136 };
2137 testNetwork(done, params);
2138});
152f0ce9
IC
2139it('Allows selection of Stellar', function(done) {
2140 var params = {
2141 selectText: "XLM - Stellar",
1dafc30d 2142 phrase: "abandon abandon ability",
152f0ce9 2143 firstAddress: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
1dafc30d
IC
2144 firstPubKey: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
2145 firstPrivKey: "SA35HYGAHWYYLCW2P5EDHGWAYQW2C5F25KH4KFWEXLG5I4CPKPZTLRM5",
152f0ce9
IC
2146 };
2147 testNetwork(done, params);
2148});
67f18e2a
C
2149it('Allows selection of Wagerr', function(done) {
2150 var params = {
2151 selectText: "WGR - Wagerr",
1dafc30d 2152 phrase: "abandon abandon ability",
67f18e2a 2153 firstAddress: "WYiVgQU39VcQxcnacoCiaZHZZLjDCJoS95",
1dafc30d
IC
2154 firstPubKey: "0343cfa1ed85e02fdc782c3c8b0b5febe7653c30a0c4319bef2e7d462e67245e46",
2155 firstPrivKey: "WagfoYsRKgtBwBMgwYWuboY2DpGjJBpFcneqzSegZg4ppvYLWcry",
67f18e2a
C
2156 };
2157 testNetwork(done, params);
2158});
76120cb0
H
2159it('Allows selection of Groestlcoin', function(done) {
2160 var params = {
2161 selectText: "GRS - Groestlcoin",
1dafc30d 2162 phrase: "abandon abandon ability",
76120cb0 2163 firstAddress: "FZycsFvZ1eH1hbtyjBpAgJSukVw1bN6PBN",
1dafc30d
IC
2164 firstPubKey: "03c1d0c7b272a762b4b697bdb1b3b36e26add3215e69f7251db16c5a51c84b7b4c",
2165 firstPrivKey: "KzQVqEsQrKjb4K6bViRqqQJc9nXrvEAxDy2AiPf6tfEkRW7rgNfg",
76120cb0
H
2166 };
2167 testNetwork(done, params);
2168});
2169it('Allows selection of Groestlcoin Testnet', function(done) {
2170 var params = {
2171 selectText: "GRS - Groestlcoin Testnet",
1dafc30d 2172 phrase: "abandon abandon ability",
76120cb0 2173 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiygRPne9",
1dafc30d
IC
2174 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
2175 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJpRHpNq",
76120cb0
H
2176 };
2177 testNetwork(done, params);
2178});
36523e0d
NJ
2179it('Allows selection of Elastos', function(done) {
2180 var params = {
2181 selectText: "ELA - Elastos",
1dafc30d 2182 phrase: "abandon abandon ability",
1ba58161 2183 firstAddress: "EMccDcsn3SwPDcfeQMf3w7utqi8ioWYtkg",
1dafc30d
IC
2184 firstPubKey: "02c936d5025b06acc283bf9562700279fd1ea3ce7ee204afca0c07be77bc3b4822",
2185 firstPrivKey: "608f7e64b46a1df51ba6b5b38b0599196afd1f36572b1ec696d7aae65d05045d",
36523e0d
NJ
2186 };
2187 testNetwork(done, params);
2188});
3799728c 2189it('Allows selection of Energyweb', function(done) {
bfe1963e
IC
2190 var params = {
2191 selectText: "EWT - EnergyWeb",
1dafc30d 2192 phrase: "abandon abandon ability",
c845ee6f 2193 firstAddress: "0x22171474844Fc7E8E99A3A69CCf1eDb5574FdD4c",
1dafc30d
IC
2194 firstPubKey: "0x03eee63d4d201168802b43f392e61f148a478935055cd990549452c741f4c34b84",
2195 firstPrivKey: "0x325aa9e82d03b3773859d84bece81a598df8478d361cfbc59efc27385e0e3611",
bfe1963e
IC
2196 };
2197 testNetwork(done, params);
2198});
93f3a286
IC
2199it('Allows selection of Thought', function(done) {
2200 var params = {
2201 selectText: "THT - Thought",
1dafc30d 2202 phrase: "abandon abandon ability",
93f3a286 2203 firstAddress: "4B1Bh9GibDarFQrhtYU8krpc7WSjgGfYvo",
1dafc30d
IC
2204 firstPubKey: "0390e4598e7924f3b0369020394b133545db6bd37fa3aa4648aafbce46330c28cc",
2205 firstPrivKey: "KCwL3y6VVrgzJFqtCkh2RV9M1zruX9NymKsWheb7by1dWLd2QkFx",
93f3a286
IC
2206 };
2207 testNetwork(done, params);
2208});
9e04576e
EC
2209it('Allows selection of EtherCore', function(done) {
2210 var params = {
2211 selectText: "ERE - EtherCore",
1dafc30d 2212 phrase: "abandon abandon ability",
0bc6361d 2213 firstAddress: "0x119e6EAC3Ce1b473D62d9fD847fb0ea222eF1D9e",
1dafc30d
IC
2214 firstPubKey: "0x02cfeb9a4d8003b5c919c1eb67c91e06b3c08e602a336f74017fc7c756a2550ca9",
2215 firstPrivKey: "0x6bb6e036aaf39326d3c74345ec34ef0c73b1608acb409306c9ba73d22de6abf0",
9e04576e
EC
2216 };
2217 testNetwork(done, params);
2218});
a67554c6
IC
2219it('Allows selection of RBTC - RSK', function(done) {
2220 var params = {
2221 selectText: "RBTC - RSK",
1dafc30d 2222 phrase: "abandon abandon ability",
a67554c6 2223 firstAddress: "RGtz5TDdtviAZ9haz1YAUNQzcGVFm5bQrP",
1dafc30d
IC
2224 firstPubKey: "0219d9b5087ab68edc8a714969d8cb70e7159417b47a05932b227e6f417c7962b9",
2225 firstPrivKey: "UsiDPMcpYqCwtzGXo4wiPZp7cwBaKdmbmseioTc1rFQsg21adFc8",
a67554c6
IC
2226 };
2227 testNetwork(done, params);
2228});
2229it('Allows selection of tRBTC - RSK Testnet', function(done) {
2230 var params = {
2231 selectText: "tRBTC - RSK Testnet",
1dafc30d 2232 phrase: "abandon abandon ability",
a67554c6 2233 firstAddress: "RHkrWgnSdJHxQAqEsMErhUUa4icXY6xUUC",
1dafc30d
IC
2234 firstPubKey: "03f77eb7bd83e92ef47be1abddae7f71fb0bc8a7a1ee4b193662a86ed2705ffc5b",
2235 firstPrivKey: "UpqfuSEDKoacrPh4wMV4sJZqCB6DJfYe81oWBr4eb7y9FWQWoo2A",
a67554c6
IC
2236 };
2237 testNetwork(done, params);
2238});
46054e44
OS
2239it('Allows selection of Argoneum', function(done) {
2240 var params = {
2241 selectText: "AGM - Argoneum",
2242 phrase: "abandon abandon ability",
2243 firstAddress: "MWgLPvJkaJwH6hrXFs1MimAC4FwC1kYRhe",
2244 firstPubKey: "0348e5252045fee1d3b1e5bce25dbc16284d5b6c3bfff9c305d4ffa6078c16f3f8",
2245 firstPrivKey: "VJXpuMEFnK8USLyo5tgF7M4cBXU44U8MUor1KRTQ6t9DVno9AAgg",
2246 };
2247 testNetwork(done, params);
2248});
0460b53f
IC
2249
2250// BIP39 seed is set from phrase
2251it('Sets the bip39 seed from the prhase', function(done) {
2252 driver.findElement(By.css('.phrase'))
2253 .sendKeys('abandon abandon ability');
2254 driver.sleep(generateDelay).then(function() {
2255 driver.findElement(By.css('.seed'))
2256 .getAttribute("value")
2257 .then(function(seed) {
2258 expect(seed).toBe("20da140d3dd1df8713cefcc4d54ce0e445b4151027a1ab567b832f6da5fcc5afc1c3a3f199ab78b8e0ab4652efd7f414ac2c9a3b81bceb879a70f377aa0a58f3");
2259 done();
2260 })
2261 });
2262});
2263
2264// BIP32 root key is set from phrase
2265it('Sets the bip39 root key from the prhase', function(done) {
2266 driver.findElement(By.css('.phrase'))
2267 .sendKeys('abandon abandon ability');
2268 driver.sleep(generateDelay).then(function() {
2269 driver.findElement(By.css('.root-key'))
2270 .getAttribute("value")
2271 .then(function(seed) {
2272 expect(seed).toBe("xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi");
2273 done();
2274 })
2275 });
2276});
2277
2278// Tabs show correct addresses when changed
2279it('Shows the correct address when tab is changed', function(done) {
2280 driver.findElement(By.css('.phrase'))
2281 .sendKeys('abandon abandon ability');
2282 driver.sleep(generateDelay).then(function() {
2283 driver.findElement(By.css('#bip32-tab a'))
2284 .click();
2285 driver.sleep(generateDelay).then(function() {
2286 getFirstAddress(function(address) {
2287 expect(address).toBe("17uQ7s2izWPwBmEVFikTmZUjbBKWYdJchz");
2288 done();
2289 });
2290 });
2291 });
2292});
2293
2294// BIP44 derivation path is shown
2295it('Shows the derivation path for bip44 tab', function(done) {
2296 driver.findElement(By.css('.phrase'))
2297 .sendKeys('abandon abandon ability');
2298 driver.sleep(generateDelay).then(function() {
2299 driver.findElement(By.css('#bip44 .path'))
2300 .getAttribute("value")
2301 .then(function(path) {
2302 expect(path).toBe("m/44'/0'/0'/0");
2303 done();
2304 })
2305 });
2306});
2307
2308// BIP44 extended private key is shown
2309it('Shows the extended private key for bip44 tab', function(done) {
2310 driver.findElement(By.css('.phrase'))
2311 .sendKeys('abandon abandon ability');
2312 driver.sleep(generateDelay).then(function() {
2313 driver.findElement(By.css('.extended-priv-key'))
2314 .getAttribute("value")
2315 .then(function(path) {
2316 expect(path).toBe("xprvA2DxxvPZcyRvYgZMGS53nadR32mVDeCyqQYyFhrCVbJNjPoxMeVf7QT5g7mQASbTf9Kp4cryvcXnu2qurjWKcrdsr91jXymdCDNxKgLFKJG");
2317 done();
2318 })
2319 });
2320});
2321
2322// BIP44 extended public key is shown
2323it('Shows the extended public key for bip44 tab', function(done) {
2324 driver.findElement(By.css('.phrase'))
2325 .sendKeys('abandon abandon ability');
2326 driver.sleep(generateDelay).then(function() {
2327 driver.findElement(By.css('.extended-pub-key'))
2328 .getAttribute("value")
2329 .then(function(path) {
2330 expect(path).toBe("xpub6FDKNRvTTLzDmAdpNTc49ia9b4byd6vqCdUa46Fp3vqMcC96uBoufCmZXQLiN5AK3iSCJMhf9gT2sxkpyaPepRuA7W3MujV5tGmF5VfbueM");
2331 done();
2332 })
2333 });
2334});
2335
2336// BIP44 account field changes address list
2337it('Changes the address list if bip44 account is changed', function(done) {
2338 driver.findElement(By.css('#bip44 .account'))
2339 .sendKeys('1');
2340 driver.findElement(By.css('.phrase'))
2341 .sendKeys('abandon abandon ability');
2342 driver.sleep(generateDelay).then(function() {
2343 getFirstAddress(function(address) {
2344 expect(address).toBe("1Nq2Wmu726XHCuGhctEtGmhxo3wzk5wZ1H");
2345 done();
2346 });
2347 });
2348});
2349
2350// BIP44 change field changes address list
2351it('Changes the address list if bip44 change is changed', function(done) {
2352 driver.findElement(By.css('#bip44 .change'))
2353 .sendKeys('1');
2354 driver.findElement(By.css('.phrase'))
2355 .sendKeys('abandon abandon ability');
2356 driver.sleep(generateDelay).then(function() {
2357 getFirstAddress(function(address) {
2358 expect(address).toBe("1KAGfWgqfVbSSXY56fNQ7YnhyKuoskHtYo");
2359 done();
2360 });
2361 });
2362});
2363
2364// BIP32 derivation path can be set
2365it('Can use a custom bip32 derivation path', function(done) {
2366 driver.findElement(By.css('#bip32-tab a'))
2367 .click();
2368 driver.findElement(By.css('#bip32 .path'))
2369 .clear();
2370 driver.findElement(By.css('#bip32 .path'))
2371 .sendKeys('m/1');
2372 driver.findElement(By.css('.phrase'))
2373 .sendKeys('abandon abandon ability');
2374 driver.sleep(generateDelay).then(function() {
2375 getFirstAddress(function(address) {
2376 expect(address).toBe("16pYQQdLD1hH4hwTGLXBaZ9Teboi1AGL8L");
2377 done();
2378 });
2379 });
2380});
2381
2382// BIP32 can use hardened derivation paths
2383it('Can use a hardened derivation paths', function(done) {
2384 driver.findElement(By.css('#bip32-tab a'))
2385 .click();
2386 driver.findElement(By.css('#bip32 .path'))
2387 .clear();
2388 driver.findElement(By.css('#bip32 .path'))
2389 .sendKeys("m/0'");
2390 driver.findElement(By.css('.phrase'))
2391 .sendKeys('abandon abandon ability');
2392 driver.sleep(generateDelay).then(function() {
2393 getFirstAddress(function(address) {
2394 expect(address).toBe("14aXZeprXAE3UUKQc4ihvwBvww2LuEoHo4");
2395 done();
2396 });
2397 });
2398});
2399
2400// BIP32 extended private key is shown
2401it('Shows the BIP32 extended private key', function(done) {
2402 driver.findElement(By.css('#bip32-tab a'))
2403 .click();
2404 driver.findElement(By.css('.phrase'))
2405 .sendKeys('abandon abandon ability');
2406 driver.sleep(generateDelay).then(function() {
2407 driver.findElement(By.css('.extended-priv-key'))
2408 .getAttribute("value")
2409 .then(function(privKey) {
2410 expect(privKey).toBe("xprv9va99uTVE5aLiutUVLTyfxfe8v8aaXjSQ1XxZbK6SezYVuikA9MnjQVTA8rQHpNA5LKvyQBpLiHbBQiiccKiBDs7eRmBogsvq3THFeLHYbe");
2411 done();
2412 });
2413 });
2414});
2415
2416// BIP32 extended public key is shown
2417it('Shows the BIP32 extended public key', function(done) {
2418 driver.findElement(By.css('#bip32-tab a'))
2419 .click();
2420 driver.findElement(By.css('.phrase'))
2421 .sendKeys('abandon abandon ability');
2422 driver.sleep(generateDelay).then(function() {
2423 driver.findElement(By.css('.extended-pub-key'))
2424 .getAttribute("value")
2425 .then(function(pubKey) {
2426 expect(pubKey).toBe("xpub69ZVZQzP4T8dwPxwbMzz36cNgwy4yzTHmETZMyihzzXXNi3thgg3HCow1RtY252wdw5rS8369xKnraN5Q93y3FkFfJp2XEHWUrkyXsjS93P");
2427 done();
2428 });
2429 });
2430});
2431
2432// Derivation path is shown in table
2433it('Shows the derivation path in the table', function(done) {
2434 driver.findElement(By.css('.phrase'))
2435 .sendKeys('abandon abandon ability');
2436 driver.sleep(generateDelay).then(function() {
2437 getFirstPath(function(path) {
2438 expect(path).toBe("m/44'/0'/0'/0/0");
2439 done();
2440 });
2441 });
2442});
2443
2444// Derivation path for address can be hardened
2445it('Can derive hardened addresses', function(done) {
2446 driver.findElement(By.css('#bip32-tab a'))
2447 .click();
2448 driver.executeScript(function() {
2449 $(".hardened-addresses").prop("checked", true);
2450 });
2451 driver.findElement(By.css('.phrase'))
2452 .sendKeys('abandon abandon ability');
2453 driver.sleep(generateDelay).then(function() {
2454 getFirstAddress(function(address) {
2455 expect(address).toBe("18exLzUv7kfpiXRzmCjFDoC9qwNLFyvwyd");
2456 done();
2457 });
2458 });
2459});
2460
2461// Derivation path visibility can be toggled
2462it('Can toggle visibility of the derivation path column', function(done) {
2463 driver.findElement(By.css('.phrase'))
2464 .sendKeys('abandon abandon ability');
2465 driver.sleep(generateDelay).then(function() {
2466 driver.findElement(By.css('.index-toggle'))
2467 .click();
2468 testColumnValuesAreInvisible(done, "index");
2469 });
2470});
2471
2472// Address is shown
2473it('Shows the address in the table', function(done) {
2474 driver.findElement(By.css('.phrase'))
2475 .sendKeys('abandon abandon ability');
2476 driver.sleep(generateDelay).then(function() {
2477 getFirstAddress(function(address) {
2478 expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
2479 done();
2480 });
2481 });
2482});
2483
2484// Addresses are shown in order of derivation path
2485it('Shows the address in order of derivation path', function(done) {
2486 driver.findElement(By.css('.phrase'))
2487 .sendKeys('abandon abandon ability');
2488 driver.sleep(generateDelay).then(function() {
2489 testRowsAreInCorrectOrder(done);
2490 });
2491});
2492
2493// Address visibility can be toggled
2494it('Can toggle visibility of the address column', function(done) {
2495 driver.findElement(By.css('.phrase'))
2496 .sendKeys('abandon abandon ability');
2497 driver.sleep(generateDelay).then(function() {
2498 driver.findElement(By.css('.address-toggle'))
2499 .click();
2500 testColumnValuesAreInvisible(done, "address");
2501 });
2502});
2503
2504// Public key is shown in table
2505it('Shows the public key in the table', function(done) {
2506 driver.findElement(By.css('.phrase'))
2507 .sendKeys('abandon abandon ability');
2508 driver.sleep(generateDelay).then(function() {
2509 driver.findElements(By.css('.pubkey'))
2510 .then(function(els) {
2511 els[0].getText()
2512 .then(function(pubkey) {
2513 expect(pubkey).toBe("033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3");
2514 done();
2515 });
2516 });
2517 });
2518});
2519
2520// Public key visibility can be toggled
2521it('Can toggle visibility of the public key column', function(done) {
2522 driver.findElement(By.css('.phrase'))
2523 .sendKeys('abandon abandon ability');
2524 driver.sleep(generateDelay).then(function() {
2525 driver.findElement(By.css('.public-key-toggle'))
2526 .click();
2527 testColumnValuesAreInvisible(done, "pubkey");
2528 });
2529});
2530
2531// Private key is shown in table
2532it('Shows the private key in the table', function(done) {
2533 driver.findElement(By.css('.phrase'))
2534 .sendKeys('abandon abandon ability');
2535 driver.sleep(generateDelay).then(function() {
2536 driver.findElements(By.css('.privkey'))
2537 .then(function(els) {
2538 els[0].getText()
2539 .then(function(pubkey) {
2540 expect(pubkey).toBe("L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE");
2541 done();
2542 });
2543 });
2544 });
2545});
2546
2547// Private key visibility can be toggled
2548it('Can toggle visibility of the private key column', function(done) {
2549 driver.findElement(By.css('.phrase'))
2550 .sendKeys('abandon abandon ability');
2551 driver.sleep(generateDelay).then(function() {
2552 driver.findElement(By.css('.private-key-toggle'))
2553 .click();
2554 testColumnValuesAreInvisible(done, "privkey");
2555 });
2556});
2557
2558// More addresses can be generated
2559it('Can generate more rows in the table', function(done) {
2560 driver.findElement(By.css('.phrase'))
2561 .sendKeys('abandon abandon ability');
2562 driver.sleep(generateDelay).then(function() {
2563 driver.findElement(By.css('.more'))
2564 .click();
2565 driver.sleep(generateDelay).then(function() {
2566 driver.findElements(By.css('.address'))
2567 .then(function(els) {
2568 expect(els.length).toBe(40);
2569 done();
2570 });
2571 });
2572 });
2573});
2574
2575// A custom number of additional addresses can be generated
2576it('Can generate more rows in the table', function(done) {
0460b53f
IC
2577 driver.findElement(By.css('.phrase'))
2578 .sendKeys('abandon abandon ability');
2579 driver.sleep(generateDelay).then(function() {
5dfe77e4
IC
2580 driver.findElement(By.css('.rows-to-add'))
2581 .clear();
2582 driver.findElement(By.css('.rows-to-add'))
2583 .sendKeys('1');
0460b53f
IC
2584 driver.findElement(By.css('.more'))
2585 .click();
2586 driver.sleep(generateDelay).then(function() {
2587 driver.findElements(By.css('.address'))
2588 .then(function(els) {
2589 expect(els.length).toBe(21);
2590 done();
2591 });
2592 });
2593 });
2594});
2595
2596// Additional addresses are shown in order of derivation path
2597it('Shows additional addresses in order of derivation path', function(done) {
2598 driver.findElement(By.css('.phrase'))
2599 .sendKeys('abandon abandon ability');
2600 driver.sleep(generateDelay).then(function() {
2601 driver.findElement(By.css('.more'))
2602 .click();
2603 driver.sleep(generateDelay).then(function() {
2604 testRowsAreInCorrectOrder(done);
2605 });
2606 });
2607});
2608
2609// BIP32 root key can be set by the user
2610it('Allows the user to set the BIP32 root key', function(done) {
2611 driver.findElement(By.css('.root-key'))
2612 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
2613 driver.sleep(generateDelay).then(function() {
2614 getFirstAddress(function(address) {
2615 expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
2616 done();
2617 });
2618 });
2619});
2620
2621// Setting BIP32 root key clears the existing phrase, passphrase and seed
0460b53f 2622it('Confirms the existing phrase should be cleared', function(done) {
0460b53f
IC
2623 driver.findElement(By.css('.phrase'))
2624 .sendKeys('A non-blank but invalid value');
2625 driver.findElement(By.css('.root-key'))
2626 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
2627 driver.switchTo().alert().accept();
2628 driver.findElement(By.css('.phrase'))
2629 .getAttribute("value").then(function(value) {
2630 expect(value).toBe("");
2631 done();
2632 });
2633});
2634
2635// Clearing of phrase, passphrase and seed can be cancelled by user
0460b53f 2636it('Allows the clearing of the phrase to be cancelled', function(done) {
0460b53f
IC
2637 driver.findElement(By.css('.phrase'))
2638 .sendKeys('abandon abandon ability');
2639 driver.sleep(generateDelay).then(function() {
2640 driver.findElement(By.css('.root-key'))
2641 .clear();
2642 driver.findElement(By.css('.root-key'))
2643 .sendKeys('x');
2644 driver.switchTo().alert().dismiss();
2645 driver.findElement(By.css('.phrase'))
2646 .getAttribute("value").then(function(value) {
2647 expect(value).toBe("abandon abandon ability");
2648 done();
2649 });
2650 });
2651});
2652
2653// Custom BIP32 root key is used when changing the derivation path
2654it('Can set derivation path for root key instead of phrase', function(done) {
2655 driver.findElement(By.css('#bip44 .account'))
2656 .sendKeys('1');
2657 driver.findElement(By.css('.root-key'))
2658 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
2659 driver.sleep(generateDelay).then(function() {
2660 getFirstAddress(function(address) {
2661 expect(address).toBe("1Nq2Wmu726XHCuGhctEtGmhxo3wzk5wZ1H");
2662 done();
2663 });
2664 });
2665});
2666
2667// Incorrect mnemonic shows error
2668it('Shows an error for incorrect mnemonic', function(done) {
2669 driver.findElement(By.css('.phrase'))
2670 .sendKeys('abandon abandon abandon');
2671 driver.sleep(feedbackDelay).then(function() {
2672 driver.findElement(By.css('.feedback'))
2673 .getText()
2674 .then(function(feedback) {
2675 expect(feedback).toBe("Invalid mnemonic");
2676 done();
2677 });
2678 });
2679});
2680
2681// Incorrect word shows suggested replacement
2682it('Shows word suggestion for incorrect word', function(done) {
2683 driver.findElement(By.css('.phrase'))
2684 .sendKeys('abandon abandon abiliti');
2685 driver.sleep(feedbackDelay).then(function() {
2686 driver.findElement(By.css('.feedback'))
2687 .getText()
2688 .then(function(feedback) {
2689 var msg = "abiliti not in wordlist, did you mean ability?";
2690 expect(feedback).toBe(msg);
2691 done();
2692 });
2693 });
2694});
2695
2696// Github pull request 48
2697// First four letters of word shows that word, not closest
2698// since first four letters gives unique word in BIP39 wordlist
2699// eg ille should show illegal, not idle
2700it('Shows word suggestion based on first four chars', function(done) {
2701 driver.findElement(By.css('.phrase'))
2702 .sendKeys('ille');
2703 driver.sleep(feedbackDelay).then(function() {
2704 driver.findElement(By.css('.feedback'))
2705 .getText()
2706 .then(function(feedback) {
2707 var msg = "ille not in wordlist, did you mean illegal?";
2708 expect(feedback).toBe(msg);
2709 done();
2710 });
2711 });
2712});
2713
2714// Incorrect BIP32 root key shows error
2715it('Shows error for incorrect root key', function(done) {
2716 driver.findElement(By.css('.root-key'))
2717 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpj');
2718 driver.sleep(feedbackDelay).then(function() {
2719 driver.findElement(By.css('.feedback'))
2720 .getText()
2721 .then(function(feedback) {
2722 var msg = "Invalid root key";
2723 expect(feedback).toBe(msg);
2724 done();
2725 });
2726 });
2727});
2728
2729// Derivation path not starting with m shows error
2730it('Shows error for derivation path not starting with m', function(done) {
2731 driver.findElement(By.css('#bip32-tab a'))
2732 .click();
2733 driver.findElement(By.css('#bip32 .path'))
2734 .clear();
2735 driver.findElement(By.css('#bip32 .path'))
2736 .sendKeys('n/0');
2737 driver.findElement(By.css('.phrase'))
2738 .sendKeys('abandon abandon ability');
2739 driver.sleep(feedbackDelay).then(function() {
2740 driver.findElement(By.css('.feedback'))
2741 .getText()
2742 .then(function(feedback) {
2743 var msg = "First character must be 'm'";
2744 expect(feedback).toBe(msg);
2745 done();
2746 });
2747 });
2748});
2749
2750// Derivation path containing invalid characters shows useful error
2751it('Shows error for derivation path not starting with m', function(done) {
2752 driver.findElement(By.css('#bip32-tab a'))
2753 .click();
2754 driver.findElement(By.css('#bip32 .path'))
2755 .clear();
2756 driver.findElement(By.css('#bip32 .path'))
2757 .sendKeys('m/1/0wrong1/1');
2758 driver.findElement(By.css('.phrase'))
2759 .sendKeys('abandon abandon ability');
2760 driver.sleep(feedbackDelay).then(function() {
2761 driver.findElement(By.css('.feedback'))
2762 .getText()
2763 .then(function(feedback) {
2764 var msg = "Invalid characters 0wrong1 found at depth 2";
2765 expect(feedback).toBe(msg);
2766 done();
2767 });
2768 });
2769});
2770
2771// Github Issue 11: Default word length is 15
2772// https://github.com/iancoleman/bip39/issues/11
2773it('Sets the default word length to 15', function(done) {
2774 driver.findElement(By.css('.strength'))
2775 .getAttribute("value")
2776 .then(function(strength) {
2777 expect(strength).toBe("15");
2778 done();
2779 });
2780});
2781
2782// Github Issue 12: Generate more rows with private keys hidden
2783// https://github.com/iancoleman/bip39/issues/12
2784it('Sets the correct hidden column state on new rows', function(done) {
2785 driver.findElement(By.css('.phrase'))
2786 .sendKeys("abandon abandon ability");
2787 driver.sleep(generateDelay).then(function() {
2788 driver.findElement(By.css('.private-key-toggle'))
2789 .click();
2790 driver.findElement(By.css('.more'))
2791 .click();
2792 driver.sleep(generateDelay).then(function() {
2793 driver.findElements(By.css('.privkey'))
2794 .then(function(els) {
2795 expect(els.length).toBe(40);
2796 });
2797 testColumnValuesAreInvisible(done, "privkey");
2798 });
2799 });
2800});
2801
2802// Github Issue 19: Mnemonic is not sensitive to whitespace
2803// https://github.com/iancoleman/bip39/issues/19
2804it('Ignores excess whitespace in the mnemonic', function(done) {
2805 var doublespace = " ";
2806 var mnemonic = "urge cat" + doublespace + "bid";
2807 driver.findElement(By.css('.phrase'))
2808 .sendKeys(mnemonic);
2809 driver.sleep(generateDelay).then(function() {
2810 driver.findElement(By.css('.root-key'))
2811 .getAttribute("value")
2812 .then(function(seed) {
2813 expect(seed).toBe("xprv9s21ZrQH143K3isaZsWbKVoTtbvd34Y1ZGRugGdMeBGbM3AgBVzTH159mj1cbbtYSJtQr65w6L5xy5L9SFC7c9VJZWHxgAzpj4mun5LhrbC");
2814 done();
2815 });
2816 });
2817});
2818
2819// Github Issue 23: Part 1: Use correct derivation path when changing tabs
2820// https://github.com/iancoleman/bip39/issues/23
b6035722 2821// This test was failing for default timeout of 5000ms so changed it to +10s
0460b53f
IC
2822it('Uses the correct derivation path when changing tabs', function(done) {
2823 // 1) and 2) set the phrase
2824 driver.findElement(By.css('.phrase'))
2825 .sendKeys("abandon abandon ability");
2826 driver.sleep(generateDelay).then(function() {
2827 // 3) select bip32 tab
2828 driver.findElement(By.css('#bip32-tab a'))
2829 .click();
2830 driver.sleep(generateDelay).then(function() {
2831 // 4) switch from bitcoin to litecoin
2832 selectNetwork("LTC - Litecoin");
2833 driver.sleep(generateDelay).then(function() {
2834 // 5) Check address is displayed correctly
2835 getFirstAddress(function(address) {
2836 expect(address).toBe("LS8MP5LZ5AdzSZveRrjm3aYVoPgnfFh5T5");
2837 // 5) Check derivation path is displayed correctly
2838 getFirstPath(function(path) {
2839 expect(path).toBe("m/0/0");
2840 done();
2841 });
2842 });
2843 });
2844 });
2845 });
b6035722 2846}, generateDelay + 10000);
0460b53f
IC
2847
2848// Github Issue 23 Part 2: Coin selection in derivation path
2849// https://github.com/iancoleman/bip39/issues/23#issuecomment-238011920
2850it('Uses the correct derivation path when changing coins', function(done) {
2851 // set the phrase
2852 driver.findElement(By.css('.phrase'))
2853 .sendKeys("abandon abandon ability");
2854 driver.sleep(generateDelay).then(function() {
2855 // switch from bitcoin to clam
2856 selectNetwork("CLAM - Clams");
2857 driver.sleep(generateDelay).then(function() {
2858 // check derivation path is displayed correctly
2859 getFirstPath(function(path) {
2860 expect(path).toBe("m/44'/23'/0'/0/0");
2861 done();
2862 });
2863 });
2864 });
2865});
2866
2867// Github Issue 26: When using a Root key derrived altcoins are incorrect
2868// https://github.com/iancoleman/bip39/issues/26
2869it('Uses the correct derivation for altcoins with root keys', function(done) {
2870 // 1) 2) and 3) set the root key
2871 driver.findElement(By.css('.root-key'))
2872 .sendKeys("xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi");
2873 driver.sleep(generateDelay).then(function() {
2874 // 4) switch from bitcoin to viacoin
2875 selectNetwork("VIA - Viacoin");
2876 driver.sleep(generateDelay).then(function() {
2877 // 5) ensure the derived address is correct
2878 getFirstAddress(function(address) {
2879 expect(address).toBe("Vq9Eq4N5SQnjqZvxtxzo7hZPW5XnyJsmXT");
2880 done();
2881 });
2882 });
2883 });
2884});
2885
2886// Selecting a language with no existing phrase should generate a phrase in
2887// that language.
2888it('Generate a random phrase when language is selected and no current phrase', function(done) {
2889 driver.findElement(By.css("a[href='#japanese']"))
2890 .click();
2891 driver.sleep(generateDelay).then(function() {
2892 driver.findElement(By.css(".phrase"))
2893 .getAttribute("value").then(function(phrase) {
2894 expect(phrase.search(/[a-z]/)).toBe(-1);
2895 expect(phrase.length).toBeGreaterThan(0);
2896 done();
2897 });
2898 });
2899});
2900
2901// Selecting a language with existing phrase should update the phrase to use
2902// that language.
2903it('Updates existing phrases when the language is changed', function(done) {
2904 driver.findElement(By.css(".phrase"))
2905 .sendKeys("abandon abandon ability");
2906 driver.sleep(generateDelay).then(function() {
2907 driver.findElement(By.css("a[href='#italian']"))
2908 .click();
2909 driver.sleep(generateDelay).then(function() {
2910 driver.findElement(By.css(".phrase"))
2911 .getAttribute("value").then(function(phrase) {
2912 // Check only the language changes, not the phrase
2913 expect(phrase).toBe("abaco abaco abbaglio");
2914 getFirstAddress(function(address) {
2915 // Check the address is correct
2916 expect(address).toBe("1Dz5TgDhdki9spa6xbPFbBqv5sjMrx3xgV");
2917 done();
2918 });
2919 });
2920 });
2921 });
2922});
2923
2924// Suggested replacement for erroneous word in non-English language
2925it('Shows word suggestion for incorrect word in non-English language', function(done) {
2926 driver.findElement(By.css('.phrase'))
2927 .sendKeys('abaco abaco zbbaglio');
2928 driver.sleep(feedbackDelay).then(function() {
2929 driver.findElement(By.css('.feedback'))
2930 .getText()
2931 .then(function(feedback) {
2932 var msg = "zbbaglio not in wordlist, did you mean abbaglio?";
2933 expect(feedback).toBe(msg);
2934 done();
2935 });
2936 });
2937});
2938
2939// Japanese word does not break across lines.
2940// Point 2 from
2941// https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
2942it('Does not break Japanese words across lines', function(done) {
2943 driver.findElement(By.css('.phrase'))
2944 .getCssValue("word-break")
2945 .then(function(value) {
2946 expect(value).toBe("keep-all");
2947 done();
2948 });
2949});
2950
2951// Language can be specified at page load using hash value in url
2952it('Can set the language from the url hash', function(done) {
2953 driver.get(url + "#japanese").then(function() {
2954 driver.findElement(By.css('.generate')).click();
2955 driver.sleep(generateDelay).then(function() {
2956 driver.findElement(By.css(".phrase"))
2957 .getAttribute("value").then(function(phrase) {
2958 expect(phrase.search(/[a-z]/)).toBe(-1);
2959 expect(phrase.length).toBeGreaterThan(0);
2960 done();
2961 });
2962 });
2963 });
2964});
2965
2966// Entropy can be entered by the user
2967it('Allows entropy to be entered', function(done) {
2968 driver.findElement(By.css('.use-entropy'))
2969 .click();
2970 driver.findElement(By.css('.entropy'))
2971 .sendKeys('00000000 00000000 00000000 00000000');
2972 driver.sleep(generateDelay).then(function() {
2973 driver.findElement(By.css(".phrase"))
2974 .getAttribute("value").then(function(phrase) {
2975 expect(phrase).toBe("abandon abandon ability");
2976 getFirstAddress(function(address) {
2977 expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
2978 done();
2979 })
2980 });
2981 });
2982});
2983
2984// A warning about entropy is shown to the user, with additional information
2985it('Shows a warning about using entropy', function(done) {
2986 driver.findElement(By.css('.use-entropy'))
2987 .click();
2988 driver.findElement(By.css('.entropy-container'))
2989 .getText()
2990 .then(function(containerText) {
2991 var warning = "mnemonic may be insecure";
2992 expect(containerText).toContain(warning);
2993 driver.findElement(By.css('#entropy-notes'))
2994 .findElement(By.xpath("parent::*"))
2995 .getText()
2996 .then(function(notesText) {
2997 var detail = "flipping a fair coin, rolling a fair dice, noise measurements etc";
2998 expect(notesText).toContain(detail);
2999 done();
3000 });
3001 });
3002});
3003
3004// The types of entropy available are described to the user
3005it('Shows the types of entropy available', function(done) {
3006 driver.findElement(By.css('.entropy'))
3007 .getAttribute("placeholder")
3008 .then(function(placeholderText) {
3009 var options = [
3010 "binary",
3011 "base 6",
3012 "dice",
3013 "base 10",
3014 "hexadecimal",
3015 "cards",
3016 ];
3017 for (var i=0; i<options.length; i++) {
3018 var option = options[i];
3019 expect(placeholderText).toContain(option);
3020 }
3021 done();
3022 });
3023});
3024
3025// The actual entropy used is shown to the user
3026it('Shows the actual entropy used', function(done) {
3027 driver.findElement(By.css('.use-entropy'))
3028 .click();
3029 driver.findElement(By.css('.entropy'))
3030 .sendKeys('Not A Very Good Entropy Source At All');
3031 driver.sleep(generateDelay).then(function() {
3032 driver.findElement(By.css('.entropy-container'))
3033 .getText()
3034 .then(function(text) {
3035 expect(text).toMatch(/Filtered Entropy\s+AedEceAA/);
3036 done();
3037 });
3038 });
3039});
3040
3041// Binary entropy can be entered
3042it('Allows binary entropy to be entered', function(done) {
3043 testEntropyType(done, "01", "binary");
3044});
3045
3046// Base 6 entropy can be entered
3047it('Allows base 6 entropy to be entered', function(done) {
3048 testEntropyType(done, "012345", "base 6");
3049});
3050
3051// Base 6 dice entropy can be entered
3052it('Allows base 6 dice entropy to be entered', function(done) {
3053 testEntropyType(done, "123456", "base 6 (dice)");
3054});
3055
3056// Base 10 entropy can be entered
3057it('Allows base 10 entropy to be entered', function(done) {
3058 testEntropyType(done, "789", "base 10");
3059});
3060
3061// Hexadecimal entropy can be entered
3062it('Allows hexadecimal entropy to be entered', function(done) {
3063 testEntropyType(done, "abcdef", "hexadecimal");
3064});
3065
3066// Dice entropy value is shown as the converted base 6 value
3067// ie 123456 is converted to 123450
3068it('Shows dice entropy as base 6', function(done) {
3069 driver.findElement(By.css('.use-entropy'))
3070 .click();
3071 driver.findElement(By.css('.entropy'))
3072 .sendKeys("123456");
3073 driver.sleep(generateDelay).then(function() {
3074 driver.findElement(By.css('.entropy-container'))
3075 .getText()
3076 .then(function(text) {
3077 expect(text).toMatch(/Filtered Entropy\s+123450/);
3078 done();
3079 });
3080 });
3081});
3082
3083// The number of bits of entropy accumulated is shown
3084it("Shows the number of bits of entropy for 20 bits of binary", function(done) {
3085 testEntropyBits(done, "0000 0000 0000 0000 0000", "20");
3086});
3087it("Shows the number of bits of entropy for 1 bit of binary", function(done) {
3088 testEntropyBits(done, "0", "1");
3089});
3090it("Shows the number of bits of entropy for 4 bits of binary", function(done) {
3091 testEntropyBits(done, "0000", "4");
3092});
3093it("Shows the number of bits of entropy for 1 character of base 6 (dice)", function(done) {
3094 // 6 in card is 0 in base 6, 0 in base 6 is 2.6 bits (rounded down to 2 bits)
3095 testEntropyBits(done, "6", "2");
3096});
3097it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits", function(done) {
3098 // 7 in base 10 is 111 in base 2, no leading zeros
3099 testEntropyBits(done, "7", "3");
3100});
3101it("Shows the number of bits of entropy for 1 character of base 10 with 4 bis", function(done) {
3102 testEntropyBits(done, "8", "4");
3103});
3104it("Shows the number of bits of entropy for 1 character of hex", function(done) {
3105 testEntropyBits(done, "F", "4");
3106});
3107it("Shows the number of bits of entropy for 2 characters of base 10", function(done) {
3108 testEntropyBits(done, "29", "6");
3109});
3110it("Shows the number of bits of entropy for 2 characters of hex", function(done) {
3111 testEntropyBits(done, "0A", "8");
3112});
3113it("Shows the number of bits of entropy for 2 characters of hex with 3 leading zeros", function(done) {
3114 // hex is always multiple of 4 bits of entropy
3115 testEntropyBits(done, "1A", "8");
3116});
3117it("Shows the number of bits of entropy for 2 characters of hex with 2 leading zeros", function(done) {
3118 testEntropyBits(done, "2A", "8");
3119});
3120it("Shows the number of bits of entropy for 2 characters of hex with 1 leading zero", function(done) {
3121 testEntropyBits(done, "4A", "8");
3122});
3123it("Shows the number of bits of entropy for 2 characters of hex with no leading zeros", function(done) {
3124 testEntropyBits(done, "8A", "8");
3125});
3126it("Shows the number of bits of entropy for 2 characters of hex starting with F", function(done) {
3127 testEntropyBits(done, "FA", "8");
3128});
3129it("Shows the number of bits of entropy for 4 characters of hex with leading zeros", function(done) {
3130 testEntropyBits(done, "000A", "16");
3131});
3132it("Shows the number of bits of entropy for 4 characters of base 6", function(done) {
3133 testEntropyBits(done, "5555", "11");
3134});
3135it("Shows the number of bits of entropy for 4 characters of base 6 dice", function(done) {
3136 // uses dice, so entropy is actually 0000 in base 6, which is 4 lots of
3137 // 2.58 bits, which is 10.32 bits (rounded down to 10 bits)
3138 testEntropyBits(done, "6666", "10");
3139});
3140it("Shows the number of bits of entropy for 4 charactes of base 10", function(done) {
3141 // Uses base 10, which is 4 lots of 3.32 bits, which is 13.3 bits (rounded
3142 // down to 13)
3143 testEntropyBits(done, "2227", "13");
3144});
3145it("Shows the number of bits of entropy for 4 characters of hex with 2 leading zeros", function(done) {
3146 testEntropyBits(done, "222F", "16");
3147});
3148it("Shows the number of bits of entropy for 4 characters of hex starting with F", function(done) {
3149 testEntropyBits(done, "FFFF", "16");
3150});
3151it("Shows the number of bits of entropy for 10 characters of base 10", function(done) {
3152 // 10 events at 3.32 bits per event
3153 testEntropyBits(done, "0000101017", "33");
3154});
3155it("Shows the number of bits of entropy for a full deck of cards", function(done) {
3156 // cards are not replaced, so a full deck is not 52^52 entropy which is 296
3157 // bits, it's 52!, which is 225 bits
3158 testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", "225");
3159});
3160
3161it("Shows details about the entered entropy", function(done) {
3162 testEntropyFeedback(done,
3163 {
3164 entropy: "A",
3165 filtered: "A",
3166 type: "hexadecimal",
3167 events: "1",
3168 bits: "4",
3169 words: 0,
3170 strength: "less than a second",
3171 }
3172 );
3173});
3174it("Shows details about the entered entropy", function(done) {
3175 testEntropyFeedback(done,
3176 {
3177 entropy: "AAAAAAAA",
3178 filtered: "AAAAAAAA",
3179 type: "hexadecimal",
3180 events: "8",
3181 bits: "32",
3182 words: 3,
3183 strength: "less than a second - Repeats like \"aaa\" are easy to guess",
3184 }
3185 );
3186});
3187it("Shows details about the entered entropy", function(done) {
3188 testEntropyFeedback(done,
3189 {
3190 entropy: "AAAAAAAA B",
3191 filtered: "AAAAAAAAB",
3192 type: "hexadecimal",
3193 events: "9",
3194 bits: "36",
3195 words: 3,
3196 strength: "less than a second - Repeats like \"aaa\" are easy to guess",
3197 }
3198 );
3199});
3200it("Shows details about the entered entropy", function(done) {
3201 testEntropyFeedback(done,
3202 {
3203 entropy: "AAAAAAAA BBBBBBBB",
3204 filtered: "AAAAAAAABBBBBBBB",
3205 type: "hexadecimal",
3206 events: "16",
3207 bits: "64",
3208 words: 6,
3209 strength: "less than a second - Repeats like \"aaa\" are easy to guess",
3210 }
3211 );
3212});
3213it("Shows details about the entered entropy", function(done) {
3214 testEntropyFeedback(done,
3215 {
3216 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC",
3217 filtered: "AAAAAAAABBBBBBBBCCCCCCCC",
3218 type: "hexadecimal",
3219 events: "24",
3220 bits: "96",
3221 words: 9,
3222 strength: "less than a second",
3223 }
3224 );
3225});
3226it("Shows details about the entered entropy", function(done) {
3227 testEntropyFeedback(done,
3228 {
3229 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD",
3230 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD",
3231 type: "hexadecimal",
3232 events: "32",
3233 bits: "128",
3234 words: 12,
3235 strength: "2 minutes",
3236 }
3237 );
3238});
3239it("Shows details about the entered entropy", function(done) {
3240 testEntropyFeedback(done,
3241 {
3242 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA",
3243 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDA",
3244 type: "hexadecimal",
3245 events: "32",
3246 bits: "128",
3247 words: 12,
3248 strength: "2 days",
3249 }
3250 );
3251});
3252it("Shows details about the entered entropy", function(done) {
3253 testEntropyFeedback(done,
3254 {
3255 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA EEEEEEEE",
3256 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDAEEEEEEEE",
3257 type: "hexadecimal",
3258 events: "40",
3259 bits: "160",
3260 words: 15,
3261 strength: "3 years",
3262 }
3263 );
3264});
3265it("Shows details about the entered entropy", function(done) {
3266 testEntropyFeedback(done,
3267 {
3268 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA EEEEEEEE FFFFFFFF",
3269 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDAEEEEEEEEFFFFFFFF",
3270 type: "hexadecimal",
3271 events: "48",
3272 bits: "192",
3273 words: 18,
3274 strength: "centuries",
3275 }
3276 );
3277});
3278it("Shows details about the entered entropy", function(done) {
3279 testEntropyFeedback(done,
3280 {
3281 entropy: "7d",
3282 type: "card",
3283 events: "1",
3284 bits: "4",
3285 words: 0,
3286 strength: "less than a second",
3287 }
3288 );
3289});
3290it("Shows details about the entered entropy", function(done) {
3291 testEntropyFeedback(done,
3292 {
3293 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3294 type: "card (full deck)",
3295 events: "52",
3296 bits: "225",
3297 words: 21,
3298 strength: "centuries",
3299 }
3300 );
3301});
3302it("Shows details about the entered entropy", function(done) {
3303 testEntropyFeedback(done,
3304 {
3305 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks3d",
3306 type: "card (full deck, 1 duplicate: 3d)",
3307 events: "53",
3308 bits: "254",
3309 words: 21,
3310 strength: "centuries",
3311 }
3312 );
3313});
3314it("Shows details about the entered entropy", function(done) {
3315 testEntropyFeedback(done,
3316 {
3317 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d",
3318 type: "card (2 duplicates: 3d 4d, 1 missing: KS)",
3319 events: "53",
3320 bits: "254",
3321 words: 21,
3322 strength: "centuries",
3323 }
3324 );
3325});
3326it("Shows details about the entered entropy", function(done) {
3327 testEntropyFeedback(done,
3328 {
3329 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d5d6d",
3330 type: "card (4 duplicates: 3d 4d 5d..., 1 missing: KS)",
3331 events: "55",
3332 bits: "264",
3333 words: 24,
3334 strength: "centuries",
3335 }
3336 );
3337});
3338it("Shows details about the entered entropy", function(done) {
3339 testEntropyFeedback(done,
3340 // Next test was throwing uncaught error in zxcvbn
3341 // Also tests 451 bits, ie Math.log2(52!)*2 = 225.58 * 2
3342 {
3343 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsksac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3344 type: "card (full deck, 52 duplicates: ac 2c 3c...)",
3345 events: "104",
3346 bits: "499",
3347 words: 45,
3348 strength: "centuries",
3349 }
3350 );
3351});
3352it("Shows details about the entered entropy", function(done) {
3353 testEntropyFeedback(done,
3354 // Case insensitivity to duplicate cards
3355 {
3356 entropy: "asAS",
3357 type: "card (1 duplicate: AS)",
3358 events: "2",
3359 bits: "9",
3360 words: 0,
3361 strength: "less than a second",
3362 }
3363 );
3364});
3365it("Shows details about the entered entropy", function(done) {
3366 testEntropyFeedback(done,
3367 {
3368 entropy: "ASas",
3369 type: "card (1 duplicate: as)",
3370 events: "2",
3371 bits: "9",
3372 words: 0,
3373 strength: "less than a second",
3374 }
3375 );
3376});
3377it("Shows details about the entered entropy", function(done) {
3378 testEntropyFeedback(done,
3379 // Missing cards are detected
3380 {
3381 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3382 type: "card (1 missing: 9C)",
3383 events: "51",
3384 bits: "221",
3385 words: 18,
3386 strength: "centuries",
3387 }
3388 );
3389});
3390it("Shows details about the entered entropy", function(done) {
3391 testEntropyFeedback(done,
3392 {
3393 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3394 type: "card (2 missing: 9C 5D)",
3395 events: "50",
3396 bits: "216",
3397 words: 18,
3398 strength: "centuries",
3399 }
3400 );
3401});
3402it("Shows details about the entered entropy", function(done) {
3403 testEntropyFeedback(done,
3404 {
3405 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjd kdah2h3h 5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3406 type: "card (4 missing: 9C 5D QD...)",
3407 events: "48",
3408 bits: "208",
3409 words: 18,
3410 strength: "centuries",
3411 }
3412 );
3413});
3414it("Shows details about the entered entropy", function(done) {
3415 testEntropyFeedback(done,
3416 // More than six missing cards does not show message
3417 {
3418 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d 8d9d jd kdah2h3h 5h6h7h8h9hthjhqhkh 2s3s4s5s6s7s8s9stsjsqsks",
3419 type: "card",
3420 events: "45",
3421 bits: "195",
3422 words: 18,
3423 strength: "centuries",
3424 }
3425 );
3426});
3427it("Shows details about the entered entropy", function(done) {
3428 testEntropyFeedback(done,
3429 // Multiple decks of cards increases bits per event
3430 {
3431 entropy: "3d",
3432 events: "1",
3433 bits: "4",
3434 bitsPerEvent: "4.34",
3435 }
3436 );
3437});
3438it("Shows details about the entered entropy", function(done) {
3439 testEntropyFeedback(done,
3440 {
3441 entropy: "3d3d",
3442 events: "2",
3443 bits: "9",
3444 bitsPerEvent: "4.80",
3445 }
3446 );
3447});
3448it("Shows details about the entered entropy", function(done) {
3449 testEntropyFeedback(done,
3450 {
3451 entropy: "3d3d3d",
3452 events: "3",
3453 bits: "15",
3454 bitsPerEvent: "5.01",
3455 }
3456 );
3457});
3458it("Shows details about the entered entropy", function(done) {
3459 testEntropyFeedback(done,
3460 {
3461 entropy: "3d3d3d3d",
3462 events: "4",
3463 bits: "20",
3464 bitsPerEvent: "5.14",
3465 }
3466 );
3467});
3468it("Shows details about the entered entropy", function(done) {
3469 testEntropyFeedback(done,
3470 {
3471 entropy: "3d3d3d3d3d",
3472 events: "5",
3473 bits: "26",
3474 bitsPerEvent: "5.22",
3475 }
3476 );
3477});
3478it("Shows details about the entered entropy", function(done) {
3479 testEntropyFeedback(done,
3480 {
3481 entropy: "3d3d3d3d3d3d",
3482 events: "6",
3483 bits: "31",
3484 bitsPerEvent: "5.28",
3485 }
3486 );
3487});
3488it("Shows details about the entered entropy", function(done) {
3489 testEntropyFeedback(done,
3490 {
3491 entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d",
3492 events: "33",
3493 bits: "184",
3494 bitsPerEvent: "5.59",
3495 strength: 'less than a second - Repeats like "abcabcabc" are only slightly harder to guess than "abc"',
3496 }
3497 );
3498});
3499
3500// Entropy is truncated from the left
3501it('Truncates entropy from the left', function(done) {
3502 // Truncate from left means 0000 is removed from the start
3503 // which gives mnemonic 'avocado zoo zone'
3504 // not 1111 removed from the end
3505 // which gives the mnemonic 'abstract zoo zoo'
3506 var entropy = "00000000 00000000 00000000 00000000";
3507 entropy += "11111111 11111111 11111111 1111"; // Missing last byte
3508 driver.findElement(By.css('.use-entropy'))
3509 .click();
3510 driver.findElement(By.css('.entropy'))
3511 .sendKeys(entropy);
3512 driver.sleep(generateDelay).then(function() {
3513 driver.findElement(By.css(".phrase"))
3514 .getAttribute("value").then(function(phrase) {
3515 expect(phrase).toBe("avocado zoo zone");
3516 done();
3517 });
3518 });
3519});
3520
3521// Very large entropy results in very long mnemonics
3522it('Converts very long entropy to very long mnemonics', function(done) {
3523 var entropy = "";
3524 for (var i=0; i<33; i++) {
3525 entropy += "AAAAAAAA"; // 3 words * 33 iterations = 99 words
3526 }
3527 driver.findElement(By.css('.use-entropy'))
3528 .click();
3529 driver.findElement(By.css('.entropy'))
3530 .sendKeys(entropy);
3531 driver.sleep(generateDelay).then(function() {
3532 driver.findElement(By.css(".phrase"))
3533 .getAttribute("value").then(function(phrase) {
3534 var wordCount = phrase.split(/\s+/g).length;
3535 expect(wordCount).toBe(99);
3536 done();
3537 });
3538 });
3539});
3540
3541// Is compatible with bip32jp entropy
3542// https://bip32jp.github.io/english/index.html
3543// NOTES:
3544// Is incompatible with:
3545// base 20
3546it('Is compatible with bip32jp.github.io', function(done) {
3547 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543";
3548 var expectedPhrase = "train then jungle barely whip fiber purpose puppy eagle cloud clump hospital robot brave balcony utility detect estate old green desk skill multiply virus";
3549 driver.findElement(By.css('.use-entropy'))
3550 .click();
3551 driver.findElement(By.css('.entropy'))
3552 .sendKeys(entropy);
3553 driver.sleep(generateDelay).then(function() {
3554 driver.findElement(By.css(".phrase"))
3555 .getAttribute("value").then(function(phrase) {
3556 expect(phrase).toBe(expectedPhrase);
3557 done();
3558 });
3559 });
3560});
3561
3562// Blank entropy does not generate mnemonic or addresses
3563it('Does not generate mnemonic for blank entropy', function(done) {
3564 driver.findElement(By.css('.use-entropy'))
3565 .click();
3566 driver.findElement(By.css('.entropy'))
3567 .clear();
3568 // check there is no mnemonic
3569 driver.sleep(generateDelay).then(function() {
3570 driver.findElement(By.css(".phrase"))
3571 .getAttribute("value").then(function(phrase) {
3572 expect(phrase).toBe("");
3573 // check there is no mnemonic
3574 driver.findElements(By.css(".address"))
3575 .then(function(addresses) {
3576 expect(addresses.length).toBe(0);
3577 // Check the feedback says 'blank entropy'
3578 driver.findElement(By.css(".feedback"))
3579 .getText()
3580 .then(function(feedbackText) {
3581 expect(feedbackText).toBe("Blank entropy");
3582 done();
3583 });
3584 })
3585 });
3586 });
3587});
3588
3589// Mnemonic length can be selected even for weak entropy
3590it('Allows selection of mnemonic length even for weak entropy', function(done) {
3591 driver.findElement(By.css('.use-entropy'))
3592 .click();
3593 driver.executeScript(function() {
3594 $(".mnemonic-length").val("18").trigger("change");
3595 });
3596 driver.findElement(By.css('.entropy'))
3597 .sendKeys("012345");
3598 driver.sleep(generateDelay).then(function() {
3599 driver.findElement(By.css(".phrase"))
3600 .getAttribute("value").then(function(phrase) {
3601 var wordCount = phrase.split(/\s+/g).length;
3602 expect(wordCount).toBe(18);
3603 done();
3604 });
3605 });
3606});
3607
3608// Github issue 33
3609// https://github.com/iancoleman/bip39/issues/33
3610// Final cards should contribute entropy
3611it('Uses as much entropy as possible for the mnemonic', function(done) {
3612 driver.findElement(By.css('.use-entropy'))
3613 .click();
3614 driver.findElement(By.css('.entropy'))
3615 .sendKeys("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D");
3616 driver.sleep(generateDelay).then(function() {
3617 // Get mnemonic
3618 driver.findElement(By.css(".phrase"))
3619 .getAttribute("value").then(function(originalPhrase) {
3620 // Set the last 12 cards to be AS
3621 driver.findElement(By.css('.entropy'))
3622 .clear();
3623 driver.findElement(By.css('.entropy'))
3624 .sendKeys("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-AS AS AS AS AS AS AS AS AS AS AS AS");
3625 driver.sleep(generateDelay).then(function() {
3626 // Get new mnemonic
3627 driver.findElement(By.css(".phrase"))
3628 .getAttribute("value").then(function(newPhrase) {
3629 expect(originalPhrase).not.toEqual(newPhrase);
3630 done();
3631 });
3632 });
3633 });
3634 });
3635});
3636
3637// Github issue 35
3638// https://github.com/iancoleman/bip39/issues/35
3639// QR Code support
3640// TODO this doesn't work in selenium with firefox
3641// see https://stackoverflow.com/q/40360223
3642it('Shows a qr code on hover for the phrase', function(done) {
3643 if (browser == "firefox") {
3644 pending("Selenium + Firefox bug for mouseMove, see https://stackoverflow.com/q/40360223");
3645 }
3646 // generate a random mnemonic
3647 var generateEl = driver.findElement(By.css('.generate'));
3648 generateEl.click();
3649 // toggle qr to show (hidden by default)
3650 var phraseEl = driver.findElement(By.css(".phrase"));
3651 phraseEl.click();
3652 var rootKeyEl = driver.findElement(By.css(".root-key"));
3653 driver.sleep(generateDelay).then(function() {
3654 // hover over the root key
3655 driver.actions().mouseMove(rootKeyEl).perform().then(function() {
3656 // check the qr code shows
3657 driver.executeScript(function() {
3658 return $(".qr-container").find("canvas").length > 0;
3659 })
3660 .then(function(qrShowing) {
3661 expect(qrShowing).toBe(true);
3662 // hover away from the phrase
3663 driver.actions().mouseMove(generateEl).perform().then(function() {;
3664 // check the qr code hides
3665 driver.executeScript(function() {
3666 return $(".qr-container").find("canvas").length == 0;
3667 })
3668 .then(function(qrHidden) {
3669 expect(qrHidden).toBe(true);
3670 done();
3671 });
3672 });
3673 });
3674 });
3675 });
3676});
3677
3678// BIP44 account extendend private key is shown
3679// github issue 37 - compatibility with electrum
3680it('Shows the bip44 account extended private key', function(done) {
3681 driver.findElement(By.css(".phrase"))
3682 .sendKeys("abandon abandon ability");
3683 driver.sleep(generateDelay).then(function() {
3684 driver.findElement(By.css("#bip44 .account-xprv"))
3685 .getAttribute("value")
3686 .then(function(xprv) {
3687 expect(xprv).toBe("xprv9yzrnt4zWVJUr1k2VxSPy9ettKz5PpeDMgaVG7UKedhqnw1tDkxP2UyYNhuNSumk2sLE5ctwKZs9vwjsq3e1vo9egCK6CzP87H2cVYXpfwQ");
3688 done();
3689 });
3690 });
3691});
3692
3693// BIP44 account extendend public key is shown
3694// github issue 37 - compatibility with electrum
3695it('Shows the bip44 account extended public key', function(done) {
3696 driver.findElement(By.css(".phrase"))
3697 .sendKeys("abandon abandon ability");
3698 driver.sleep(generateDelay).then(function() {
3699 driver.findElement(By.css("#bip44 .account-xpub"))
3700 .getAttribute("value")
3701 .then(function(xprv) {
3702 expect(xprv).toBe("xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf");
3703 done();
3704 });
3705 });
3706});
3707
3708// github issue 40
3709// BIP32 root key can be set as an xpub
3710it('Generates addresses from xpub as bip32 root key', function(done) {
3711 driver.findElement(By.css('#bip32-tab a'))
3712 .click();
3713 // set xpub for account 0 of bip44 for 'abandon abandon ability'
3714 driver.findElement(By.css("#root-key"))
3715 .sendKeys("xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf");
3716 driver.sleep(generateDelay).then(function() {
3717 // check the addresses are generated
3718 getFirstAddress(function(address) {
3719 expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
3720 // check the xprv key is not set
3721 driver.findElement(By.css(".extended-priv-key"))
3722 .getAttribute("value")
3723 .then(function(xprv) {
3724 expect(xprv).toBe("NA");
3725 // check the private key is not set
3726 driver.findElements(By.css(".privkey"))
3727 .then(function(els) {
3728 els[0]
3729 .getText()
3730 .then(function(privkey) {
3731 expect(xprv).toBe("NA");
3732 done();
3733 });
3734 });
3735 });
3736 });
3737 });
3738});
3739
3740// github issue 40
3741// xpub for bip32 root key will not work with hardened derivation paths
3742it('Shows error for hardened derivation paths with xpub root key', function(done) {
3743 // set xpub for account 0 of bip44 for 'abandon abandon ability'
3744 driver.findElement(By.css("#root-key"))
3745 .sendKeys("xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf");
3746 driver.sleep(feedbackDelay).then(function() {
3747 // Check feedback is correct
3748 driver.findElement(By.css('.feedback'))
3749 .getText()
3750 .then(function(feedback) {
3751 var msg = "Hardened derivation path is invalid with xpub key";
3752 expect(feedback).toBe(msg);
3753 // Check no addresses are shown
3754 driver.findElements(By.css('.addresses tr'))
3755 .then(function(rows) {
3756 expect(rows.length).toBe(0);
3757 done();
3758 });
3759 });
3760 });
3761});
3762
3763// github issue 39
3764// no root key shows feedback
3765it('Shows feedback for no root key', function(done) {
3766 // set xpub for account 0 of bip44 for 'abandon abandon ability'
3767 driver.findElement(By.css('#bip32-tab a'))
3768 .click();
3769 driver.sleep(feedbackDelay).then(function() {
3770 // Check feedback is correct
3771 driver.findElement(By.css('.feedback'))
3772 .getText()
3773 .then(function(feedback) {
3774 expect(feedback).toBe("Invalid root key");
3775 done();
3776 });
3777 });
3778});
3779
3780// Github issue 44
3781// display error switching tabs while addresses are generating
3782it('Can change details while old addresses are still being generated', function(done) {
3783 // Set to generate 199 more addresses.
3784 // This will take a long time allowing a new set of addresses to be
3785 // generated midway through this lot.
3786 // The newly generated addresses should not include any from the old set.
3787 // Any more than 199 will show an alert which needs to be accepted.
3788 driver.findElement(By.css('.rows-to-add'))
3789 .clear();
3790 driver.findElement(By.css('.rows-to-add'))
3791 .sendKeys('199');
3792 // set the prhase
3793 driver.findElement(By.css('.phrase'))
3794 .sendKeys("abandon abandon ability");
3795 driver.sleep(generateDelay).then(function() {
0460b53f 3796 // change tabs which should cancel the previous generating
5dfe77e4
IC
3797 driver.findElement(By.css('.rows-to-add'))
3798 .clear();
3799 driver.findElement(By.css('.rows-to-add'))
3800 .sendKeys('20');
0460b53f
IC
3801 driver.findElement(By.css('#bip32-tab a'))
3802 .click()
3803 driver.sleep(generateDelay).then(function() {
3804 driver.findElements(By.css('.index'))
3805 .then(function(els) {
3806 // check the derivation paths have the right quantity
3807 expect(els.length).toBe(20);
3808 // check the derivation paths are in order
3809 testRowsAreInCorrectOrder(done);
3810 });
3811 });
3812 });
628a2f53 3813}, generateDelay + 10000);
0460b53f
IC
3814
3815// Github issue 49
3816// padding for binary should give length with multiple of 256
3817// hashed entropy 1111 is length 252, so requires 4 leading zeros
3818// prior to issue 49 it would only generate 2 leading zeros, ie missing 2
3819it('Pads hashed entropy with leading zeros', function(done) {
3820 driver.findElement(By.css('.use-entropy'))
3821 .click();
3822 driver.executeScript(function() {
3823 $(".mnemonic-length").val("15").trigger("change");
3824 });
3825 driver.findElement(By.css('.entropy'))
3826 .sendKeys("1111");
3827 driver.sleep(generateDelay).then(function() {
3828 driver.findElement(By.css('.phrase'))
3829 .getAttribute("value")
3830 .then(function(phrase) {
3831 expect(phrase).toBe("avocado valid quantum cross link predict excuse edit street able flame large galaxy ginger nuclear");
3832 done();
3833 });
3834 });
3835});
3836
3837// Github pull request 55
3838// https://github.com/iancoleman/bip39/pull/55
3839// Client select
3840it('Can set the derivation path on bip32 tab for bitcoincore', function(done) {
3841 testClientSelect(done, {
3842 selectValue: "0",
3843 bip32path: "m/0'/0'",
3844 useHardenedAddresses: "true",
3845 });
3846});
3847it('Can set the derivation path on bip32 tab for multibit', function(done) {
3848 testClientSelect(done, {
3849 selectValue: "2",
3850 bip32path: "m/0'/0",
3851 useHardenedAddresses: null,
3852 });
3853});
44a5d363
IC
3854it('Can set the derivation path on bip32 tab for coinomi/ledger', function(done) {
3855 testClientSelect(done, {
3856 selectValue: "3",
3857 bip32path: "m/44'/0'/0'",
3858 useHardenedAddresses: null,
3859 });
3860});
0460b53f
IC
3861
3862// github issue 58
3863// https://github.com/iancoleman/bip39/issues/58
3864// bip32 derivation is correct, does not drop leading zeros
3865// see also
3866// https://medium.com/@alexberegszaszi/why-do-my-bip32-wallets-disagree-6f3254cc5846
3867it('Retains leading zeros for bip32 derivation', function(done) {
3868 driver.findElement(By.css(".phrase"))
3869 .sendKeys("fruit wave dwarf banana earth journey tattoo true farm silk olive fence");
3870 driver.findElement(By.css(".passphrase"))
3871 .sendKeys("banana");
3872 driver.sleep(generateDelay).then(function() {
3873 getFirstAddress(function(address) {
3874 // Note that bitcore generates an incorrect address
3875 // 13EuKhffWkBE2KUwcbkbELZb1MpzbimJ3Y
3876 // see the medium.com link above for more details
3877 expect(address).toBe("17rxURoF96VhmkcEGCj5LNQkmN9HVhWb7F");
3878 done();
3879 });
3880 });
3881});
3882
3883// github issue 60
3884// Japanese mnemonics generate incorrect bip32 seed
3885// BIP39 seed is set from phrase
3886it('Generates correct seed for Japanese mnemonics', function(done) {
3887 driver.findElement(By.css(".phrase"))
3888 .sendKeys("あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あおぞら");
3889 driver.findElement(By.css(".passphrase"))
3890 .sendKeys("メートルガバヴァぱばぐゞちぢ十人十色");
3891 driver.sleep(generateDelay).then(function() {
3892 driver.findElement(By.css(".seed"))
3893 .getAttribute("value")
3894 .then(function(seed) {
3895 expect(seed).toBe("a262d6fb6122ecf45be09c50492b31f92e9beb7d9a845987a02cefda57a15f9c467a17872029a9e92299b5cbdf306e3a0ee620245cbd508959b6cb7ca637bd55");
3896 done();
3897 });
3898 });
3899});
3900
3901// BIP49 official test vectors
3902// https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki#test-vectors
3903it('Generates BIP49 addresses matching the official test vectors', function(done) {
3904 driver.findElement(By.css('#bip49-tab a'))
3905 .click();
3906 selectNetwork("BTC - Bitcoin Testnet");
3907 driver.findElement(By.css(".phrase"))
3908 .sendKeys("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about");
3909 driver.sleep(generateDelay).then(function() {
3910 getFirstAddress(function(address) {
3911 expect(address).toBe("2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2");
3912 done();
3913 });
3914 });
3915});
3916
3917// BIP49 derivation path is shown
3918it('Shows the bip49 derivation path', function(done) {
3919 driver.findElement(By.css('#bip49-tab a'))
3920 .click();
3921 driver.findElement(By.css(".phrase"))
3922 .sendKeys("abandon abandon ability");
3923 driver.sleep(generateDelay).then(function() {
3924 driver.findElement(By.css('#bip49 .path'))
3925 .getAttribute("value")
3926 .then(function(path) {
3927 expect(path).toBe("m/49'/0'/0'/0");
3928 done();
3929 });
3930 });
3931});
3932
3933// BIP49 extended private key is shown
3934it('Shows the bip49 extended private key', function(done) {
3935 driver.findElement(By.css('#bip49-tab a'))
3936 .click();
3937 driver.findElement(By.css(".phrase"))
3938 .sendKeys("abandon abandon ability");
3939 driver.sleep(generateDelay).then(function() {
3940 driver.findElement(By.css('.extended-priv-key'))
3941 .getAttribute("value")
3942 .then(function(xprv) {
3943 expect(xprv).toBe("yprvALYB4DYRG6CzzVgzQZwwqjAA2wjBGC3iEd7KYYScpoDdmf75qMRWZWxoFcRXBJjgEXdFqJ9vDRGRLJQsrL22Su5jMbNFeM9vetaGVqy9Qy2");
3944 done();
3945 });
3946 });
3947});
3948
3949// BIP49 extended public key is shown
3950it('Shows the bip49 extended public key', function(done) {
3951 driver.findElement(By.css('#bip49-tab a'))
3952 .click();
3953 driver.findElement(By.css(".phrase"))
3954 .sendKeys("abandon abandon ability");
3955 driver.sleep(generateDelay).then(function() {
3956 driver.findElement(By.css('.extended-pub-key'))
3957 .getAttribute("value")
3958 .then(function(xprv) {
3959 expect(xprv).toBe("ypub6ZXXTj5K6TmJCymTWbUxCs6tayZffemZbr2vLvrEP8kceTSENtjm7KHH6thvAKxVar9fGe8rgsPEX369zURLZ68b4f7Vexz7RuXsjQ69YDt");
3960 done();
3961 });
3962 });
3963});
3964
3965// BIP49 account field changes address list
3966it('Can set the bip49 account field', function(done) {
3967 driver.findElement(By.css('#bip49-tab a'))
3968 .click();
3969 driver.findElement(By.css('#bip49 .account'))
3970 .clear();
3971 driver.findElement(By.css('#bip49 .account'))
3972 .sendKeys("1");
3973 driver.findElement(By.css(".phrase"))
3974 .sendKeys("abandon abandon ability");
3975 driver.sleep(generateDelay).then(function() {
3976 getFirstAddress(function(address) {
3977 expect(address).toBe("381wg1GGN4rP88rNC9v7QWsiww63yLVPsn");
3978 done();
3979 });
3980 });
3981});
3982
3983// BIP49 change field changes address list
3984it('Can set the bip49 change field', function(done) {
3985 driver.findElement(By.css('#bip49-tab a'))
3986 .click();
3987 driver.findElement(By.css('#bip49 .change'))
3988 .clear();
3989 driver.findElement(By.css('#bip49 .change'))
3990 .sendKeys("1");
3991 driver.findElement(By.css(".phrase"))
3992 .sendKeys("abandon abandon ability");
3993 driver.sleep(generateDelay).then(function() {
3994 getFirstAddress(function(address) {
3995 expect(address).toBe("3PEM7MiKed5konBoN66PQhK8r3hjGhy9dT");
3996 done();
3997 });
3998 });
3999});
4000
4001// BIP49 account extendend private key is shown
4002it('Shows the bip49 account extended private key', function(done) {
4003 driver.findElement(By.css('#bip49-tab a'))
4004 .click();
4005 driver.findElement(By.css(".phrase"))
4006 .sendKeys("abandon abandon ability");
4007 driver.sleep(generateDelay).then(function() {
4008 driver.findElement(By.css('#bip49 .account-xprv'))
4009 .getAttribute("value")
4010 .then(function(xprv) {
4011 expect(xprv).toBe("yprvAHtB1M5Wp675aLzFy9TJYK2mSsLkg6mcBRh5DZTR7L4EnYSmYPaL63KFA4ycg1PngW5LfkmejxzosCs17TKZMpRFKc3z5SJar6QAKaFcaZL");
4012 done();
4013 });
4014 });
4015});
4016
4017// BIP49 account extendend public key is shown
4018it('Shows the bip49 account extended public key', function(done) {
4019 driver.findElement(By.css('#bip49-tab a'))
4020 .click();
4021 driver.findElement(By.css(".phrase"))
4022 .sendKeys("abandon abandon ability");
4023 driver.sleep(generateDelay).then(function() {
4024 driver.findElement(By.css('#bip49 .account-xpub'))
4025 .getAttribute("value")
4026 .then(function(xprv) {
4027 expect(xprv).toBe("ypub6WsXQrcQeTfNnq4j5AzJuSyVzuBF5ZVTYecg1ws2ffbDfLmv5vtadqdj1NgR6C6gufMpMfJpHxvb6JEQKvETVNWCRanNedfJtnTchZiJtsL");
4028 done();
4029 });
4030 });
4031});
4032
4033// Test selecting coin where bip49 is unavailable (eg CLAM)
4034it('Shows an error on bip49 tab for coins without bip49', function(done) {
4035 driver.findElement(By.css('#bip49-tab a'))
4036 .click();
4037 driver.findElement(By.css(".phrase"))
4038 .sendKeys("abandon abandon ability");
4039 driver.sleep(generateDelay).then(function() {
4040 selectNetwork("CLAM - Clams");
4041 // bip49 available is hidden
4042 driver.findElement(By.css('#bip49 .available'))
4043 .getAttribute("class")
4044 .then(function(classes) {
4045 expect(classes).toContain("hidden");
4046 // bip49 unavailable is shown
4047 driver.findElement(By.css('#bip49 .unavailable'))
4048 .getAttribute("class")
4049 .then(function(classes) {
4050 expect(classes).not.toContain("hidden");
4051 // check there are no addresses shown
4052 driver.findElements(By.css('.addresses tr'))
4053 .then(function(rows) {
4054 expect(rows.length).toBe(0);
4055 // check the derived private key is blank
4056 driver.findElement(By.css('.extended-priv-key'))
4057 .getAttribute("value")
4058 .then(function(xprv) {
4059 expect(xprv).toBe('');
4060 // check the derived public key is blank
4061 driver.findElement(By.css('.extended-pub-key'))
4062 .getAttribute("value")
4063 .then(function(xpub) {
4064 expect(xpub).toBe('');
4065 done();
4066 });
4067 });
4068 })
4069 });
4070 });
4071 });
4072});
4073
4074// github issue 43
4075// Cleared mnemonic and root key still allows addresses to be generated
4076// https://github.com/iancoleman/bip39/issues/43
4077it('Clears old root keys from memory when mnemonic is cleared', function(done) {
4078 // set the phrase
4079 driver.findElement(By.css(".phrase"))
4080 .sendKeys("abandon abandon ability");
4081 driver.sleep(generateDelay).then(function() {
4082 // clear the mnemonic and root key
4083 // using selenium .clear() doesn't seem to trigger the 'input' event
4084 // so clear it using keys instead
4085 driver.findElement(By.css('.phrase'))
4086 .sendKeys(Key.CONTROL,"a");
4087 driver.findElement(By.css('.phrase'))
4088 .sendKeys(Key.DELETE);
4089 driver.findElement(By.css('.root-key'))
4090 .sendKeys(Key.CONTROL,"a");
4091 driver.findElement(By.css('.root-key'))
4092 .sendKeys(Key.DELETE);
4093 driver.sleep(generateDelay).then(function() {
4094 // try to generate more addresses
4095 driver.findElement(By.css('.more'))
4096 .click();
4097 driver.sleep(generateDelay).then(function() {
4098 driver.findElements(By.css(".addresses tr"))
4099 .then(function(els) {
4100 // check there are no addresses shown
4101 expect(els.length).toBe(0);
4102 done();
4103 });
4104 });
4105 });
4106 });
4107});
4108
4109// Github issue 95
4110// error trying to generate addresses from xpub with hardened derivation
4111it('Shows error for hardened addresses with xpub root key', function(done) {
4112 driver.findElement(By.css('#bip32-tab a'))
4113 .click()
4114 driver.executeScript(function() {
4115 $(".hardened-addresses").prop("checked", true);
4116 });
4117 // set xpub for account 0 of bip44 for 'abandon abandon ability'
4118 driver.findElement(By.css("#root-key"))
4119 .sendKeys("xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf");
4120 driver.sleep(feedbackDelay).then(function() {
4121 // Check feedback is correct
4122 driver.findElement(By.css('.feedback'))
4123 .getText()
4124 .then(function(feedback) {
4125 var msg = "Hardened derivation path is invalid with xpub key";
4126 expect(feedback).toBe(msg);
4127 done();
4128 });
4129 });
4130});
4131
1c2b8c6b 4132// Litecoin uses ltub by default, and can optionally be set to xprv
0460b53f
IC
4133// github issue 96
4134// https://github.com/iancoleman/bip39/issues/96
4135// Issue with extended keys on Litecoin
1c2b8c6b 4136it('Uses ltub by default for litecoin, but can be set to xprv', function(done) {
0460b53f
IC
4137 driver.findElement(By.css('.phrase'))
4138 .sendKeys("abandon abandon ability");
4139 selectNetwork("LTC - Litecoin");
4140 driver.sleep(generateDelay).then(function() {
4141 // check the extended key is generated correctly
4142 driver.findElement(By.css('.root-key'))
4143 .getAttribute("value")
4144 .then(function(rootKey) {
1c2b8c6b 4145 expect(rootKey).toBe("Ltpv71G8qDifUiNesiPqf6h5V6eQ8ic77oxQiYtawiACjBEx3sTXNR2HGDGnHETYxESjqkMLFBkKhWVq67ey1B2MKQXannUqNy1RZVHbmrEjnEU");
0460b53f
IC
4146 // set litecoin to use ltub
4147 driver.executeScript(function() {
1c2b8c6b 4148 $(".litecoin-use-ltub").prop("checked", false);
0460b53f
IC
4149 $(".litecoin-use-ltub").trigger("change");
4150 });
4151 driver.sleep(generateDelay).then(function() {
4152 driver.findElement(By.css('.root-key'))
4153 .getAttribute("value")
4154 .then(function(rootKey) {
1c2b8c6b 4155 expect(rootKey).toBe("xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi");
0460b53f
IC
4156 done();
4157 });
4158 })
4159 });
4160 });
0460b53f
IC
4161});
4162
4163// github issue 99
4164// https://github.com/iancoleman/bip39/issues/99#issuecomment-327094159
4165// "warn me emphatically when they have detected invalid input" to the entropy field
4166// A warning is shown when entropy is filtered and discarded
4167it('Warns when entropy is filtered and discarded', function(done) {
4168 driver.findElement(By.css('.use-entropy'))
4169 .click();
4170 // set entropy to have no filtered content
4171 driver.findElement(By.css('.entropy'))
4172 .sendKeys("00000000 00000000 00000000 00000000");
4173 driver.sleep(generateDelay).then(function() {
4174 // check the filter warning does not show
4175 driver.findElement(By.css('.entropy-container .filter-warning'))
4176 .getAttribute("class")
4177 .then(function(classes) {
4178 expect(classes).toContain("hidden");
4179 // set entropy to have some filtered content
4180 driver.findElement(By.css('.entropy'))
4181 .sendKeys("10000000 zxcvbn 00000000 00000000 00000000");
4182 driver.sleep(entropyFeedbackDelay).then(function() {
4183 // check the filter warning shows
4184 driver.findElement(By.css('.entropy-container .filter-warning'))
4185 .getAttribute("class")
4186 .then(function(classes) {
4187 expect(classes).not.toContain("hidden");
4188 done();
4189 });
4190 });
4191 });
4192 });
4193});
4194
e0f91e20
IC
4195// Bitcoin Cash address can be set to use cashaddr format
4196it('Can use cashaddr format for bitcoin cash addresses', function(done) {
4197 driver.executeScript(function() {
4198 $(".use-bch-cashaddr-addresses").prop("checked", true);
4199 });
4200 driver.findElement(By.css('.phrase'))
4201 .sendKeys("abandon abandon ability");
4202 selectNetwork("BCH - Bitcoin Cash");
4203 driver.sleep(generateDelay).then(function() {
4204 getFirstAddress(function(address) {
4205 expect(address).toBe("bitcoincash:qzlquk7w4hkudxypl4fgv8x279r754dkvur7jpcsps");
4206 done();
4207 });
4208 });
4209});
4210
0460b53f
IC
4211// Bitcoin Cash address can be set to use bitpay format
4212it('Can use bitpay format for bitcoin cash addresses', function(done) {
4213 driver.executeScript(function() {
e0f91e20 4214 $(".use-bch-bitpay-addresses").prop("checked", true);
0460b53f
IC
4215 });
4216 driver.findElement(By.css('.phrase'))
4217 .sendKeys("abandon abandon ability");
4218 selectNetwork("BCH - Bitcoin Cash");
4219 driver.sleep(generateDelay).then(function() {
4220 getFirstAddress(function(address) {
4221 expect(address).toBe("CZnpA9HPmvhuhLLPWJP8rNDpLUYXy1LXFk");
4222 done();
4223 });
4224 });
4225});
4226
e0f91e20
IC
4227// Bitcoin Cash address can be set to use legacy format
4228it('Can use legacy format for bitcoin cash addresses', function(done) {
4229 driver.executeScript(function() {
4230 $(".use-bch-legacy-addresses").prop("checked", true);
4231 });
4232 driver.findElement(By.css('.phrase'))
4233 .sendKeys("abandon abandon ability");
4234 selectNetwork("BCH - Bitcoin Cash");
4235 driver.sleep(generateDelay).then(function() {
4236 getFirstAddress(function(address) {
4237 expect(address).toBe("1JKvb6wKtsjNoCRxpZ4DGrbniML7z5U16A");
4238 done();
4239 });
4240 });
4241});
4242
9183f9f6
IC
4243// End of tests ported from old suit, so no more comments above each test now
4244
4245it('Can generate more addresses from a custom index', function(done) {
4246 var expectedIndexes = [
4247 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
4248 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
4249 ];
4250 driver.findElement(By.css('.phrase'))
4251 .sendKeys("abandon abandon ability");
4252 driver.sleep(generateDelay).then(function() {
4253 // Set start of next lot of rows to be from index 40
4254 // which means indexes 20-39 will not be in the table.
4255 driver.findElement(By.css('.more-rows-start-index'))
4256 .sendKeys("40");
4257 driver.findElement(By.css('.more'))
4258 .click();
4259 driver.sleep(generateDelay).then(function() {
4260 // Check actual indexes in the table match the expected pattern
4261 driver.findElements(By.css(".index"))
4262 .then(function(els) {
4263 expect(els.length).toBe(expectedIndexes.length);
4264 var testRowAtIndex = function(i) {
4265 if (i >= expectedIndexes.length) {
4266 done();
4267 }
4268 else {
4269 els[i].getText()
4270 .then(function(actualPath) {
4271 var noHardened = actualPath.replace(/'/g, "");
4272 var pathBits = noHardened.split("/")
4273 var lastBit = pathBits[pathBits.length-1];
4274 var actualIndex = parseInt(lastBit);
4275 var expectedIndex = expectedIndexes[i];
4276 expect(actualIndex).toBe(expectedIndex);
4277 testRowAtIndex(i+1);
4278 });
4279 }
4280 }
4281 testRowAtIndex(0);
4282 });
4283 });
4284 });
4285});
4286
c49e8812
IC
4287it('Can generate BIP141 addresses with P2WPKH-in-P2SH semanitcs', function(done) {
4288 // Sourced from BIP49 official test specs
4289 driver.findElement(By.css('#bip141-tab a'))
4290 .click();
4291 driver.findElement(By.css('.bip141-path'))
4292 .clear();
4293 driver.findElement(By.css('.bip141-path'))
4294 .sendKeys("m/49'/1'/0'/0");
4295 selectNetwork("BTC - Bitcoin Testnet");
4296 driver.findElement(By.css(".phrase"))
4297 .sendKeys("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about");
4298 driver.sleep(generateDelay).then(function() {
4299 getFirstAddress(function(address) {
4300 expect(address).toBe("2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2");
4301 done();
4302 });
4303 });
4304});
4305
5c203fab
IC
4306it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) {
4307 driver.findElement(By.css('#bip141-tab a'))
4308 .click();
4309 // Choose P2WSH
4310 driver.executeScript(function() {
4311 $(".bip141-semantics option[selected]").removeAttr("selected");
4312 $(".bip141-semantics option").filter(function(i,e) {
f7e9fdf0 4313 return $(e).html() == "P2WSH (1-of-1 multisig)";
5c203fab
IC
4314 }).prop("selected", true);
4315 $(".bip141-semantics").trigger("change");
4316 });
4317 driver.findElement(By.css(".phrase"))
4318 .sendKeys("abandon abandon ability");
4319 driver.sleep(generateDelay).then(function() {
4320 driver.findElement(By.css("#root-key"))
4321 .getAttribute("value")
4322 .then(function(rootKey) {
4323 expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6");
f7e9fdf0
IC
4324 getFirstAddress(function(address) {
4325 expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r");
4326 done();
4327 });
5c203fab
IC
4328 })
4329 });
4330});
4331
4332it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) {
4333 driver.findElement(By.css('#bip141-tab a'))
4334 .click();
4335 // Choose P2WSH-in-P2SH
4336 driver.executeScript(function() {
4337 $(".bip141-semantics option[selected]").removeAttr("selected");
4338 $(".bip141-semantics option").filter(function(i,e) {
f7e9fdf0 4339 return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
5c203fab
IC
4340 }).prop("selected", true);
4341 $(".bip141-semantics").trigger("change");
4342 });
4343 driver.findElement(By.css(".phrase"))
4344 .sendKeys("abandon abandon ability");
4345 driver.sleep(generateDelay).then(function() {
4346 driver.findElement(By.css("#root-key"))
4347 .getAttribute("value")
4348 .then(function(rootKey) {
4349 expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe");
f7e9fdf0
IC
4350 getFirstAddress(function(address) {
4351 expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G");
4352 done();
4353 });
5c203fab
IC
4354 })
4355 });
4356});
4357
4358it('Uses Vprv for bitcoin testnet p2wsh', function(done) {
4359 selectNetwork("BTC - Bitcoin Testnet");
4360 driver.findElement(By.css('#bip141-tab a'))
4361 .click()
4362 // Choose P2WSH
4363 driver.executeScript(function() {
4364 $(".bip141-semantics option[selected]").removeAttr("selected");
4365 $(".bip141-semantics option").filter(function(i,e) {
f7e9fdf0 4366 return $(e).html() == "P2WSH (1-of-1 multisig)";
5c203fab
IC
4367 }).prop("selected", true);
4368 $(".bip141-semantics").trigger("change");
4369 });
4370 driver.findElement(By.css('.phrase'))
4371 .sendKeys('abandon abandon ability');
4372 driver.sleep(generateDelay).then(function() {
4373 driver.findElement(By.css('.root-key'))
4374 .getAttribute("value")
4375 .then(function(path) {
4376 expect(path).toBe("Vprv16YtLrHXxePM5ja5hXQbiJs5JKDAc4WcaXo5rZcrVMU6bMhUg1oY7fpPku3i819gvMcHvq1h8aELDsyfCEs19vj1Q3iDHRrESWyJConkoT1");
4377 done();
4378 })
4379 });
4380});
4381
4382it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) {
4383 selectNetwork("BTC - Bitcoin Testnet");
4384 driver.findElement(By.css('#bip141-tab a'))
4385 .click()
4386 // Choose P2WSH-in-P2SH
4387 driver.executeScript(function() {
4388 $(".bip141-semantics option[selected]").removeAttr("selected");
4389 $(".bip141-semantics option").filter(function(i,e) {
f7e9fdf0 4390 return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
5c203fab
IC
4391 }).prop("selected", true);
4392 $(".bip141-semantics").trigger("change");
4393 });
4394 driver.findElement(By.css('.phrase'))
4395 .sendKeys('abandon abandon ability');
4396 driver.sleep(generateDelay).then(function() {
4397 driver.findElement(By.css('.root-key'))
4398 .getAttribute("value")
4399 .then(function(path) {
4400 expect(path).toBe("Uprv95RJn67y7xyEuRLHenkZYVUx9LkARJzAsVx3ZJMeyHMdVwosWD9K8JTe4Z1FeE4gwBVcnqKF3f82ZvJxkBxHS5E74fYnigxvqeke8ZV3Fp2");
4401 done();
4402 })
4403 });
4404});
4405
c49e8812
IC
4406it('Can generate BIP141 addresses with P2WPKH semanitcs', function(done) {
4407 // This result tested against bitcoinjs-lib test spec for segwit address
4408 // using the first private key of this mnemonic and default path m/0
4409 // https://github.com/bitcoinjs/bitcoinjs-lib/blob/9c8503cab0c6c30a95127042703bc18e8d28c76d/test/integration/addresses.js#L50
4410 // so whilst not directly comparable, substituting the private key produces
4411 // identical results between this tool and the bitcoinjs-lib test.
4412 // Private key generated is:
4413 // L3L8Nu9whawPBNLGtFqDhKut9DKKfG3CQoysupT7BimqVCZsLFNP
4414 driver.findElement(By.css('#bip141-tab a'))
4415 .click();
4416 // Choose P2WPKH
4417 driver.executeScript(function() {
4418 $(".bip141-semantics option[selected]").removeAttr("selected");
4419 $(".bip141-semantics option").filter(function(i,e) {
4420 return $(e).html() == "P2WPKH";
4421 }).prop("selected", true);
4422 $(".bip141-semantics").trigger("change");
4423 });
4424 driver.findElement(By.css(".phrase"))
4425 .sendKeys("abandon abandon ability");
4426 driver.sleep(generateDelay).then(function() {
4427 getFirstAddress(function(address) {
4428 expect(address).toBe("bc1qfwu6a5a3evygrk8zvdxxvz4547lmpyx5vsfxe9");
4429 done();
4430 });
4431 });
4432});
4433
74ab4cbe
IC
4434it('Shows the entropy used by the PRNG when clicking generate', function(done) {
4435 driver.findElement(By.css('.generate')).click();
4436 driver.sleep(generateDelay).then(function() {
4437 driver.findElement(By.css('.entropy'))
4438 .getAttribute("value")
4439 .then(function(entropy) {
4440 expect(entropy).not.toBe("");
4441 done();
4442 });
4443 });
4444});
4445
4446it('Shows the index of each word in the mnemonic', function(done) {
4447 driver.findElement(By.css('.phrase'))
4448 .sendKeys("abandon abandon ability");
4449 driver.sleep(generateDelay).then(function() {
4450 driver.findElement(By.css('.use-entropy'))
4451 .click();
4452 driver.findElement(By.css('.word-indexes'))
4453 .getText()
4454 .then(function(indexes) {
4455 expect(indexes).toBe("0, 0, 1");
4456 done();
4457 });
4458 });
4459});
4460
4e9b492c
IC
4461it('Shows the derivation path for bip84 tab', function(done) {
4462 driver.findElement(By.css('#bip84-tab a'))
4463 .click()
4464 driver.findElement(By.css('.phrase'))
4465 .sendKeys('abandon abandon ability');
4466 driver.sleep(generateDelay).then(function() {
4467 driver.findElement(By.css('#bip84 .path'))
4468 .getAttribute("value")
4469 .then(function(path) {
4470 expect(path).toBe("m/84'/0'/0'/0");
4471 done();
4472 })
4473 });
4474});
4475
4476it('Shows the extended private key for bip84 tab', function(done) {
4477 driver.findElement(By.css('#bip84-tab a'))
4478 .click()
4479 driver.findElement(By.css('.phrase'))
4480 .sendKeys('abandon abandon ability');
4481 driver.sleep(generateDelay).then(function() {
4482 driver.findElement(By.css('.extended-priv-key'))
4483 .getAttribute("value")
4484 .then(function(path) {
4485 expect(path).toBe("zprvAev3RKrZ3QVKiUFCfdeMRen1BPDJgdNt1XpxiDy8acSs4kkAGTCvq7HeRYRNNpo8EtEjCFQBWavJwtCUR29y4TUCH4X5RXMcyq48uN8y9BP");
4486 done();
4487 })
4488 });
4489});
4490
4491it('Shows the extended public key for bip84 tab', function(done) {
4492 driver.findElement(By.css('#bip84-tab a'))
4493 .click()
4494 driver.findElement(By.css('.phrase'))
4495 .sendKeys('abandon abandon ability');
4496 driver.sleep(generateDelay).then(function() {
4497 driver.findElement(By.css('.extended-pub-key'))
4498 .getAttribute("value")
4499 .then(function(path) {
4500 expect(path).toBe("zpub6suPpqPSsn3cvxKfmfBMnnijjR3o666jNkkZWcNk8wyqwZ5JozXBNuc8Gs7DB3uLwTDvGVTspVEAUQcEjKF3pZHgywVbubdTqbXTUg7usyx");
4501 done();
4502 })
4503 });
4504});
4505
4506it('Changes the address list if bip84 account is changed', function(done) {
4507 driver.findElement(By.css('#bip84-tab a'))
4508 .click()
4509 driver.findElement(By.css('#bip84 .account'))
4510 .sendKeys('1');
4511 driver.findElement(By.css('.phrase'))
4512 .sendKeys('abandon abandon ability');
4513 driver.sleep(generateDelay).then(function() {
4514 getFirstAddress(function(address) {
4515 expect(address).toBe("bc1qp7vv669t2fy965jdzvqwrraana89ctd5ewc662");
4516 done();
4517 });
4518 });
4519});
4520
4521it('Changes the address list if bip84 change is changed', function(done) {
4522 driver.findElement(By.css('#bip84-tab a'))
4523 .click()
4524 driver.findElement(By.css('#bip84 .change'))
4525 .sendKeys('1');
4526 driver.findElement(By.css('.phrase'))
4527 .sendKeys('abandon abandon ability');
4528 driver.sleep(generateDelay).then(function() {
4529 getFirstAddress(function(address) {
4530 expect(address).toBe("bc1qr39vj6rh06ff05m53uxq8uazehwhccswylhrs2");
4531 done();
4532 });
4533 });
4534});
4535
4536it('Passes the official BIP84 test spec for rootpriv', function(done) {
4537 driver.findElement(By.css('#bip84-tab a'))
4538 .click()
4539 driver.findElement(By.css('.phrase'))
4540 .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
4541 driver.sleep(generateDelay).then(function() {
4542 driver.findElement(By.css(".root-key"))
4543 .getAttribute("value")
4544 .then(function(rootKey) {
4545 expect(rootKey).toBe("zprvAWgYBBk7JR8Gjrh4UJQ2uJdG1r3WNRRfURiABBE3RvMXYSrRJL62XuezvGdPvG6GFBZduosCc1YP5wixPox7zhZLfiUm8aunE96BBa4Kei5");
4546 done();
4547 })
4548 });
4549});
4550
4551it('Passes the official BIP84 test spec for account 0 xprv', function(done) {
4552 driver.findElement(By.css('#bip84-tab a'))
4553 .click()
4554 driver.findElement(By.css('.phrase'))
4555 .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
4556 driver.sleep(generateDelay).then(function() {
4557 driver.findElement(By.css("#bip84 .account-xprv"))
4558 .getAttribute("value")
4559 .then(function(rootKey) {
4560 expect(rootKey).toBe("zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE");
4561 done();
4562 })
4563 });
4564});
4565
4566it('Passes the official BIP84 test spec for account 0 xpub', function(done) {
4567 driver.findElement(By.css('#bip84-tab a'))
4568 .click()
4569 driver.findElement(By.css('.phrase'))
4570 .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
4571 driver.sleep(generateDelay).then(function() {
4572 driver.findElement(By.css("#bip84 .account-xpub"))
4573 .getAttribute("value")
4574 .then(function(rootKey) {
4575 expect(rootKey).toBe("zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs");
4576 done();
4577 })
4578 });
4579});
4580
4581it('Passes the official BIP84 test spec for account 0 first address', function(done) {
4582 driver.findElement(By.css('#bip84-tab a'))
4583 .click()
4584 driver.findElement(By.css('.phrase'))
4585 .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
4586 driver.sleep(generateDelay).then(function() {
4587 getFirstAddress(function(address) {
4588 expect(address).toBe("bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu");
4589 done();
4590 });
4591 });
4592});
4593
4594it('Passes the official BIP84 test spec for account 0 first change address', function(done) {
4595 driver.findElement(By.css('#bip84-tab a'))
4596 .click()
4597 driver.findElement(By.css('.phrase'))
4598 .sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
4599 driver.findElement(By.css('#bip84 .change'))
4600 .sendKeys('1');
4601 driver.sleep(generateDelay).then(function() {
4602 getFirstAddress(function(address) {
4603 expect(address).toBe("bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el");
4604 done();
4605 });
4606 });
4607});
4608
a78f4e28
IC
4609it('Can display the table as csv', function(done) {
4610 var headings = "path,address,public key,private key";
4611 var row1 = "m/44'/0'/0'/0/0,1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug,033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3,L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE";
4612 var row20 = "m/44'/0'/0'/0/19,1KhBy28XLAciXnnRvm71PvQJaETyrxGV55,02b4b3e396434d8cdd20c03ac4aaa07387784d5d867b75987f516f5705ee68cb3a,L4GrDrjReMsCAu5DkLXn79jSb95qR7Zfx7eshybCQZ1qL32MXJab";
4613 driver.findElement(By.css('.phrase'))
4614 .sendKeys('abandon abandon ability');
4615 driver.sleep(generateDelay).then(function() {
4616 driver.findElement(By.css('.csv'))
4617 .getAttribute("value")
4618 .then(function(csv) {
4619 expect(csv).toContain(headings);
4620 expect(csv).toContain(row1);
4621 expect(csv).toContain(row20);
4622 done();
4623 });
4624 });
4625});
4626
78db37f6
IC
4627it('LeftPads ethereum keys that are less than 32 bytes', function(done) {
4628 // see https://github.com/iancoleman/bip39/issues/155
4629 selectNetwork("ETH - Ethereum");
4630 driver.findElement(By.css('#bip32-tab a'))
4631 .click()
4632 driver.findElement(By.css('#bip32-path'))
4633 .clear();
4634 driver.findElement(By.css('#bip32-path'))
4635 .sendKeys("m/44'/60'/0'");
4636 driver.findElement(By.css('.phrase'))
4637 .sendKeys('scout sort custom elite radar rare vivid thing trophy gesture cover snake change narrow kite list nation sustain buffalo erode open balance system young');
4638 driver.sleep(generateDelay).then(function() {
2ef27fb8
IC
4639 getFirstAddress(function(address) {
4640 expect(address).toBe("0x8943E785B4a5714FC87a3aFAad1eB1FeB602B118");
4641 done();
4642 });
78db37f6
IC
4643 });
4644});
4645
e21e32da
IC
4646it('Can encrypt private keys using BIP38', function(done) {
4647 // see https://github.com/iancoleman/bip39/issues/140
4648 driver.executeScript(function() {
4649 $(".use-bip38").prop("checked", true);
4650 });
4651 driver.findElement(By.css('.bip38-password'))
4652 .sendKeys('bip38password');
4653 driver.findElement(By.css('.rows-to-add'))
4654 .clear();
4655 driver.findElement(By.css('.rows-to-add'))
4656 .sendKeys('1');
4657 driver.findElement(By.css('.phrase'))
4658 .sendKeys('abandon abandon ability');
4659 driver.sleep(bip38delay).then(function() {
4660 // address
4661 getFirstRowValue(function(address) {
4662 expect(address).toBe("1NCvSdumA3ngMM9c4aqU56AM6rqXddfuXB");
4663 // pubkey
4664 getFirstRowValue(function(pubkey) {
4665 expect(pubkey).toBe("043f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3884a74447ea901729b1e73a999b7520e7cb55b4120e6432c64153ccab8a848e1");
4666 // privkey
4667 getFirstRowValue(function(privkey) {
4668 expect(privkey).toBe("6PRNRiFnj1RoR3sXhymdCvoZCgnUHQpfupNdKkFbWJkwWQEKesWt1EDMDM");
4669 done();
4670 }, ".privkey");
4671 }, ".pubkey");
4672 }, ".address");
4673 });
4674}, bip38delay + 5000);
4675
09d63290
IC
4676it('Shows the checksum for the entropy', function(done) {
4677 driver.findElement(By.css('.use-entropy'))
4678 .click();
4679 driver.findElement(By.css('.entropy'))
4680 .sendKeys("00000000000000000000000000000000");
4681 driver.sleep(generateDelay).then(function() {
4682 driver.findElement(By.css('.checksum'))
4683 .getText()
4684 .then(function(text) {
4685 expect(text).toBe("1");
4686 done();
4687 });
4688 });
4689});
4690
f8ca25c3
IC
4691it('Shows the checksum for the entropy with the correct groupings', function(done) {
4692 driver.findElement(By.css('.use-entropy'))
4693 .click();
4694 // create a checksum of 20 bits, which spans multiple words
4695 driver.findElement(By.css('.entropy'))
4696 .sendKeys("F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
4697 driver.sleep(generateDelay).then(function() {
4698 driver.findElement(By.css('.checksum'))
4699 .getText()
4700 .then(function(text) {
4701 // first group is 9 bits, second group is 11
4702 expect(text).toBe("011010111 01110000110");
4703 done();
4704 });
4705 });
4706});
4707
38122a3d
IC
4708it('Uses vprv for bitcoin testnet p2wpkh', function(done) {
4709 selectNetwork("BTC - Bitcoin Testnet");
4710 driver.findElement(By.css('#bip84-tab a'))
4711 .click()
4712 driver.findElement(By.css('.phrase'))
4713 .sendKeys('abandon abandon ability');
4714 driver.sleep(generateDelay).then(function() {
4715 driver.findElement(By.css('.root-key'))
4716 .getAttribute("value")
4717 .then(function(path) {
4718 expect(path).toBe("vprv9DMUxX4ShgxML9N2YV5CvWEebWrM9aJ5ULpbRRyzyWu6vs4BzTvbfFFrH41N5hVi7MYSfiugd765L3JmAfDM5po36Y8ouCKRDeYQwByCmS7");
4719 done();
4720 })
4721 });
4722});
4723
85c90672
IC
4724it('Shows a warning if generating weak mnemonics', function(done) {
4725 driver.executeScript(function() {
4726 $(".strength option[selected]").removeAttr("selected");
4727 $(".strength option[value=6]").prop("selected", true);
4728 $(".strength").trigger("change");
4729 });
4730 driver.findElement(By.css(".generate-container .warning"))
4731 .getAttribute("class")
4732 .then(function(classes) {
4733 expect(classes).not.toContain("hidden");
4734 done();
4735 });
4736});
4737
4738it('Does not show a warning if generating strong mnemonics', function(done) {
4739 driver.executeScript(function() {
4740 $(".strength option[selected]").removeAttr("selected");
4741 $(".strength option[value=12]").prop("selected", true);
4742 });
4743 driver.findElement(By.css(".generate-container .warning"))
4744 .getAttribute("class")
4745 .then(function(classes) {
4746 expect(classes).toContain("hidden");
4747 done();
4748 });
4749});
4750
645945a0
IC
4751it('Shows a warning if overriding weak entropy with longer mnemonics', function(done) {
4752 driver.findElement(By.css('.use-entropy'))
4753 .click();
4754 driver.findElement(By.css('.entropy'))
4755 .sendKeys("0123456789abcdef"); // 6 words
4756 driver.executeScript(function() {
4757 $(".mnemonic-length").val("12").trigger("change");
4758 });
4759 driver.findElement(By.css(".weak-entropy-override-warning"))
4760 .getAttribute("class")
4761 .then(function(classes) {
4762 expect(classes).not.toContain("hidden");
4763 done();
4764 });
4765});
4766
4767it('Does not show a warning if entropy is stronger than mnemonic length', function(done) {
4768 driver.findElement(By.css('.use-entropy'))
4769 .click();
4770 driver.findElement(By.css('.entropy'))
4771 .sendKeys("0123456789abcdef0123456789abcdef0123456789abcdef"); // 18 words
4772 driver.executeScript(function() {
4773 $(".mnemonic-length").val("12").trigger("change");
4774 });
4775 driver.findElement(By.css(".weak-entropy-override-warning"))
4776 .getAttribute("class")
4777 .then(function(classes) {
4778 expect(classes).toContain("hidden");
4779 done();
4780 });
4781});
4782
530648c1
IC
4783it('Shows litecoin BIP49 addresses', function(done) {
4784 driver.findElement(By.css('.phrase'))
4785 .sendKeys('abandon abandon ability');
4786 selectNetwork("LTC - Litecoin");
4787 driver.findElement(By.css('#bip49-tab a'))
4788 .click()
4789 // bip49 addresses are shown
4790 driver.sleep(generateDelay).then(function() {
4791 driver.findElement(By.css('#bip49 .available'))
4792 .getAttribute("class")
4793 .then(function(classes) {
4794 expect(classes).not.toContain("hidden");
4795 // check first address
4796 getFirstAddress(function(address) {
4797 expect(address).toBe("MFwLPhsXoBuSLL8cLmW9uK6tChkzduV8qN");
4798 done();
4799 });
4800 });
4801 });
4802});
4803
76120cb0
H
4804it('Shows Groestlcoin BIP49 addresses', function(done) {
4805 driver.findElement(By.css('.phrase'))
4806 .sendKeys('abandon abandon ability');
4807 selectNetwork("GRS - Groestlcoin");
4808 driver.findElement(By.css('#bip49-tab a'))
4809 .click()
4810 // bip49 addresses are shown
4811 driver.sleep(generateDelay).then(function() {
4812 driver.findElement(By.css('#bip49 .available'))
4813 .getAttribute("class")
4814 .then(function(classes) {
4815 expect(classes).not.toContain("hidden");
4816 // check first address
4817 getFirstAddress(function(address) {
4818 expect(address).toBe("3HXSCZwCypLyixMsF4Z1sN49noJtrm8gnX");
4819 done();
4820 });
4821 });
4822 });
4823});
4824
6f7fa353
IC
4825it('Can use root keys to generate segwit table rows', function(done) {
4826 // segwit uses ypub / zpub instead of xpub but the root key should still
4827 // be valid regardless of the encoding used to import that key.
4828 // Maybe this breaks the reason for the different extended key prefixes, but
4829 // since the parsed root key is used behind the scenes anyhow this should be
4830 // allowed.
4831 driver.findElement(By.css('#root-key'))
4832 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
4833 driver.findElement(By.css('#bip49-tab a'))
4834 .click()
4835 // bip49 addresses are shown
4836 driver.sleep(generateDelay).then(function() {
4837 getFirstAddress(function(address) {
4838 expect(address).toBe("3QG2Y9AA4xZ846gKHZqNf7mvVKbLqMKxr2");
4839 done();
4840 });
4841 });
4842});
4843
659b06a7
IC
4844// Pull Request 271
4845// Allow converting mnemonic back to raw entropy value
3799728c 4846it('Converts mnemonics into raw entropy', function(done) {
659b06a7
IC
4847 driver.findElement(By.css('.phrase'))
4848 .sendKeys('abandon abandon about');
4849 driver.sleep(generateDelay).then(function() {
4850 driver.findElement(By.css('.use-entropy'))
4851 .click();
4852 driver.findElement(By.css('.entropy'))
4853 .getAttribute("value")
4854 .then(function(entropy) {
244c7602 4855 expect(entropy).toBe("00000001");
70029471
IC
4856 driver.findElement(By.css('.phrase'))
4857 .getAttribute("value")
4858 .then(function(phrase) {
4859 expect(phrase).toBe("abandon abandon about");
4860 done();
4861 });
659b06a7
IC
4862 });
4863 });
4864});
4865
a04946e2
IC
4866// Pull Request 279
4867// Added Split Phrase Card Output
3799728c 4868it('Shows split prase cards', function(done) {
a04946e2
IC
4869 var originalPhrase = "ugly charge strong giant once anchor capable october thumb inject dwarf legal alley mixture shoot";
4870 var originalWords = originalPhrase.split(' ');
4871 driver.findElement(By.css('.phrase'))
4872 .sendKeys(originalPhrase);
4873 driver.sleep(generateDelay).then(function() {
4874 driver.findElement(By.css('.phraseSplit'))
4875 .getAttribute("value")
4876 .then(function(cardsStr) {
4877 var cards = cardsStr.split("\n");
4878 expect(cards.length).toBe(3);
4879 // test all 2-of-3 combos can be used to form full phrase
4880 var combos = [[0,1],[0,2],[1,2]];
4881 for (var i=0; i<combos.length; i++) {
4882 var combo = combos[i];
4883 var a = combo[0];
4884 var b = combo[1];
4885 var phrase = cards[a] + " " + cards[b];
4886 // check all original words are present
4887 for (var j=0; j<originalWords.length; j++) {
4888 var originalWord = originalWords[j];
4889 expect(phrase).toContain(originalWord);
4890 }
4891 }
4892 done();
4893 });
4894 });
4895});
4896
516c16d7
IC
4897// It allows manually specifying the entropy type
4898it('Allows entropy type to be manually selected', function(done) {
4899 driver.findElement(By.css('.use-entropy'))
4900 .click();
4901 // use decimal entropy
4902 driver.findElement(By.css('.entropy'))
4903 .sendKeys("91");
4904 // manually change to binary entropy
4905 driver.executeScript(function() {
4906 $(".entropy-container input[value='binary']").click();
4907 });
4908 driver.sleep(entropyFeedbackDelay).then(function() {
4909 driver.findElement(By.css('.entropy-container'))
4910 .getText()
4911 .then(function(text) {
4912 // overide 91 to be just 1
4913 var key = "Filtered Entropy";
4914 var value = "1";
4915 var reText = key + "\\s+" + value;
4916 var re = new RegExp(reText);
4917 expect(text).toMatch(re);
4918 // overide automatic decimal to binary
4919 var key = "Entropy Type";
4920 var value = "binary";
4921 var reText = key + "\\s+" + value;
4922 var re = new RegExp(reText);
4923 expect(text).toMatch(re);
4924 // overide 2 events to 1
4925 var key = "Event Count";
4926 var value = 1;
4927 var reText = key + "\\s+" + value;
4928 var re = new RegExp(reText);
4929 expect(text).toMatch(re);
4930 // overide log2(10)*2 bits to 1 bit
4931 var key = "Total Bits";
4932 var value = 1;
4933 var reText = key + "\\s+" + value;
4934 var re = new RegExp(reText);
4935 expect(text).toMatch(re);
4936 done();
4937 });
4938 });
4939});
4940
9cf02dd4
IC
4941// https://github.com/iancoleman/bip39/issues/388
4942// Make field for bip39 seed editable
4943it('Generates addresses when seed is set', function(done) {
4944 driver.findElement(By.css('.seed'))
4945 .sendKeys("20da140d3dd1df8713cefcc4d54ce0e445b4151027a1ab567b832f6da5fcc5afc1c3a3f199ab78b8e0ab4652efd7f414ac2c9a3b81bceb879a70f377aa0a58f3");
4946 driver.sleep(generateDelay).then(function() {
4947 getFirstAddress(function(address) {
4948 expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
4949 done();
4950 });
4951 });
4952});
4953
dfb4fd1b
ML
4954// https://github.com/iancoleman/bip39/issues/169
4955it('Generates ethereum addresses from a public key', function(done) {
4956 var pubkey = "xpub68UK3hrMEp2jLPxPASgXSiqiUsQsUWZHCeuu6NqcJLt259LMeWzwDyufXLN1QmjLeLRY5he4QfArDDLbsXiw3xN3kFcYtyDy74BY73RPhhW";
4957 driver.findElement(By.css('.root-key'))
4958 .sendKeys(pubkey);
4959 driver.findElement(By.css('#bip32-tab a'))
4960 .click()
4961 selectNetwork('ETH - Ethereum');
4962 driver.sleep(generateDelay).then(function() {
4963 getFirstAddress(function(address) {
4964 expect(address).toBe("0x1Bd54748903438C7E386b4a3fCbe16237A316a98");
4965 done();
4966 });
4967 });
4968});
4969
0460b53f 4970});