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