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