2 // cd /path/to/repo/tests
3 // jasmine spec/tests.js
9 // see https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Headless_mode#Automated_testing_with_headless_mode
11 // USER SPECIFIED OPTIONS
12 var browser
= process
.env
.BROWSER
; //"firefox"; // or "chrome"
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");
21 console
.log("Using browser: " + browser
);
26 var webdriver
= require('selenium-webdriver');
27 var By
= webdriver
.By
;
28 var Key
= webdriver
.Key
;
29 var until
= webdriver
.until
;
33 var generateDelay
= 1500;
34 var feedbackDelay
= 500;
35 var entropyFeedbackDelay
= 500;
36 var bip38delay
= 15000;
38 // url uses file:// scheme
39 var path
= require('path')
40 var parentDir
= path
.resolve(process
.cwd(), '..', 'src', 'index.html');
41 var url
= "file://" + parentDir
;
42 if (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";
51 // Variables dependent on specific browser selection
53 if (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
))
64 else if (browser
== "chrome") {
65 var chrome
= require('selenium-webdriver/chrome');
66 newDriver = function() {
67 return new webdriver
.Builder()
69 .setChromeOptions(new chrome
.Options().addArguments("headless"))
76 function testNetwork(done
, params
) {
77 var phrase
= params
.phrase
|| 'abandon abandon ability';
78 driver
.findElement(By
.css('.phrase'))
80 selectNetwork(params
.selectText
);
81 driver
.sleep(generateDelay
).then(function() {
82 getFirstAddress(function(address
) {
83 getFirstPublicKey(function(pubkey
) {
84 getFirstPrivateKey(function(privkey
) {
85 if ("firstAddress" in params
) {
86 expect(address
).toBe(params
.firstAddress
);
88 if ("firstPubKey" in params
) {
89 expect(pubkey
).toBe(params
.firstPubKey
);
91 if ("firstPrivKey" in params
) {
92 expect(privkey
).toBe(params
.firstPrivKey
);
101 function getFirstRowValue(handler
, selector
) {
102 driver
.findElements(By
.css(selector
))
103 .then(function(els
) {
109 function getFirstAddress(handler
) {
110 getFirstRowValue(handler
, ".address");
113 function getFirstPublicKey(handler
) {
114 getFirstRowValue(handler
, ".pubkey");
117 function getFirstPrivateKey(handler
) {
118 getFirstRowValue(handler
, ".privkey");
121 function getFirstPath(handler
) {
122 getFirstRowValue(handler
, ".index");
125 function 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");
137 function testRowsAreInCorrectOrder(done
) {
138 driver
.findElements(By
.css('.index'))
139 .then(function(els
) {
140 var testRowAtIndex = function(i
) {
141 if (i
>= els
.length
) {
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);
160 function 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");
171 function 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");
182 function 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
'))
188 driver.findElement(By.css('.entropy
'))
189 .sendKeys(entropyText);
190 driver.sleep(generateDelay).then(function() {
191 driver.findElement(By.css('.entropy
-container
'))
193 .then(function(text) {
194 var re = new RegExp("Entropy Type\\s+" + entropyType);
195 expect(text).toMatch(re);
201 function testEntropyBits(done, entropyText, entropyBits) {
202 driver.findElement(By.css('.use-entropy
'))
204 driver.findElement(By.css('.entropy
'))
205 .sendKeys(entropyText);
206 driver.sleep(generateDelay).then(function() {
207 driver.findElement(By.css('.entropy
-container
'))
209 .then(function(text) {
210 var re = new RegExp("Total Bits\\s+" + entropyBits);
211 expect(text).toMatch(re);
217 function 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, "\\$&");
223 driver.findElement(By.css('.use-entropy
'))
225 driver.findElement(By.css('.entropy
'))
226 .sendKeys(entropyDetail.entropy);
227 driver.sleep(entropyFeedbackDelay).then(function() {
228 driver.findElement(By.css('.entropy
-container
'))
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);
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);
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);
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);
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);
269 if ("words" in entropyDetail) {
270 var actualWords = phrase.split(/\s+/)
271 .filter(function(w) { return w.length > 0 })
273 expect(actualWords).toBe(entropyDetail.words);
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);
288 function testClientSelect(done, params) {
289 // set mnemonic and select bip32 tab
290 driver.findElement(By.css('#bip32
-tab a
'))
292 driver.findElement(By.css('.phrase
'))
293 .sendKeys("abandon abandon ability");
294 driver.sleep(generateDelay).then(function() {
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");
326 describe('BIP39 Tool Tests
', function() {
328 beforeEach(function(done) {
329 driver = newDriver();
330 driver.get(url).then(done);
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);
340 // Page initially loads with blank phrase
341 it('Should load the page
', function(done) {
342 driver.findElement(By.css('.phrase
'))
343 .getAttribute('value
').then(function(value) {
344 expect(value).toBe('');
350 it('Should have text on the page
', function(done) {
351 driver.findElement(By.css('body
'))
353 .then(function(text) {
354 var textToFind = "You can enter an existing BIP39 mnemonic";
355 expect(text).toContain(textToFind);
360 // Entering mnemonic generates addresses
361 it('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);
373 // Generate button generates random mnemonic
374 it('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);
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);
394 // Mnemonic length can be customized
395 it('Should allow custom length mnemonics
', function(done) {
397 driver.executeScript(function() {
398 $(".strength option[selected]").removeAttr("selected");
399 $(".strength option[value=6]").prop("selected", true);
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);
413 // Passphrase can be set
414 it('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");
427 // Network can be set to networks other than bitcoin
428 it('Allows selection
of bitcoin testnet
', function(done) {
430 selectText: "BTC - Bitcoin Testnet",
431 phrase: "abandon abandon ability",
432 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
433 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
434 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
436 testNetwork(done, params);
438 it('Allows selection
of bitcoin regtest
', function(done) {
440 selectText: "BTC - Bitcoin RegTest",
441 phrase: "abandon abandon ability",
442 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
443 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
444 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
446 testNetwork(done, params);
448 it('Allows selection
of litecoin
', function(done) {
450 selectText: "LTC - Litecoin",
451 phrase: "abandon abandon ability",
452 firstAddress: "LQ4XU8RX2ULPmPq9FcUHdVmPVchP9nwXdn",
453 firstPubKey: "028e27f074a8f4b85c07f944330bd59ec1b2dd7f88bb28182720cab6d2a5a5ff30",
454 firstPrivKey: "T9ShR6Z2vyEMHVgpeoif857LdMUZDKvzux3QMvD4EjpPYUV5TuEx",
456 testNetwork(done, params);
458 it('Allows selection
of litecoin testnet
', function(done) {
460 selectText: "LTCt - Litecoin Testnet",
461 phrase: "abandon abandon ability",
462 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi",
463 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
464 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
466 testNetwork(done, params);
468 it('Allows selection
of ripple
', function(done) {
470 selectText: "XRP - Ripple",
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",
472 firstAddress: "rLTFnqbmCVPGx6VfaygdtuKWJgcN4v1zRS",
473 firstPubKey: "0393ebfc2f75dd5757456a7ff7b907571693c9e3807ea386be68688b9c5fac072e",
474 firstPrivKey: "a869f16215c3cd7b6c5f448344bc8688cba70b734bbe189b2c48098a2c15dd53",
476 testNetwork(done, params);
478 it('Allows selection
of jingtum
', function(done) {
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",
486 testNetwork(done, params);
488 it('Allows selection
of casinocoin
', function(done) {
490 selectText: "CSC - CasinoCoin",
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",
492 firstAddress: "c3P5EUb27Pzk9dcGt4s7zQDQj4sC6Y81mT",
493 firstPubKey: "038ca5b4ff9d58059423b5a03deb2a9b755a311e97dc36ae8ab3d4ed93c808daf7",
494 firstPrivKey: "127fa93d8e4f434ce76faebc961df7ec081a68de19e96f36d38766e468b35920",
496 testNetwork(done, params);
498 it('Allows selection
of dogecoin
', function(done) {
500 selectText: "DOGE - Dogecoin",
501 phrase: "abandon abandon ability",
502 firstAddress: "DPQH2AtuzkVSG6ovjKk4jbUmZ6iXLpgbJA",
503 firstPubKey: "02d3d540cc62d5102887d26f2b129947f2bd2306dd9b76242c61ca65e5ca408899",
504 firstPrivKey: "QNv5TAoR6EodkN86FXaLDosy4Rau4sJ46JxE9NtUYtmKPLTuRmpc",
506 testNetwork(done, params);
508 it('Allows selection
of dogecoin testnet
', function(done) {
510 selectText: "DOGEt - Dogecoin Testnet",
511 phrase: "abandon abandon ability",
512 firstAddress: "niHnSJKHdwDyDxRMLBJrtNqpvHEsAFWe6B",
513 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
514 firstPrivKey: "cnCsx3G1NgXZGhijCRNupM1tts1aDNnQsr9e5jB5JnYv2yEDTwT5",
516 testNetwork(done, params);
518 it('Allows selection
of denarius
', function(done) {
520 selectText: "DNR - Denarius",
521 phrase: "abandon abandon ability",
522 firstAddress: "DFdFMVUMzU9xX88EywXvAGwjiwpxyh9vKb",
523 firstPubKey: "0285cda45afbf0b8897a5cedf97cbb1e2b63b0ac28cd1e919ea60fb748bc61e8d5",
524 firstPrivKey: "QX3Dy3b7C3vNWYDBPk8Hewp3ii2NukAopsHFCCsLZ6Ss77vzdoMj",
526 testNetwork(done, params);
528 it('Allows selection
of shadowcash
', function(done) {
530 selectText: "SDC - ShadowCash",
531 phrase: "abandon abandon ability",
532 firstAddress: "SiSZtfYAXEFvMm3XM8hmtkGDyViRwErtCG",
533 firstPubKey: "024d48659b83ff20fc250e7f111742e652aa71b73f3ff8d41b5f3ea99cb8ef9e3c",
534 firstPrivKey: "VJzJ98j5pdjzpY9DVRvU2RiRcvQ4t2oYYd9w9WUdiUJjvPs9X83v",
536 testNetwork(done, params);
538 it('Allows selection
of shadowcash testnet
', function(done) {
540 selectText: "SDC - ShadowCash Testnet",
541 phrase: "abandon abandon ability",
542 firstAddress: "tM2EDpVKaTiEg2NZg3yKg8eqjLr55BErHe",
543 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
544 firstPrivKey: "erKhxJJbpqMUuwuUwUuQxnLiNwphuEabA2sTv62QBV6syc1coTeS",
546 testNetwork(done, params);
548 it('Allows selection
of viacoin
', function(done) {
550 selectText: "VIA - Viacoin",
551 phrase: "abandon abandon ability",
552 firstAddress: "Vq9Eq4N5SQnjqZvxtxzo7hZPW5XnyJsmXT",
553 firstPubKey: "0223abcae630e23afd7ce0dc399906ca00f984b3be475fbf3f3995e708b0b75392",
554 firstPrivKey: "WX5sbp26uyFDa4Bt5DgPqvQuRjrwc95DYzG7ZHXsdtooFAUhd3xV",
556 testNetwork(done, params);
558 it('Allows selection
of viacoin testnet
', function(done) {
560 selectText: "VIA - Viacoin Testnet",
561 phrase: "abandon abandon ability",
562 firstAddress: "tM2EDpVKaTiEg2NZg3yKg8eqjLr55BErHe",
563 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
564 firstPrivKey: "erKhxJJbpqMUuwuUwUuQxnLiNwphuEabA2sTv62QBV6syc1coTeS",
566 testNetwork(done, params);
568 it('Allows selection
of jumbucks
', function(done) {
570 selectText: "JBS - Jumbucks",
571 phrase: "abandon abandon ability",
572 firstAddress: "JLEXccwDXADK4RxBPkRez7mqsHVoJBEUew",
573 firstPubKey: "02e9e84c68e2247d87c863f5697676af9c0f2dacc3fe774a24188f37311b679059",
574 firstPrivKey: "SPcmbuyWp5ukQLbnDyaVr8WuPfmLUEVZN9e2r7X96i31twrn8BBQ",
576 testNetwork(done, params);
578 it('Allows selection
of clam
', function(done) {
580 selectText: "CLAM - Clams",
581 phrase: "abandon abandon ability",
582 firstAddress: "xCp4sakjVx4pUAZ6cBCtuin8Ddb6U1sk9y",
583 firstPubKey: "03f6189ef4ae7f15ead1a579201c63845cf3efc4745d6abf58aa5584163b2dd070",
584 firstPrivKey: "LoqdpeyYzFoGqQag6Ya4BkMT9KQJK1ygQFbKj3x2meaWe6Xzen15",
586 testNetwork(done, params);
588 it('Allows selection
of crown
', function(done) {
590 selectText: "CRW - Crown (Legacy)",
591 phrase: "abandon abandon ability",
592 firstAddress: "18pWSwSUAQdiwMHUfFZB1fM2xue9X1FqE5",
593 firstPubKey: "034246d561c53eb1a2afbd9df6403d6fd8a70b36016e0307eae28095a465eaa602",
594 firstPrivKey: "L2oSEFimb9QJB38eGD1xL8zKZAa1cTYGFGXMi4yJBqKmYvpjcuJs",
596 testNetwork(done, params);
598 it('Allows selection
of crown
', function(done) {
600 selectText: "CRW - Crown",
601 phrase: "abandon abandon ability",
602 firstAddress: "CRWKnVmVhvH1KWTYe6sq8xV4dFGcFpBEEkPQ",
603 firstPubKey: "034246d561c53eb1a2afbd9df6403d6fd8a70b36016e0307eae28095a465eaa602",
604 firstPrivKey: "L2oSEFimb9QJB38eGD1xL8zKZAa1cTYGFGXMi4yJBqKmYvpjcuJs",
606 testNetwork(done, params);
608 it('Allows selection
of dash
', function(done) {
610 selectText: "DASH - Dash",
611 phrase: "abandon abandon ability",
612 firstAddress: "XdbhtMuGsPSkE6bPdNTHoFSszQKmK4S5LT",
613 firstPubKey: "0270009f37337f15603103ce90111f32f44ddd87525017a93ec6170abb784be2ff",
614 firstPrivKey: "XGqEiiVo1w6Us3YN8KRthyLxdnBH1W6JpLkcxoX2w2zQMYFDKSua",
616 testNetwork(done, params);
618 it('Allows selection
of dash testnet
', function(done) {
620 selectText: "DASH - Dash Testnet",
621 phrase: "abandon abandon ability",
622 firstAddress: "yaR52EN4oojdJfBgzWJTymC4uuCLPT29Gw",
623 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
624 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
626 testNetwork(done, params);
628 it('Allows selection
of game
', function(done) {
630 selectText: "GAME - GameCredits",
631 phrase: "abandon abandon ability",
632 firstAddress: "GSMY9bAp36cMR4zyT4uGVS7GFjpdXbao5Q",
633 firstPubKey: "03d173ea00b6688f7d7c2afdcbc720b227aa8b9b87e5f7145139acaa9f0a0dc447",
634 firstPrivKey: "Raixm9wAKFjw9rnPKcXkymQ5iEdMZBRdrvjm8zLpqacS7LUeXBwZ",
636 testNetwork(done, params);
638 it('Allows selection
of komodo
', function(done) {
640 selectText: "KMD - Komodo",
641 phrase: "abandon abandon ability",
642 firstAddress: "RMPPzJwAjPVZZAwJvXivHJGGjdCx6WBD2t",
643 firstPubKey: "03bd652582a446ce9a697e74da9429eabe6e70bbe3d300b9ef227df7430e83b6fc",
644 firstPrivKey: "UxHzU8KCfSDrQgreujv1vGrqpbvx5jrjSz7bNWjWoT7D3V4uWo4i",
646 testNetwork(done, params);
648 it('Allows selection
of namecoin
', function(done) {
650 selectText: "NMC - Namecoin",
651 phrase: "abandon abandon ability",
652 firstAddress: "Mw2vK2Bvex1yYtYF6sfbEg2YGoUc98YUD2",
653 firstPubKey: "0398066486fe87cbcb9da8e29d180b44937b6c43ad1ec4d3bddd77b7905765937e",
654 firstPrivKey: "TkJvbqVdNnGsCtFaV2nE8x3qqhYnYriRkGAB4747cEDRg9VUKKiz",
656 testNetwork(done, params);
658 it('Allows selection
of onixcoin
', function(done) {
660 selectText: "ONX - Onixcoin",
661 phrase: "abandon abandon ability",
662 firstAddress: "XGwMqddeKjT3ddgX73QokjVbCL3aK6Yxfk",
663 firstPubKey: "035349f2912e3290898d6e00807704254f256127e59a2930367c403b3b9ae5afbd",
664 firstPrivKey: "X8hzuyWvi2F6UQQ5MNiQo2taYwKwZvJRurTBV6smahx2ikLksLPm",
666 testNetwork(done, params);
668 it('Allows selection
of lkrcoin
', function(done) {
670 selectText: "LKR - Lkrcoin",
671 phrase: "abandon abandon ability",
672 firstAddress: "LfbT296e7AEEnn4bYDbL535Nd8P9g98CdJ",
673 firstPubKey: "03328d3800456372224ec54b033ace88bfd4c19a684204147404063839a02ab7e8",
674 firstPrivKey: "TANp1xRA3qCdRfZc8THM8HMKZivevNz8BEXmA8YxemqXj1YzHmDS",
676 testNetwork(done, params);
678 it('Allows selection
of bolivarcoin
', function(done) {
680 selectText: "BOLI - Bolivarcoin",
681 phrase: "abandon abandon ability",
682 firstAddress: "bbKzCAUR7hZ3nqfffy7VgrSz8LmAP3S5mK",
683 firstPubKey: "0328a72574c709cc183ffccb8f17c0383caf937ce67e7c3411cdf8ca2e5fc2bf8f",
684 firstPrivKey: "YYwA99QgwZu9zNJBxYbG43GzeE8kEREb7S1dpnFcBJG1W5sR1W9T",
686 testNetwork(done, params);
688 it('Allows selection
of peercoin
', function(done) {
690 selectText: "PPC - Peercoin",
691 phrase: "abandon abandon ability",
692 firstAddress: "PVAiioTaK2eDHSEo3tppT9AVdBYqxRTBAm",
693 firstPubKey: "02035b1d7f7683a03be1a6009c4572b24a3ba114afb8caff278881af77c4cba362",
694 firstPrivKey: "UCcQgeBjh7GpqukSRcXrx54Q41BJYkWY6PSdm6CtCUFYD5bS9qZS",
696 testNetwork(done, params);
698 it('Allows selection
of ethereum
', function(done) {
700 selectText: "ETH - Ethereum",
701 phrase: "abandon abandon ability",
702 firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772",
703 firstPubKey: "0x03e723e5b3aa7d72213f01139aa4783e1b34f74e1a04534e3fd8e29bfe2768af8a",
704 firstPrivKey: "0x8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7",
706 testNetwork(done, params);
708 it('Allows selection
of slimcoin
', function(done) {
710 selectText: "SLM - Slimcoin",
711 phrase: "abandon abandon ability",
712 firstAddress: "SNzPi1CafHFm3WWjRo43aMgiaEEj3ogjww",
713 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
714 firstPrivKey: "BTPTMvgoTgsAxpoQE4VCJAq5TYMnLbX5mDodFSaF7ceq6suK13pk",
716 testNetwork(done, params);
718 it('Allows selection
of slimcoin testnet
', function(done) {
720 selectText: "SLM - Slimcoin Testnet",
721 phrase: "abandon abandon ability",
722 firstAddress: "n3nMgWufTek5QQAr6uwMhg5xbzj8xqc4Dq",
723 firstPubKey: "024557a9693da0354c5f77e57a0b2aac9c20b15cc322bec85faa2ec45438415c90",
724 firstPrivKey: "DvJeEkHzJzysYFtUdgETgWHprG63ATFWRtG2R9xfBJ6bZ2fHcJSU",
726 testNetwork(done, params);
728 it('Allows selection
of bitcoin cash
', function(done) {
730 selectText: "BCH - Bitcoin Cash",
731 phrase: "abandon abandon ability",
732 firstAddress: "bitcoincash:qzlquk7w4hkudxypl4fgv8x279r754dkvur7jpcsps",
733 firstPubKey: "02b1cbe8aba996d77d4c33fa2e3bf1f6ae80576aa587aa74d87092b1dbdf2aa067",
734 firstPrivKey: "KxbCheZjSzF48zyka4QK1ToSYmz3REZiePU6FPc99qqFs8WuHyVY",
736 testNetwork(done, params);
739 it('Allows selection
of simpleledger(SLP
)', function(done) {
741 selectText: "SLP - Simple Ledger Protocol",
742 phrase: "abandon abandon ability",
743 firstAddress: "simpleledger:qrtffz6ajfsn74gpur7y3epjquz42pvww5acewqmre",
744 firstPubKey: "03c8310ef78a379ce91ed3d7998e1f356dbcb089869f9c9d8f8571b0d8414acbdc",
745 firstPrivKey: "L2q3Bvqe6kBRSqUaJpew7pLacnWjsJdUk7hwV1bTdDu665gXHDj6",
747 testNetwork(done, params);
750 it('Allows selection
of myriadcoin
', function(done) {
752 selectText: "XMY - Myriadcoin",
753 phrase: "abandon abandon ability",
754 firstAddress: "MJEswvRR46wh9BoiVj9DzKYMBkCramhoBV",
755 firstPubKey: "037ad798b3173b0af46acddd1501ed53ce654840f29e4710c3081134b1193f811b",
756 firstPrivKey: "TMMUiQ3yqes7wjWvCro1Ghbu7eFXm8wQgX89v4Wgxm5qFZJAVEVD",
758 testNetwork(done, params);
760 it('Allows selection
of pivx
', function(done) {
762 selectText: "PIVX - PIVX",
763 phrase: "abandon abandon ability",
764 firstAddress: "DBxgT7faCuno7jmtKuu6KWCiwqsVPqh1tS",
765 firstPubKey: "022583478df6a5ac35380e7cdcd9f7ab0d43f5eb82452d4aa1f74f04c810fcde8c",
766 firstPrivKey: "YVdYDdkuTbra4EVRLWoBUCCm9WMLuXZy3ZpK6iDBCi13ttreZ4cD",
768 testNetwork(done, params);
770 it('Allows selection
of pivx testnet
', function(done) {
772 selectText: "PIVX - PIVX Testnet",
773 phrase: "abandon abandon ability",
774 firstAddress: "yB5U384n6dGkVE3by5y9VdvHHPwPg68fQj",
775 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
776 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
778 testNetwork(done, params);
780 it('Allows selection
of maza
', function(done) {
782 selectText: "MAZA - Maza",
783 phrase: "abandon abandon ability",
784 firstAddress: "MGW4Bmi2NEm4PxSjgeFwhP9vg18JHoRnfw",
785 firstPubKey: "022b9d4376588a736d43301a659ef288302472aeff6344f5d8a5bfe376733e0da8",
786 firstPrivKey: "aH9R7KaHm6D3p44zDM2Vf6vY9x7bHVdaZGkBb2rHeXAZzEKnQ66G",
788 testNetwork(done, params);
790 it('Allows selection
of FIX
', function(done) {
792 selectText: "FIX - FIX",
793 phrase: "abandon abandon ability",
794 firstAddress: "FS5MEU8fs5dUvsaSCSusV8RQtC8j2h3JEh",
795 firstPubKey: "026003e9a2bc6b9bd18bd7f8826cebbfd4d0554995141920eda2cb723ae53337ee",
796 firstPrivKey: "9uFsoZFuCUCMRF93aNKsLvYTX8jwYoKPbgENtdYURH1GCJvDNkps",
798 testNetwork(done, params);
800 it('Allows selection
of FIX testnet
', function(done) {
802 selectText: "FIX - FIX Testnet",
803 phrase: "abandon abandon ability",
804 firstAddress: "XpnU1HHdNG5YxvG9Rez4wjmidchxqnZaNa",
805 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
806 firstPrivKey: "cBtMfPpQg4s1Ndfez7oLdedwu8CxshhWE5f7qunhLsY4ueNvKKyM",
808 testNetwork(done, params);
810 it('Allows selection
of fujicoin
', function(done) {
812 selectText: "FJC - Fujicoin",
813 phrase: "abandon abandon ability",
814 firstAddress: "FgiaLpG7C99DyR4WnPxXedRVHXSfKzUDhF",
815 firstPubKey: "022b41c7ecbae94c0c926dda9304ccf6e6b22f6f6879e2fc52823b154d118a290e",
816 firstPrivKey: "RMFbyVXUF5Ndji4H75jXrnXi9KH6QFKgA6zDfuisa57BrHCN8MSG",
818 testNetwork(done, params);
820 it('Allows selection
of nubits
', function(done) {
822 selectText: "USNBT - NuBits",
823 phrase: "abandon abandon ability",
824 firstAddress: "BLxkabXuZSJSdesLD7KxZdqovd4YwyBTU6",
825 firstPubKey: "03a37da71e839af0e3fc7cef0f3a82fbff64e372eb7fd067dc452d13b7b269e858",
826 firstPrivKey: "PJ9vZVjQWXNQDbfZbmFiDTcUGpJHiWc923LcX7oKSYHuLRvWhdJ3",
828 testNetwork(done, params);
830 it('Allows selection
of bitcoin gold
', function(done) {
832 selectText: "BTG - Bitcoin Gold",
833 phrase: "abandon abandon ability",
834 firstAddress: "GdDqug4WUsn5syNbSTHatNn4XnuwZtzedx",
835 firstPubKey: "02e48e4053db573bb74fb67a47c91443ec7c0ed5f3f25aa8a408bad798f0230086",
836 firstPrivKey: "KwxCxhXq72JzuDNEj2VzzjKr1XU4tvpuksdEKBhngFuSEK8XWCBa",
838 testNetwork(done, params);
840 it('Allows selection
of monacoin
', function(done) {
842 selectText: "MONA - Monacoin",
843 phrase: "abandon abandon ability",
844 firstAddress: "MKMiMr7MyjDKjJbCBzgF6u4ByqTS4NkRB1",
845 firstPubKey: "020b104320aaeb1ec921874e96cafd5add3c0de8d785cd01dc93e5f2b31fa352f4",
846 firstPrivKey: "T45jYrkbSutUvNF1cytpmbvyLR7qWWEXg5r7udj4mqrauzEsxHAG",
848 testNetwork(done, params);
850 it('Allows selection
of AXE
', function(done) {
852 selectText: "AXE - Axe",
853 phrase: "abandon abandon ability",
854 firstAddress: "PScwtLUyPiGrqtKXrHF37DGETLXLZdw4up",
855 firstPubKey: "0288ea360af543ff72c79560f9f0ed8ed5386681fc3cc5edc84921c1118d989bce",
856 firstPrivKey: "XJKs1GN3sABamT6daKdRSjBgE2XPrnwBurWyBSVJht6zv5kS2dZd",
858 testNetwork(done, params);
860 it('Allows selection
of BlackCoin
', function(done) {
862 selectText: "BLK - BlackCoin",
863 phrase: "abandon abandon ability",
864 firstAddress: "B5MznAKwj7uQ42vDz3w4onhBXPcqhTwJ9z",
865 firstPubKey: "03f500b73bad9955fbe26a27bbeefa4ec00119532449eeccfb1f021cafa638d046",
866 firstPrivKey: "Piyy1AGXZ9wRJdiUMPm97WAmN1DHvSxtjCpkYrtX2qyvc4huUxe9",
868 testNetwork(done, params);
870 it('Allows selection
of Neblio
', function(done) {
872 selectText: "NEBL - Neblio",
873 phrase: "abandon abandon ability",
874 firstAddress: "NefkeEEvhusbHMmTRrxx7H9wFnUXd8qQsE",
875 firstPubKey: "0274d827c4aef5b009e0c5ddd3c852a9a0bd91cb37cfb72a5f07d570e4ce7e1569",
876 firstPrivKey: "TpEwnrinfiH7AMDJLvFzNoW1duU2rg7hox6tgF4wMmcnQSmNmQZM",
878 testNetwork(done, params);
880 it('Allows selection
of Beetlecoin
', function(done) {
882 selectText: "BEET - Beetlecoin",
883 phrase: "abandon abandon ability",
884 firstAddress: "BVmtbEsGrjpknprmpHFq26z4kYHJUFHE71",
885 firstPubKey: "03e8e78daa2d96e390b55426d6b4cad887bdc028a394847308ad4910d00875b04c",
886 firstPrivKey: "Pkb5yU9mK1CzSQuYKm6CYmaJxDEiycipm426F3EhYtHPJdBJxViG",
888 testNetwork(done, params);
890 it('Allows selection
of Adcoin
', function(done) {
892 selectText: "ACC - Adcoin",
893 phrase: "abandon abandon ability",
894 firstAddress: "AcEDM6V5sF4kFHC76MJjjfProtS5Sw2qcd",
895 firstPubKey: "026625ec7d1b747bd361a57c593fd8384fcdc65696aed5b72f64e73dbf2b24e854",
896 firstPrivKey: "T4B9YVUonpM7tQQEkqv4QjMxWJqxyqcJt78H7XqsRXRvuvd2XGog",
898 testNetwork(done, params);
900 it('Allows selection
of Asiacoin
', function(done) {
902 selectText: "AC - Asiacoin",
903 phrase: "abandon abandon ability",
904 firstAddress: "ALupuEEz7kJjQTAvmtcBMBVuEjPa7GqZzE",
905 firstPubKey: "0338b40a58e69c087f5092223555c1ce48988e5b2b6bb15f42d881109aa1499d39",
906 firstPrivKey: "PNRyYtznRQBbD3GNCt86uHdWEHyeFr7ZszqckXCt7ZXEcRF29Z4X",
908 testNetwork(done, params);
910 it('Allows selection
of Aryacoin
', function(done) {
912 selectText: "ARYA - Aryacoin",
913 phrase: "abandon abandon ability",
914 firstAddress: "Abr6gX25KaU9BpwD34UfsL3A4n89NvYYSf",
915 firstPubKey: "03973c0669f332a69e8f0661ffddc7fd86dd7fdb768a40608fcbf0efceebf900e0",
916 firstPrivKey: "PNukdY6bBGJhFDnJGeRFrJ5ptj3WD1xZHbPv8ubjMknFz2L6sZFi",
918 testNetwork(done, params);
920 it('Allows selection
of Cosmos Hub
', function(done) {
922 selectText: "ATOM - Cosmos Hub",
923 phrase: "abandon abandon ability",
924 firstAddress: "cosmos17mkch9syem8gtf6wh7p38thdgav6dwezpkylny",
925 firstPubKey: "cosmospub1addwnpepq0sgn66ty4suk5vx3hsmxxqd5z3amegqwlu59funrzyz5u8r9758qhl84ys",
926 firstPrivKey: "zUnETPxmE2vkHzLHTAlO9wg8PL/GEEBc1I4yVwvSV8M=",
928 testNetwork(done, params);
930 it('Allows selection
of Auroracoin
', function(done) {
932 selectText: "AUR - Auroracoin",
933 phrase: "abandon abandon ability",
934 firstAddress: "ANuraS6F4Jpi413FEnavjYkKYJJRHkgYCm",
935 firstPubKey: "03f843b9258aa001f24ebe3a77b6746a20ffda9f60934da8ed44f83d081977fe4b",
936 firstPrivKey: "PQyDA9ewjeMNvNy6ZaUEWVwTNHFPp2J3F131msPx4XFNgMuKMaXF",
938 testNetwork(done, params);
940 it('Allows selection
of Bata
', function(done) {
942 selectText: "BTA - Bata",
943 phrase: "abandon abandon ability",
944 firstAddress: "BGxBdNeYPtF3GCuTtZBPQdFxCkdBYSF3fj",
945 firstPubKey: "033f35cba191c80f5246113ef33cd8a1e2449d304ad25afbd25e86aff333f07472",
946 firstPrivKey: "RKbjo1gnyFsuEimVGGybBfbvcp6fCCY35D9SY38xLAwrSrQ3B5v9",
948 testNetwork(done, params);
950 it('Allows selection
of Belacoin
', function(done) {
952 selectText: "BELA - Belacoin",
953 phrase: "abandon abandon ability",
954 firstAddress: "BEeetqpNffdzeknSpNmQp5KAFh2KK1Qx7S",
955 firstPubKey: "039d895165f9c8218c12499820b783d920b632b49b0ca70b9352171b2f4273bf0b",
956 firstPrivKey: "PeicG333UdMZ1t5PoHCt2Yepc7X15wHPawvsusWWspKCw99Dfqmx",
958 testNetwork(done, params);
960 it('Allows selection
of Bitcoin Atom
', function(done) {
962 selectText: "BCA - Bitcoin Atom",
963 phrase: "abandon abandon ability",
964 firstAddress: "AMy6qMbJeC4zsGRL6iWszmeCdQH65fgfih",
965 firstPubKey: "02efe1e4f85342c8c57c4d6e6f48758f7be4e059d61586f769e33dd5bf0aa78a04",
966 firstPrivKey: "Ky4hiMBLXZEj3TFknsuvceh16ttBfw9U7ReMgGWBtoYg1LPuxxUq",
968 testNetwork(done, params);
970 it('Allows selection
of Bitcoinplus
', function(done) {
972 selectText: "XBC - Bitcoinplus",
973 phrase: "abandon abandon ability",
974 firstAddress: "B7FSynZoDbEwTCSgsXq9nJ5ue8owYLVL8r",
975 firstPubKey: "03ca81fbc766f6a38c7d122facd68c87ceeb57a0ee7d58927132a77704dfe88f92",
976 firstPrivKey: "Pjjssfh7oJnFZfcxxooUvUqqxtb35oiurrDm3rEHCGpyCW1tPEG2",
978 testNetwork(done, params);
980 it('Allows selection
of Bitcoin Private
', function(done) {
982 selectText: "BTCP - Bitcoin Private",
983 phrase: "abandon abandon ability",
984 firstAddress: "b1M3PbiXXyN6Hdivdw5rJv5VKpLjPzhm4jM",
985 firstPubKey: "03b4dae910c8563ae77e4c665022f8afbf8bcc659ce3bc790a74956e5ebba932af",
986 firstPrivKey: "L5U3Rfy7otN5JQP9iveYkT1pB9va71uebx7VE8reBbiAofKCiCxk",
988 testNetwork(done, params);
990 it('Allows selection
of Bitcoin SV
', function(done) {
992 selectText: "BSV - BitcoinSV",
993 phrase: "abandon abandon ability",
994 firstAddress: "1N4mgtE5yxifch9jWs7Sds6oVqxdy2t576",
995 firstPubKey: "0280bbf3fd6f1c7ab4b04cca0ab6e23487fafa9c5edea3d1882d8e967111ee8b38",
996 firstPrivKey: "L3oBCYKNpT6uc5qeYGN9NFNyvQsTUGBV7v2cqeB76GfWzuGJDYeY",
998 testNetwork(done, params);
1000 it('Allows selection
of Bitcoinz
', function(done) {
1002 selectText: "BTCZ - Bitcoinz",
1003 phrase: "abandon abandon ability",
1004 firstAddress: "t1X2YQoxs8cYRo2oaBYgVEwW5QNjCC59NYc",
1005 firstPubKey: "033eb18e80984fa3fbaeee1096977d6b169399123641dc97ceba00910c8ad211d4",
1006 firstPrivKey: "L1qcDeAXPxMSgnXvquJo5Dd4myFxxxrWNgi99Ns26GPNyRW7eVuZ",
1008 testNetwork(done, params);
1010 it('Allows selection
of BitCloud
', function(done) {
1012 selectText: "BTDX - BitCloud",
1013 phrase: "abandon abandon ability",
1014 firstAddress: "BHbWitXCNgTf1BhsRDNMP186EeibuzmrBi",
1015 firstPubKey: "032ca47d6a35bd01ba3832791bcb0ee5676b1a63a491b42c39a4b214d78bf64fd3",
1016 firstPrivKey: "PgTZBt9exdzZSWfhdwXKVmz5WBFjAJFjNLa9552FCx1X6mnztNSL",
1018 testNetwork(done, params);
1020 it('Allows selection
of Bitcore
', function(done) {
1022 selectText: "BTX - Bitcore",
1023 phrase: "abandon abandon ability",
1024 firstAddress: "2Rgp5Znhpy34TK4QmPkfCiYs9r4KovfTH9",
1025 firstPubKey: "02caa73ee839b074c8d353f6869222bafd8ce5ad3bcb1c0bd404d108390b2a6438",
1026 firstPrivKey: "L4286qDXUJfVq4ebbHHUVDoFpEudJj81FUWkjwNeQ132gFCDGUBj",
1028 testNetwork(done, params);
1030 it('Allows selection
of Bitsend
', function(done) {
1032 selectText: "BSD - Bitsend",
1033 phrase: "abandon abandon ability",
1034 firstAddress: "iBPk7LYjDun3EPk7CRR8UUmnPoceVc1bp2",
1035 firstPubKey: "03e6b12ed885225302fc126980e42abfee1c3350b77b61b01abcf200b5e9a9fee5",
1036 firstPrivKey: "XCTxjfV68KfXKySGJyZTYvYMBDFKSPJu41W3SN1bRpJch5R498mC",
1038 testNetwork(done, params);
1040 it('Allows selection
of Britcoin
', function(done) {
1042 selectText: "BRIT - Britcoin",
1043 phrase: "abandon abandon ability",
1044 firstAddress: "B6Aue4J2XLs1f1dtD4H1SHYFfh4XrmEbrw",
1045 firstPubKey: "035dee3aad6f635aeffe61a28e82a58271b984d20cc3766f63d9acb29ecee91d3f",
1046 firstPrivKey: "PdyPdAngoD42Pe5qCd2en6nS1j4rqVyH6cFGkCDEu2nEMt8DHsoz",
1048 testNetwork(done, params);
1050 it('Allows selection
of Canadaecoin
', function(done) {
1052 selectText: "CDN - Canadaecoin",
1053 phrase: "abandon abandon ability",
1054 firstAddress: "CanAyCfd5Rj2CQVfaoAmvDUZunPM5W1AEQ",
1055 firstPubKey: "03124e22733a75beba1e4f2635d08e034772bf6cbe8102404226a9402e135ff7f6",
1056 firstPrivKey: "QCEMYNRcKqGgYXhxDNZfrF9m8sqd28NujXpjDNuN7r525rrXPnLm",
1058 testNetwork(done, params);
1060 it('Allows selection
of Cannacoin
', function(done) {
1062 selectText: "CCN - Cannacoin",
1063 phrase: "abandon abandon ability",
1064 firstAddress: "CYjW8xWB43g6krLJTmmrPk1PonoQX7h9Qd",
1065 firstPubKey: "03bd05a584f418aa8d65a05c7bcc301eb552f67aa380f15e4b29c0b8eec698b443",
1066 firstPrivKey: "QAM1aUWMGEDdcDsgaPQKXcMe8Z3vEfDaPSds3wTFz8USQ3yht7Kk",
1068 testNetwork(done, params);
1070 it('Allows selection
of Clubcoin
', function(done) {
1072 selectText: "CLUB - Clubcoin",
1073 phrase: "abandon abandon ability",
1074 firstAddress: "CHMDEXN4sihpSVX4GyAa2hZ62shnby7uyN",
1075 firstPubKey: "0356187f1336ac2e340145478f02024ce1c318e3648cbba38262afbde7f2dc0055",
1076 firstPrivKey: "PeJx6v8h1N6GvTj7VkK7vWqjdWJb4QXzfrDgJjFao8bkpRrDiymm",
1078 testNetwork(done, params);
1080 it('Allows selection
of Compcoin
', function(done) {
1082 selectText: "CMP - Compcoin",
1083 phrase: "abandon abandon ability",
1084 firstAddress: "CLshtw3zhxkseBJS46UF12v3AFy9Dx7JVv",
1085 firstPubKey: "027d1b4f1798882b8978eb3ab0e8b503aa1fb4cf058e0086cf25326fb6a8751aae",
1086 firstPrivKey: "QDq6KKEdmrzHbZHmgzsGcweUFwYA7mVvvfeAKsPSxfxHNv73ETr7",
1088 testNetwork(done, params);
1090 it('Allows selection
of CPUchain
', function(done) {
1092 selectText: "CPU - CPUchain",
1093 phrase: "abandon abandon ability",
1094 firstAddress: "CWSpLpW7jS4mBHJnkz3mmL5s3yQMg93zK8",
1095 firstPubKey: "0390845eef5c5993069211f94d9f3990c27c380700bb92ae629d2a5afae1c08806",
1096 firstPrivKey: "L378gxzvUEX9JUFnfXBik2H4gV7XM4dzXWKM9rvR8UZr2rBphL1t",
1098 testNetwork(done, params);
1100 it('Allows selection
of Crave
', function(done) {
1102 selectText: "CRAVE - Crave",
1103 phrase: "abandon abandon ability",
1104 firstAddress: "VCYJeti6uKMNBFKCL7eP96UwuFWYHM7c85",
1105 firstPubKey: "02c8938f30cc46013706586753d6dca3e4ac6b7d6924dfc35d444c3605f35da4c7",
1106 firstPrivKey: "PjRdEuhRZ6rufXAdU6amoaPDRZamWmxN46qbmSPyqUKsJzChCjZT",
1108 testNetwork(done, params);
1110 it('Allows selection
of Defcoin
', function(done) {
1112 selectText: "DFC - Defcoin",
1113 phrase: "abandon abandon ability",
1114 firstAddress: "D8swcgyaaFUrXZU3ATwbgy16buCpWqbG1M",
1115 firstPubKey: "02d02cc83ddfaa5aed4fb9b611b504cccbfa8397485411f16816fc28dccb51e609",
1116 firstPrivKey: "QSRhMr1B4tt7DEcgxji6NrEfS51wQ6GypfMkqgNDHuWVKo2RzTac",
1118 testNetwork(done, params);
1120 it('Allows selection
of Diamond
', function(done) {
1122 selectText: "DMD - Diamond",
1123 phrase: "abandon abandon ability",
1124 firstAddress: "dJnrVbLL9UPjdaVRz2C8VpqHZknqAqjLek",
1125 firstPubKey: "03750645ffc120a0ffda07f01b0cc0d321bccf02eaedc98907672d78f2b2ef20d6",
1126 firstPrivKey: "ZKnjDNkhgCwRs8KV5Mf33k1USiiiP8AuXKM2xR4zhd3PAhtVmkEg",
1128 testNetwork(done, params);
1130 it('Allows selection
of Digibyte
', function(done) {
1132 selectText: "DGB - Digibyte",
1133 phrase: "abandon abandon ability",
1134 firstAddress: "D85Rp9jwLtMdmP6wGjTiqHBdVQLST3YCEq",
1135 firstPubKey: "02f86cc0afd113956e995fb9cbe33b68e59e9175c0c89419efc4031f2e3c128288",
1136 firstPrivKey: "L1w9pD4XodykLEJxiK1R9SVELpftD9x1QtGjHEb1nWviAvYVZbwv",
1138 testNetwork(done, params);
1140 it('Allows selection
of Digitalcoin
', function(done) {
1142 selectText: "DGC - Digitalcoin",
1143 phrase: "abandon abandon ability",
1144 firstAddress: "DKw4UGKEAZWweDNEbBFNQx4EM8x1mpUdia",
1145 firstPubKey: "02148710e3f09fa9e108bd90a3d53e0eeea9b6ee929c4668a7d64732e3fc839ff7",
1146 firstPrivKey: "QVBstKEkSbT4M9aDbBTkqJkpLCaGjL5zYSiiufHwMxGCn2dunbYL",
1148 testNetwork(done, params);
1150 it('Allows selection
of Ecoin
', function(done) {
1152 selectText: "ECN - Ecoin",
1153 phrase: "abandon abandon ability",
1154 firstAddress: "e6WFPLG5gcXyF7cESFteH1hE2XSmowW5yB",
1155 firstPubKey: "03a74536710cba6aa02b543f1ac4a76d241b47a96e38cfd002eb975cdef4b9ec19",
1156 firstPrivKey: "ZZPUTdAqpJ3s6S6xe2RpZD3jyEqwGk5MRkJHSpar1rESp4BFEqLV",
1158 testNetwork(done, params);
1160 it('Allows selection
of Edrcoin
', function(done) {
1162 selectText: "EDRC - Edrcoin",
1163 phrase: "abandon abandon ability",
1164 firstAddress: "eh1nUJsvgKPFv6ebMBfcwJ299GMCpjeZUG",
1165 firstPubKey: "02b541bdd9ff6ffc03ec4749dbe1a8a4ac8b02dc528758acac43eb1f38b5f48f27",
1166 firstPrivKey: "ZjZir6LUrg6A8WqcCeCeM249TGCxJcgGkEL6VefJJV1mGsGb7MEb",
1168 testNetwork(done, params);
1170 it('Allows selection
of Egulden
', function(done) {
1172 selectText: "EFL - Egulden",
1173 phrase: "abandon abandon ability",
1174 firstAddress: "Lg66yt55R7edRM58cDhKzXik2kFme3viX7",
1175 firstPubKey: "02d8d54be535836e70b9feed7a2502c026d714894342746f15d21c6bc80e1f97e4",
1176 firstPrivKey: "T7NPtpaVXs7SBfsCzp3ooadkctNqcZW6HpNHeT3U8EAXc6NtDJ4c",
1178 testNetwork(done, params);
1180 it('Allows selection
of Einsteinium
', function(done) {
1182 selectText: "EMC2 - Einsteinium",
1183 phrase: "abandon abandon ability",
1184 firstAddress: "EVAABm9hXKHk2MpVMbwNakRubFnNha5m8m",
1185 firstPubKey: "02826e69c802fbf71ca8e7daf9fdac2e371b86847b5397422997785cefb973269b",
1186 firstPrivKey: "QwySA5DiFKbvMcm7H3xXfsDUdq1Q5RPYjBAcLjZKkESxmJMXBvL2",
1188 testNetwork(done, params);
1190 it('Allows selection
of EOSIO
', function(done) {
1192 selectText: "EOS - EOSIO",
1193 phrase: "abandon abandon ability",
1194 firstPubKey: "EOS692VJTBK3Rmw93onNnpnZ8ZtmE9PdxjDStArvbyzoe11QUTNoy",
1195 firstPrivKey: "5Jef4qXr3nF8cjudHNQBaComNB653dnQX4pWec32xXRVThBLiCM",
1197 testNetwork(done, params);
1199 it('Allows selection
of Europecoin
', function(done) {
1201 selectText: "ERC - Europecoin",
1202 phrase: "abandon abandon ability",
1203 firstAddress: "ESA2YwPYntAoaPrE8Fm5qkKRtkcwLcwD6R",
1204 firstPubKey: "038f16d567cdefac2813b64d465f5cd8d6d59df9dfe4d16302a19b5e0b7179d685",
1205 firstPrivKey: "RzXndDAzJ4Wft6HXkpopV7vRnRBeVw2o6dKp44FYQgriYWngseBu",
1207 testNetwork(done, params);
1209 it('Allows selection
of Exclusivecoin
', function(done) {
1211 selectText: "EXCL - Exclusivecoin",
1212 phrase: "abandon abandon ability",
1213 firstAddress: "EbUa6m8UZW6nTxsYZD2FsDjkadKbp5M6JT",
1214 firstPubKey: "0291a6b82197e13aa2fd65bd1f2a6e905a9a2baaa36dfb5da10690022f7f9e998d",
1215 firstPrivKey: "Qu6pr1srXmEFzWSa4Ry1sjV6qDj4TEf4q2CxHBSRByiSBLsm967z",
1217 testNetwork(done, params);
1219 it('Allows selection
of Feathercoin
', function(done) {
1221 selectText: "FTC - Feathercoin",
1222 phrase: "abandon abandon ability",
1223 firstAddress: "6gDdjAMoSgQaW8UhqK3oboHs6ftGAroKkM",
1224 firstPubKey: "02e9f5c37fba2b6457f3c59de5bf5be2efe524751a682a47765825cb9d82d339f3",
1225 firstPrivKey: "N5487NUGCd1JnWzZzhjX1uu6SNGnpQKjeWuK6Y1NzNHjGaLysCdi",
1227 testNetwork(done, params);
1229 it('Allows selection
of FIO
', function(done) {
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",
1236 testNetwork(done, params);
1238 it('Allows selection
of Firo
', function(done) {
1240 selectText: "FIRO - Firo (Zcoin rebrand)",
1241 phrase: "abandon abandon ability",
1242 firstAddress: "a6VcMdP4XgAA9Tr7xNszmPG5FZpfRf17Cq",
1243 firstPubKey: "0236f2348c32dc62d69488b01988ed1154df261723ec60461cb6e62189984c62db",
1244 firstPrivKey: "Y8k3XQRQrJoABEao4Sw45s744g6xth7yviNqFcN7zqPqKUJrrKTQ",
1246 testNetwork(done, params);
1248 it('Allows selection
of Zcoin
', function(done) {
1250 selectText: "XZC - Zcoin (rebranded to Firo)",
1251 phrase: "abandon abandon ability",
1252 firstAddress: "a6VcMdP4XgAA9Tr7xNszmPG5FZpfRf17Cq",
1253 firstPubKey: "0236f2348c32dc62d69488b01988ed1154df261723ec60461cb6e62189984c62db",
1254 firstPrivKey: "Y8k3XQRQrJoABEao4Sw45s744g6xth7yviNqFcN7zqPqKUJrrKTQ",
1256 testNetwork(done, params);
1258 it('Allows selection
of Firstcoin
', function(done) {
1260 selectText: "FRST - Firstcoin",
1261 phrase: "abandon abandon ability",
1262 firstAddress: "FJN9GzfMm7Q8R4DJwK1H9F6A1GTghvFiMJ",
1263 firstPubKey: "029300108c006d1dc75847fece915138747b7bc17b515eae7458da98d2f14d7178",
1264 firstPrivKey: "RDxAN3n3k2dEZ4Ln3bbozzZ3Jgg7CQdgzYDCURmPghKQdzctX7ck",
1266 testNetwork(done, params);
1268 it('Allows selection
of Flashcoin
', function(done) {
1270 selectText: "FLASH - Flashcoin",
1271 phrase: "abandon abandon ability",
1272 firstAddress: "UWfpf5LfMmLxZYooEb2EyvWhZ8NG7EZDRt",
1273 firstPubKey: "032d55eae8073e75f02e9674b0ac3f69190ad359ad37ee4c4c11d12bcfee13d439",
1274 firstPrivKey: "W6pedhBW35Twq8ZmgTQi7sHx6wczQanSk2FUpcFWtgEW29jowsvi",
1276 testNetwork(done, params);
1278 it('Allows selection
of GCRCoin
', function(done) {
1280 selectText: "GCR - GCRCoin",
1281 phrase: "abandon abandon ability",
1282 firstAddress: "GJjF5cLwyXLacpuvXAVksxGxKvHDjx58d6",
1283 firstPubKey: "0356187f1336ac2e340145478f02024ce1c318e3648cbba38262afbde7f2dc0055",
1284 firstPrivKey: "Pntag5VbBX1Qtyjt3pi1igwDswWEtpoiqHqosBbgHcMU6m2e7t9J",
1286 testNetwork(done, params);
1288 it('Allows selection
of Gobyte
', function(done) {
1290 selectText: "GBX - Gobyte",
1291 phrase: "abandon abandon ability",
1292 firstAddress: "GS813Ys2brkmvSUw1rUqGPm2HqQVDHJRyA",
1293 firstPubKey: "036f84f44e4c8bffe039c2d9da087b006ebbfcdcf24b32a6434b2fad708ef00ae0",
1294 firstPrivKey: "WLiSrhfqRwgNmw7rhGHFoXLEuNGXxQYuKb9PK84AZmTfiHN9dz22",
1296 testNetwork(done, params);
1298 it('Allows selection
of Gridcoin
', function(done) {
1300 selectText: "GRC - Gridcoin",
1301 phrase: "abandon abandon ability",
1302 firstAddress: "SGrWbBPvobgqKRF8td1Kdc9vbRY7MJ78Y9",
1303 firstPubKey: "0377436f8c4c4d96d5ddfe6875abeb589deec595331b9a915b7e8d81a4134926ce",
1304 firstPrivKey: "V7h5EhRuWGM8uqAouxHr9uNt8ZLCQ7kmpA27tvKDbUE3zBarH81n",
1306 testNetwork(done, params);
1308 it('Allows selection
of Gulden
', function(done) {
1310 selectText: "NLG - Gulden",
1311 phrase: "abandon abandon ability",
1312 firstAddress: "GcDP7cNEc33MPPdTFNJ8pZc6VMZJ2CbKxY",
1313 firstPubKey: "03ff51002146450eb68f294dbe34f3e208f8694b51079f81e3f7dbd403cc10df41",
1314 firstPrivKey: "Fc6gU4tscBk3pybMWU1ajS1tLvNerXC24hQJ1F944QqdgSSrr3XW",
1316 testNetwork(done, params);
1318 it('Allows selection
of Helleniccoin
', function(done) {
1320 selectText: "HNC - Helleniccoin",
1321 phrase: "abandon abandon ability",
1322 firstAddress: "LbHEKe5H72zp9G1fuWNiiNePTUfJb88915",
1323 firstPubKey: "02e602000d65b969ac27172297ee907684bfc606f457ef0bad62c229edb17d5cb2",
1324 firstPrivKey: "T6JEq9jKLvztjhg4tJMezy1L4NjnMfLDZJe1egVzPBU3Q5XPBFrz",
1326 testNetwork(done, params);
1328 it('Allows selection
of Hempcoin
', function(done) {
1330 selectText: "THC - Hempcoin",
1331 phrase: "abandon abandon ability",
1332 firstAddress: "H8sdWbZyJV4gyXyHtLXDaNnAuUDhK5mfTV",
1333 firstPubKey: "02e40aaa6bf20e32d9f5976f57e9bf7a8f75db36b96a9033c20b681c9d9454b617",
1334 firstPrivKey: "Ry5Dg2yR32uhbrPLdNmsK1TRbZ1bHLvFp7kcPgeMzVPN6ycu9Jj5",
1336 testNetwork(done, params);
1338 it('Allows selection
of Insane
', function(done) {
1340 selectText: "INSN - Insane",
1341 phrase: "abandon abandon ability",
1342 firstAddress: "iMPqEJMiXWuxC9U2NVinCCMr4t72h58EWx",
1343 firstPubKey: "036ec4cf4b92300f12ff824b1eca775b27b1a728f6b57c6354ce791fd8ea0f3497",
1344 firstPrivKey: "9HA4X5kXWKxLjybjko8Z5wDo19UUJKroRrZ1BuKCtsfcfNB48K61",
1346 testNetwork(done, params);
1348 it('Allows selection
of Iop
', function(done) {
1350 selectText: "IOP - Iop",
1351 phrase: "abandon abandon ability",
1352 firstAddress: "pGKQmcaPf95Ur5o6oHK4qdiZ52p1yaTvq1",
1353 firstPubKey: "02bbaa07f154d04b04dec0978a1655952e1a09a3c0e7798085902273965d93c2f6",
1354 firstPrivKey: "8MDnKDhVSp84AqzYN5g18MhMvHk3UMYnP51EVjidSas1pT62Sdpc",
1356 testNetwork(done, params);
1358 it('Allows selection
of Ixcoin
', function(done) {
1360 selectText: "IXC - Ixcoin",
1361 phrase: "abandon abandon ability",
1362 firstAddress: "xgE9bTZ6YypT3E6ByzkTt31Hq68E9BqywH",
1363 firstPubKey: "0257766cea209cf52ba08776b6dfa263a4759e1e148f25d0cab3a91a60b6a52062",
1364 firstPrivKey: "KxdDep6zGCWoRt6arat5DVR5s6a8vmZtuekwHafEwRc7VGxfeD4Y",
1366 testNetwork(done, params);
1368 it('Allows selection
of Kobocoin
', function(done) {
1370 selectText: "KOBO - Kobocoin",
1371 phrase: "abandon abandon ability",
1372 firstAddress: "FTVoNJETXDAM8x7MnmdE8RwWndSr9PQWhy",
1373 firstPubKey: "0225753a5e232b384dce73b58d25fb90172faaf4c83a8850189abd8cae86495601",
1374 firstPrivKey: "R7u1uvHmVGkGqjURaNoppFjPNBzPYt37QwttrJc6F2K1WRm1zKoQ",
1376 testNetwork(done, params);
1378 it('Allows selection
of Landcoin
', function(done) {
1380 selectText: "LDCN - Landcoin",
1381 phrase: "abandon abandon ability",
1382 firstAddress: "LLvLwNjG1aJcn1RS4W4GJUbv8fNaRATG7c",
1383 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
1384 firstPrivKey: "T8rHy2tA1yykFgCpr6KrgcrhqbevpxG923qSZbJHALYGwy3M3qAw",
1386 testNetwork(done, params);
1388 it('Allows selection
of Library Credits
', function(done) {
1390 selectText: "LBC - Library Credits",
1391 phrase: "abandon abandon ability",
1392 firstAddress: "bQJEQrHDJyHdqycB32uysh1SWn8Ln8LMdg",
1393 firstPubKey: "02abd5018c033f59f49f28ee76d93c41323890928e25c171ccc7c61ed753cde8ad",
1394 firstPrivKey: "5CWjkFs7be8vPa3CZEodPDsMDSbvyT9gAC1n1w83znRz4poNK5nZ",
1396 testNetwork(done, params);
1398 it('Allows selection
of Linx
', function(done) {
1400 selectText: "LINX - Linx",
1401 phrase: "abandon abandon ability",
1402 firstAddress: "XGWQ3cb3LGUB3VnHmj6xYSMgnokNbf6dyk",
1403 firstPubKey: "0232edeec8e3e021b53982a01943dea4398e9cc4b177c5483cf0e7774be41ea094",
1404 firstPrivKey: "X8YJFxPPmwyCBQ7Rp5bqn3V8U9rsaba5Tftsh3j8qZX9hjTTURgL",
1406 testNetwork(done, params);
1408 it('Allows selection
of Litecoincash
', function(done) {
1410 selectText: "LCC - Litecoincash",
1411 phrase: "abandon abandon ability",
1412 firstAddress: "Ce5n7fjUuQPLutJ4W5nCCfQLKdKLE1mv9A",
1413 firstPubKey: "033af2daadddcc976ea61023783b350f9b1ac45a056dba2d3b8c6ceec9d5817a8d",
1414 firstPrivKey: "T6qztYVwa6onx5HjCB3XZcCtegpUjVKtocRCQ8daWj2b8tbrDZqp",
1416 testNetwork(done, params);
1418 it('Allows selection
of Lynx
', function(done) {
1420 selectText: "LYNX - Lynx",
1421 phrase: "abandon abandon ability",
1422 firstAddress: "KUeY3ZdZkg96p4W98pj1JjygCFU1XqWdw3",
1423 firstPubKey: "0340435307cc0831d85adb70ceb518297cdebee8f25574d8eca0ff94e35fa759da",
1424 firstPrivKey: "SdwVFsLjH2wbWziEZTLPQ2iCBrt9vXHWr7X333RbFZG7hZg88u5V",
1426 testNetwork(done, params);
1428 it('Allows selection
of Megacoin
', function(done) {
1430 selectText: "MEC - Megacoin",
1431 phrase: "abandon abandon ability",
1432 firstAddress: "MDfAj9CzkC1HpcUiVGnHp8yKTa7WXgu8AY",
1433 firstPubKey: "02e560b00165c939ba08f5096201794a32e6de66216cdc5763472abf09a5e62380",
1434 firstPrivKey: "TSw7if5qV6HzW2hKhPjVvQBVUXt5aD17mM34PkueLrHQiXwMwcp4",
1436 testNetwork(done, params);
1438 it('Allows selection
of Minexcoin
', function(done) {
1440 selectText: "MNX - Minexcoin",
1441 phrase: "abandon abandon ability",
1442 firstAddress: "XC1VnyJVfiMDwWgFtAHDp41cgY3AHk3dJT",
1443 firstPubKey: "0232a31bee17b806941c419cea385d427f0d6c6fbd564fb2f366faa008aa15822c",
1444 firstPrivKey: "KzouDFGCydewfP2pGdGv62vwP7KBtaaSgBW28B94YuksV5y8jGyE",
1446 testNetwork(done, params);
1448 it('Allows selection
of Navcoin
', function(done) {
1450 selectText: "NAV - Navcoin",
1451 phrase: "abandon abandon ability",
1452 firstAddress: "NTQVTPK3NWSQLKoffkiQw99T8PifkF1Y2U",
1453 firstPubKey: "0345105cc449c627cfee118bcd7804465669e6b32e751a61e39737f5693f56d5f4",
1454 firstPrivKey: "PKXWZeQCqutM4vawyuNAHuAAkfEuWLVhwtszCRuWTecyJ92EMEE2",
1456 testNetwork(done, params);
1458 it('Allows selection
of Nebulas
', function(done) {
1460 selectText: "NAS - Nebulas",
1461 phrase: "abandon abandon ability",
1462 firstAddress: "n1PbK61DGBfDoDusLw621G6sVSMfLLHdfnm",
1463 firstPubKey: "3a3ffb88114f54ed7525c987a3124dc5eefc221806bc049e1e08371cca5fbebea38c2ce791ee32912c1f7799fad99db91f6a3724def5e715b4ff64bc06fe4537",
1464 firstPrivKey: "78d2df373c54efe1bfda371ee7532892ea8ec046f45e5c7e2dfa8371ad190f8b",
1466 testNetwork(done, params);
1468 it('Allows selection
of Neoscoin
', function(done) {
1470 selectText: "NEOS - Neoscoin",
1471 phrase: "abandon abandon ability",
1472 firstAddress: "NgATz6QbQNXvayHQ4CpZayugb9HeaPDdby",
1473 firstPubKey: "021bf6bd94ac773ed78b6e682bf6509a08944b67925a3ea9ec94f500479f637f63",
1474 firstPrivKey: "TBebkUs87R1WLhMPHMzCYF2FmiHzuVcCrhgf2rRwsSpi35SGZPMc",
1476 testNetwork(done, params);
1478 it('Allows selection
of Nix
', function(done) {
1480 selectText: "NIX - NIX Platform",
1481 phrase: "abandon abandon ability",
1482 firstAddress: "GgcNW2SQQXB4LWHRQTHKkQF3GzXNSLqS8u",
1483 firstPubKey: "02438f5277bc74be69e99eee406cda968705a8ab26b9aecfaa1bbc9d3700fa2eae",
1484 firstPrivKey: "L44wVS6tPZhVGfnJhXTfEyBZwLggW61GKKRVDaEKSaWAt2HkALyT",
1486 testNetwork(done, params);
1488 it('Allows selection
of Neurocoin
', function(done) {
1490 selectText: "NRO - Neurocoin",
1491 phrase: "abandon abandon ability",
1492 firstAddress: "NVdYErQ3mFpDuF5DquW9WMiT7sLc8ufFTn",
1493 firstPubKey: "03a3690f587d97dee95393d6dfe9daa81d60354657f84a75fb6733335a1c0588db",
1494 firstPrivKey: "Tn3LK6WyQRczahRsf3cZCpS12VxvbdhM6zSARDvGxhNoxCCN7oKv",
1496 testNetwork(done, params);
1498 it('Allows selection
of Newyorkc
', function(done) {
1500 selectText: "NYC - Newyorkc",
1501 phrase: "abandon abandon ability",
1502 firstAddress: "RSVMfyH1fKfy3puADJEhut2vfkRyon6imm",
1503 firstPubKey: "02c1f71b4e74098cf6dc66c5c0e386c695002093e986698e53f50162493b2deec8",
1504 firstPrivKey: "UqWMjJsXSsC4X7vgCTxLwxV21yA8vDosyGW2rBTYnn7MfFUbKZFy",
1506 testNetwork(done, params);
1508 it('Allows selection
of Novacoin
', function(done) {
1510 selectText: "NVC - Novacoin",
1511 phrase: "abandon abandon ability",
1512 firstAddress: "4JRvUmxcKCJmaMXZyvRoSS1cmG2XvnZfHN",
1513 firstPubKey: "0252531247a5e26a866909467ce552a3433b00f86319446aa3584723ad637be28a",
1514 firstPrivKey: "MD2NsZQtBdXGvox6VzpZfnhHyDJ2NHzzdSE6jUeUjQuaBRQ3LXUg",
1516 testNetwork(done, params);
1518 it('Allows selection
of Nushares
', function(done) {
1520 selectText: "NSR - Nushares",
1521 phrase: "abandon abandon ability",
1522 firstAddress: "SecjXzU3c7EecdT7EbC4vvmbdtBBokWh6J",
1523 firstPubKey: "02e0e94d07415703fd89b8a72f22fc28e7b916c0649bea2c53e6600377a4d125b5",
1524 firstPrivKey: "P5SXdUhciyemKJojb5tBFPKjVyX4Ymf1wdKDPmYHRigxPAnDNudM",
1526 testNetwork(done, params);
1528 it('Allows selection
of Okcash
', function(done) {
1530 selectText: "OK - Okcash",
1531 phrase: "abandon abandon ability",
1532 firstAddress: "PV4Qp1TUYuGv4TqVtLZtqvrsWWRycfx1Yi",
1533 firstPubKey: "02ab6d1d1b2c6f19f9c13cf0cd48e352e04245026d25de014cde0493c773f27789",
1534 firstPrivKey: "WuuneUUV8naqRRs1mSAdSVfZ9g6VXLWRV7NVEYdugts8vT2iNXR",
1536 testNetwork(done, params);
1538 it('Allows selection
of Omnicore
', function(done) {
1540 selectText: "OMNI - Omnicore",
1541 phrase: "abandon abandon ability",
1542 firstAddress: "1Q1t3gonjCT3rW38TsTsCvgSc3hh7zBGbi",
1543 firstPubKey: "02a8cadac7ee1d034f968c1441481fc2c941c8f529a17b6810e917f9ccc893fa3a",
1544 firstPrivKey: "KyvFh1tWTBsLWxJTVjpTpfjJ7eha81iks7NiD6FvrC23o24oAhcs",
1546 testNetwork(done, params);
1548 it('Allows selection
of DeepOnion
', function(done) {
1550 selectText: "ONION - DeepOnion",
1551 phrase: "abandon abandon ability",
1552 firstAddress: "DYREY7XCFXVqJ3x5UuN43k2JwD2s1kif48",
1553 firstPubKey: "030ed256ea98edd15006a57fd4d3c60b2b811ecd74107c3fa1ac36558107c139b3",
1554 firstPrivKey: "QZZHsJF9C9okF5JV2qx4H1NgCCQqeio6k8cryKyrpU3TPnDhSzwV",
1556 testNetwork(done, params);
1558 it('Allows selection
of Pesobit
', function(done) {
1560 selectText: "PSB - Pesobit",
1561 phrase: "abandon abandon ability",
1562 firstAddress: "PDePsF7ALyXP7JaywokdYiRTDtKa14MAr1",
1563 firstPubKey: "023dd8af1b0196275ee2fb450279656ab16f86221d47f62094c78088200d67e90f",
1564 firstPrivKey: "U9eg6xGhoA9H4aHmQtXPP1uR3dR3EjbdmTr3ejVK5jdhWFoJotSj",
1566 testNetwork(done, params);
1568 it('Allows selection
of Pinkcoin
', function(done) {
1570 selectText: "PINK - Pinkcoin",
1571 phrase: "abandon abandon ability",
1572 firstAddress: "2TgjYQffjbzUHJghNaVbdsjHbRwruC3yzC",
1573 firstPubKey: "02fcc7a9d26b78c1ef3149dc3fcb9fbd68293fe5627a9099a01e5acf5f848d029d",
1574 firstPrivKey: "LX84Cjro1aRwwqTDu2jqNTPvproSm7VJCyMFLCeEKa4LTFGzXgks",
1576 testNetwork(done, params);
1578 it('Allows selection
of POSWcoin
', function(done) {
1580 selectText: "POSW - POSWcoin",
1581 phrase: "abandon abandon ability",
1582 firstAddress: "PNxewmZoPnGBvoEbH6hgQZCK1igDiBCdgC",
1583 firstPubKey: "0358e511140f2f2bc96debf22639b36cc9b12addc386ac7a1de7dca05896ec0162",
1584 firstPrivKey: "UCs7SQEhD8r3GwXL99M8sBuxcqB9uke6kRSh7qQfbH9VdS6g919B",
1586 testNetwork(done, params);
1588 it('Allows selection
of Potcoin
', function(done) {
1590 selectText: "POT - Potcoin",
1591 phrase: "abandon abandon ability",
1592 firstAddress: "PEo7Vg2ctXgpP4vuLPeY9aGJtZotyrmiHc",
1593 firstPubKey: "02b86d3f153eac657f140a8ce9ae530504eea3c9894e594b9c9ddf0cfe393dc8ab",
1594 firstPrivKey: "U89dfzjfUtTSEKaRzr3FPw7ark3bjZAzTVw5kedjBcFj1UAdBcdE",
1596 testNetwork(done, params);
1598 it('Allows selection
of Putincoin
', function(done) {
1600 selectText: "PUT - Putincoin",
1601 phrase: "abandon abandon ability",
1602 firstAddress: "PViWnfr2uFtovd6e7joM49C94CsGSnqJis",
1603 firstPubKey: "0387bbd868cb20682619733e63205c66d460014714db26593d55c916c34f7e7970",
1604 firstPrivKey: "UBB9nGXWEMjhmvWqta83YkSYLLc1vjkqsnP289jbwMPG72LpAiUg",
1606 testNetwork(done, params);
1608 it('Allows selection
of Rapids
', function(done) {
1610 selectText: "RPD - Rapids",
1611 phrase: "abandon abandon ability",
1612 firstAddress: "Ri8XxUdZaXS5LqxmFJcFEjFinkaMbmhSUp",
1613 firstPubKey: "03cf69b270c1d03bbedb39f21d70a0a2aa0192b7dfb26bff4bf9a4ed8315d90f4e",
1614 firstPrivKey: "7sgLTht7XHwAkEgEpm7FJE6Tkv7GqCXxSSKPsr4hWYDNePUhBx6t",
1616 testNetwork(done, params);
1618 it('Allows selection
of Ravencoin
', function(done) {
1620 selectText: "RVN - Ravencoin",
1621 phrase: "abandon abandon ability",
1622 firstAddress: "RBuDoVNnzvFsEcX8XKPm8ic4mgiCzjUCNk",
1623 firstPubKey: "02135446ddfa13617ada02187702b51c3ae17a671773aa7ab7100a3cb89b7c9eb1",
1624 firstPrivKey: "KwRpyD9EmoyjQQRKtFVYL1WkS9Ywue8zSpebRPtXViiGR8kWUEJV",
1626 testNetwork(done, params);
1628 it('Allows selection
of Reddcoin
', function(done) {
1630 selectText: "RDD - Reddcoin",
1631 phrase: "abandon abandon ability",
1632 firstAddress: "RtgRvXMBng1y51ftteveFqwNfyRG18HpxQ",
1633 firstPubKey: "026565dd8a2e6f75e6391fbe16e6fb7dfab8b9cba85ea56b63f015d98c13d8f46d",
1634 firstPrivKey: "V1cNKW3ZYbRXosccyG9d3t4g7nGCBGyQJi7zLe6WZ3tExXMUqqK1",
1636 testNetwork(done, params);
1638 it('Allows selection
of RevolutionVR
', function(done) {
1640 selectText: "RVR - RevolutionVR",
1641 phrase: "abandon abandon ability",
1642 firstAddress: "VXeeoP2jkzZnMFxtc66ZBZK1NHN5QJnnjL",
1643 firstPubKey: "03c107f37ffb305d70a690ecd89254a67099d8855a4162762c62e3ad72e78c50e4",
1644 firstPrivKey: "WQdDNS6ZPZcFfBn7AwFMu1GHkm5jScBwpVDqNjmC16PEU7yG97vP",
1646 testNetwork(done, params);
1648 it('Allows selection
of Ritocoin
', function(done) {
1650 selectText: "RITO - Ritocoin",
1651 phrase: "abandon abandon ability",
1652 firstAddress: "BMbHdwDiuaZh4ATp8Xapf4srv3swzAGgkf",
1653 firstPubKey: "036f5f55dc37fa97294a2a5ae4d92735d4392d4405cbbebebf2d70d5d6781be622",
1654 firstPrivKey: "Mdaumz3494kxCeiEBame4ZBzjtTQ5mYzD8notv2EBW8FcNy3PiYd",
1656 testNetwork(done, params);
1658 it('Allows selection
of Rubycoin
', function(done) {
1660 selectText: "RBY - Rubycoin",
1661 phrase: "abandon abandon ability",
1662 firstAddress: "RV76JDtjTs11JdMDRToYn6CHecMRPLnKS6",
1663 firstPubKey: "037828022748cf1f2107e9d99f7a19b8b44ebb24b332c51c0ca1cecec301cf1797",
1664 firstPrivKey: "UwQPqs31g9AKQzLjHNqgXN66tout2i6F7VSiCsSsR3LVHq7aToVL",
1666 testNetwork(done, params);
1668 it('Allows selection
of Salus
', function(done) {
1670 selectText: "SLS - Salus",
1671 phrase: "abandon abandon ability",
1672 firstAddress: "SNzPi1CafHFm3WWjRo43aMgiaEEj3ogjww",
1673 firstPubKey: "020c3ab49a6de010d23ddf14dec67666d7ad46dafbae9841db7723bbb0044067cc",
1674 firstPrivKey: "VMYkYTHeeHiosSQM9EFFdEH1a7fiMEL3TgBPxQVhXWqxAvyQ3uJL",
1676 testNetwork(done, params);
1678 it('Allows selection
of Smileycoin
', function(done) {
1680 selectText: "SMLY - Smileycoin",
1681 phrase: "abandon abandon ability",
1682 firstAddress: "BEZVnEBCAyFByrgKpwAgYgtvP4rKAd9Sj2",
1683 firstPubKey: "02145f25ab87def3ce6decffc6bf740037dc467a32ff8e62f147c70f5092074f2b",
1684 firstPrivKey: "pC32pZDfv3L3vegrv8gptiyc3SkJEZ6BigioGjLmD3wFw2h1qcz",
1686 testNetwork(done, params);
1688 it('Allows selection
of Solarcoin
', function(done) {
1690 selectText: "SLR - Solarcoin",
1691 phrase: "abandon abandon ability",
1692 firstAddress: "8LZ13HbnjtaMJWSvvVFNTLf71zFfDrhwLu",
1693 firstPubKey: "0305dbadd4fd239ecfca9239c9405e3b12178d46bdaf7520d511339a05367a3c88",
1694 firstPrivKey: "NeNfMe2zy5R6eUVJ3pZ4hs17s4xtm7xHjLJoe1hgCwVoYsfHx5Jy",
1696 testNetwork(done, params);
1698 it('Allows selection
of stash
', function(done) {
1700 selectText: "STASH - Stash",
1701 phrase: "abandon abandon ability",
1702 firstAddress: "XxwAsWB7REDKmAvHA85SbEZQQtpxeUDxS3",
1703 firstPubKey: "030caa120ce0fbd2c2d08a24c15086bafcf55d3862f423b0e55fd376474a0e7160",
1704 firstPrivKey: "XF3r4xQozRKvRUNgQG1bx8MGCuSLzV82XrNfB52Utpaixm8tWmWz",
1706 testNetwork(done, params);
1708 it('Allows selection
of stash testnet
', function(done) {
1710 selectText: "STASH - Stash Testnet",
1711 phrase: "abandon abandon ability",
1712 firstAddress: "yWQCTSkUst7ddYuebKsqa1kSoXEjpCkGKR",
1713 firstPubKey: "02a709b853a4ac1739c036c3d2bcf03b3e8c54b64927c57a07ac05c8e903545dd0",
1714 firstPrivKey: "cNrt5ghh7pPGQZVZkL5FJFNsWQQTKQPtLJz2JT7KnsfpzeAPYSp3",
1716 testNetwork(done, params);
1718 it('Allows selection
of Stratis
', function(done) {
1720 selectText: "STRAT - Stratis",
1721 phrase: "abandon abandon ability",
1722 firstAddress: "ScfJnq3QDhKgDMEds6sqUE1ot6ShfhmXXq",
1723 firstPubKey: "0269cea528e4ed01b44729287c831fe1889b196fee6202956a7e5c9486c3bc5c00",
1724 firstPrivKey: "VLx3VXEsVzWVeZjHvrgCJ8N1H7JCEWTSHiEGsYUEZCedHR6yBqDU",
1726 testNetwork(done, params);
1728 it('Allows selection
of Stratis Test
', function(done) {
1730 selectText: "TSTRAT - Stratis Testnet",
1731 phrase: "abandon abandon ability",
1732 firstAddress: "TRLWm3dye4FRrDWouwYUSUZP96xb76mBE3",
1733 firstPubKey: "0269cea528e4ed01b44729287c831fe1889b196fee6202956a7e5c9486c3bc5c00",
1734 firstPrivKey: "VLx3VXEsVzWVeZjHvrgCJ8N1H7JCEWTSHiEGsYUEZCedHR6yBqDU",
1736 testNetwork(done, params);
1738 it('Allows selection
of Sugarchain
', function(done) {
1740 selectText: "SUGAR - Sugarchain",
1741 phrase: "abandon abandon ability",
1742 firstAddress: "SYnd31fYr39VgKju87Vz1sYBmEeHg5cudk",
1743 firstPubKey: "035bc9fa22eff2246ec07bb09c9e32f5f9fee517b4f49a8f117508f8fb41905b25",
1744 firstPrivKey: "L2G3axGdZv5EV8osAsBPMese74i4dTHaGvxDh7DsRF5Ky6hKkPDY",
1746 testNetwork(done, params);
1748 it('Allows selection
of Sugarchain Testnet
', function(done) {
1750 selectText: "TUGAR - Sugarchain Testnet",
1751 phrase: "abandon abandon ability",
1752 firstAddress: "TkoRzLZQyaY88dAACNVwUFMYekR7pv6CbY",
1753 firstPubKey: "035bc9fa22eff2246ec07bb09c9e32f5f9fee517b4f49a8f117508f8fb41905b25",
1754 firstPrivKey: "cSd33sGUzymVeaH8ZGzWiyNhjJ1UHuPGLy6goXgNvMjLDqioARWW",
1756 testNetwork(done, params);
1758 it('Allows selection
of Syscoin
', function(done) {
1760 selectText: "SYS - Syscoin",
1761 phrase: "abandon abandon ability",
1762 firstAddress: "SZwJi42Pst3VAMomyK5DG4157WM5ofRmSj",
1763 firstPubKey: "02219514722373a337c6425ca5ccc423e160f0abf66b57a71fba4db7aca6957f6a",
1764 firstPrivKey: "L36rm7aHFTz571YY87nA3ZLace8NcqPYZsyuyREuT4wXFtTBqLrc",
1766 testNetwork(done, params);
1768 it('Allows selection
of Toa
', function(done) {
1770 selectText: "TOA - Toa",
1771 phrase: "abandon abandon ability",
1772 firstAddress: "TSe1QAnUwQzUfbBusDzRJ9URttrRGKoNKF",
1773 firstPubKey: "0332facd2ea64c2f1e6152961340b7e51ca77f1bffa0f950442b4ef5021f7ee86c",
1774 firstPrivKey: "VdSdDaM1Kjw1SzzW7KCzFEFi7Zf5egUHVofSiLkrSh7K6bbYZhnb",
1776 testNetwork(done, params);
1778 it('Allows selection
of TWINS
', function(done) {
1780 selectText: "TWINS - TWINS",
1781 phrase: "abandon abandon ability",
1782 firstAddress: "WPpJnfLLubNmF7HLNxg8d8zH5haxn4wri8",
1783 firstPubKey: "02a4b9bda2a7a2e4540d54c4afb3a3007f6f22f8cd2df67d5c69388fd8ddc16a07",
1784 firstPrivKey: "Au5fg7nYMXHmNT9BSfQVNxaUduP9cgJASeNDMrP9qfoWi2ZTmR48",
1786 testNetwork(done, params);
1788 it('Allows selection
of TWINS testnet
', function(done) {
1790 selectText: "TWINS - TWINS Testnet",
1791 phrase: "abandon abandon ability",
1792 firstAddress: "XpnU1HHdNG5YxvG9Rez4wjmidchxqnZaNa",
1793 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
1794 firstPrivKey: "cBtMfPpQg4s1Ndfez7oLdedwu8CxshhWE5f7qunhLsY4ueNvKKyM",
1796 testNetwork(done, params);
1798 it('Allows selection
of Ultimatesecurecash
', function(done) {
1800 selectText: "USC - Ultimatesecurecash",
1801 phrase: "abandon abandon ability",
1802 firstAddress: "UPyLAZU2Che5fiy7Ed8xVJFmXAUhitA4ug",
1803 firstPubKey: "03a529111ee6d54965962b289f7537db1edb57863e2e10dd96939f8d3501ecebd4",
1804 firstPrivKey: "VG1ZbBExPyeeT72EL1jQU8SvXkpK6heTept76wLiGCuMgRHqrz9L",
1806 testNetwork(done, params);
1808 it('Allows selection
of Unobtanium
', function(done) {
1810 selectText: "UNO - Unobtanium",
1811 phrase: "abandon abandon ability",
1812 firstAddress: "uUBMPVMXrR6qhqornJqKTWgr8L69vihSL9",
1813 firstPubKey: "026dd108ff43d425ad923f2107f5fc166cbb90dd0bd04b157c1ebdc9c04a423e0f",
1814 firstPrivKey: "aAf6LmMJpWQMZbHVSHtkKDCNViknGD4TQ3y1rwvJe2L55dwpbqBV",
1816 testNetwork(done, params);
1818 it('Allows selection
of Vcash
', function(done) {
1820 selectText: "XVC - Vcash",
1821 phrase: "abandon abandon ability",
1822 firstAddress: "VuL53MSY6KjvAjKSeRkh3NDnKykacDVeps",
1823 firstPubKey: "03ab245795cf39c4084684d039a01c387472c3626d93d24289d229c27ce9eeeace",
1824 firstPrivKey: "WVC2yAf2rFHzjbKKJeZWNFjMqQ9ATRg3xdtG2FfVDQATpNj5fHy9",
1826 testNetwork(done, params);
1828 it('Allows selection
of Verge
', function(done) {
1830 selectText: "XVG - Verge",
1831 phrase: "abandon abandon ability",
1832 firstAddress: "DCrVuGkMjLJpTGgwAgv9AcMdeb1nkWbjZA",
1833 firstPubKey: "03cd21de72f291cd5a3632a23a710616416743f60b4667a0f8d3fc03c7fd6e0c77",
1834 firstPrivKey: "QRpRGbTRC7P12PyhiFqyZpVwK5XCGe5Lmr9hbV7ujcjg9cjUGqF7",
1836 testNetwork(done, params);
1838 it('Allows selection
of Vertcoin
', function(done) {
1840 selectText: "VTC - Vertcoin",
1841 phrase: "abandon abandon ability",
1842 firstAddress: "Vf6koGuiWdXQfx8tNqxoNeEDxh4xh5cxsG",
1843 firstPubKey: "02f15155bc5445fc764db199da5e7ac92112ab9f2a5e408904f145ea29d169010a",
1844 firstPrivKey: "Kxu4LwEJZooaVWGT9ZLzJBuaUFr1hLjuottjT7eTNNWJKk7Hur1u",
1846 testNetwork(done, params);
1848 it('Allows selection
of Vivo
', function(done) {
1850 selectText: "VIVO - Vivo",
1851 phrase: "abandon abandon ability",
1852 firstAddress: "VFmBwuXXGhJe7MarQG2GfzHMFebRHgfSpB",
1853 firstPubKey: "02d24546a74522e0dc8bbfde66e65201ae81b0f6e2b60239c8baf09c1a53b73f8c",
1854 firstPrivKey: "WLSLMqZjuwzibyhPfaYvxG4z1tRnmVX4yYFtbQmHhU4eKt12Nuqq",
1856 testNetwork(done, params);
1858 it('Allows selection
of Vpncoin
', function(done) {
1860 selectText: "VASH - Vpncoin",
1861 phrase: "abandon abandon ability",
1862 firstAddress: "VoEmH1qXC4TsSgBAStR21QYetwnFqbqCx9",
1863 firstPubKey: "039e579dd18157ef1dff74d46f0bdb95f729d3985f0d4f9167fed4095b1aba846c",
1864 firstPrivKey: "WTbS2wjqeTzs8nk1E1N8RxpPUow8wNkgCjfDCuvDLRHaWFuNhxMz",
1866 testNetwork(done, params);
1868 it('Allows selection
of VeChain
', function(done) {
1870 selectText: "VET - VeChain",
1871 phrase: "abandon abandon ability",
1872 firstAddress: "0xdba55B1B6070f3a733D5eDFf35F0da4A00E455F2",
1873 firstPubKey: "0x0386911777255ed1d57906dcc85ca7fd4ba9eb4c8160ced97817933919d1ffe7ad",
1874 firstPrivKey: "0x3ec2b392952fe8a82a319c8ca9a4bb9c1db7beb09c64799da7693615ba1a787e",
1876 testNetwork(done, params);
1878 it('Allows selection
of Whitecoin
', function(done) {
1880 selectText: "XWC - Whitecoin",
1881 phrase: "abandon abandon ability",
1882 firstAddress: "WcSwCAUqrSgeSYbsaS3SSWWhsx8KRYTFDR",
1883 firstPubKey: "03d3f4fa758f6260bfb39664d248a32258b53a90a71224db056ee79abaa3e9f208",
1884 firstPrivKey: "WrGUVSubUyDx5wzjfwi3EhhUwf5anHFW7Dv9kAaTu39CtDDBJWM9",
1886 testNetwork(done, params);
1888 it('Allows selection
of Wincoin
', function(done) {
1890 selectText: "WC - Wincoin",
1891 phrase: "abandon abandon ability",
1892 firstAddress: "WaDVCESMGgyKgNESdn3u43NnwmGSkZED3Z",
1893 firstPubKey: "02d10b29f6d88dd86f733b2140ba2207a9dfb5d014bb287541c66a41e467e231a7",
1894 firstPrivKey: "WmLWUvbz8UF1s7PrHyeQBMLbt4LpmQrwbzatvusvx6SRoNASbWtW",
1896 testNetwork(done, params);
1898 it('Allows selection
of Zcash
', function(done) {
1900 selectText: "ZEC - Zcash",
1901 phrase: "abandon abandon ability",
1902 firstAddress: "t1Sz8AneMcVuzUg3tPJ8et5AS5LFJ7K2EF9",
1903 firstPubKey: "035864cede8db462f7ccfda96bd7358156e198a894032cfc87505d82abb6d48b48",
1904 firstPrivKey: "L1eU2kCeBQBZTQKKt7uYu4pb6Z1ZMy1Km1VMznUvGyH64GTxMqfL",
1906 testNetwork(done, params);
1908 it('Allows selection
of Zclassic
', function(done) {
1910 selectText: "ZCL - Zclassic",
1911 phrase: "abandon abandon ability",
1912 firstAddress: "t1TBMxTvVJRybUbMLGWq8H4A8F4VUL7czEc",
1913 firstPubKey: "02fbdf32c4d9e692d4a94aa09f830a2a3b7b73f5c4f313b8234fc39a8b151c9ab7",
1914 firstPrivKey: "L5N7BBrrAweLcbAQGVDLZAaX9DnfAiD2VCZBBU1U3HBftFsRfHm7",
1916 testNetwork(done, params);
1918 it('Allows selection
of Horizen
', function(done) {
1920 selectText: "ZEN - Horizen",
1921 phrase: "abandon abandon ability",
1922 firstAddress: "znWh9XASyW2dZq5tck84wFjiwuqVysi7q3p",
1923 firstPubKey: "0326a78c08ef8a2b6c0d0d3959ffeddaad64fc921b0e714baeafff4785db31ff7a",
1924 firstPrivKey: "L25L6Ctvb4fr6fTaVVECE2CVoeGuttfUJqk1HQxfuejgb5QZHu8y",
1926 testNetwork(done, params);
1928 it('Allows selection
of Energi
', function(done) {
1930 selectText: "NRG - Energi",
1931 phrase: "abandon abandon ability",
1932 firstAddress: "EejRy4t4nidzhGGzkJUgFP3z4HYBjhTsRt",
1933 firstPubKey: "03a4aa1d4d5bdce7c18df69b123ef292e7e9b6069948b14bf3ee089188076e7c80",
1934 firstPrivKey: "GkMWjZtHh9RXFeNL2m5GKPp3wdNmiaSqqUWVLunR766TjbigK4FC",
1936 testNetwork(done, params);
1938 it('Allows selection
of Ethereum Classic
', function(done) {
1940 selectText: "ETC - Ethereum Classic",
1941 phrase: "abandon abandon ability",
1942 firstAddress: "0x3c05e5556693808367afB62eF3b63e35d6eD249A",
1943 firstPubKey: "0x02afa443029a20b62fe90c3eaa772d440d8e2ddc1ad247c3473b3ff34dc0583f3f",
1944 firstPrivKey: "0x5253e43358ddb97c8c710a2f51fcbdf7c07aad193ddd29c8b57dbab50d6141f2",
1946 testNetwork(done, params);
1948 it('Allows selection
of Pirl
', function(done) {
1950 selectText: "PIRL - Pirl",
1951 phrase: "abandon abandon ability",
1952 firstAddress: "0xe77FC0723dA122B5025CA79193c28563eB47e776",
1953 firstPubKey: "0x039b4d13ecf9ef299546ba0d486969e0b659baa0cb71278501a46dce4381f612de",
1954 firstPrivKey: "0xe76ed1cffd0572b31be2ada6848d46e267b8b2242b30f1a92142f64ee4772460",
1956 testNetwork(done, params);
1958 it('Allows selection
of MIX
', function(done) {
1960 selectText: "MIX - MIX",
1961 phrase: "abandon abandon ability",
1962 firstAddress: "0x98BC5e63aeb6A4e82d72850d20710F07E29A29F1",
1963 firstPubKey: "0x02686ad3d73950627c46b73cd0c0d3b17e0bdcb89c094ce68b2f4219c09016c547",
1964 firstPrivKey: "0x70deca38fff7d8a2490491deb1bb7fbc979d6a0b97000b9f1eddefdd214eb7da",
1966 testNetwork(done, params);
1968 it('Allows selection
of Monkey Project
', function(done) {
1970 selectText: "MONK - Monkey Project",
1971 phrase: "abandon abandon ability",
1972 firstAddress: "MnLrcnnUzKnf7TzufjRe5DLZqQJz18oYyu",
1973 firstPubKey: "03a3f72bd9023fa12b22e5255d74e80420a968b577efbc52cea283da0f6690d4fc",
1974 firstPrivKey: "9B4CknHTfmvPS3oEG6AjJUMz1SZtJKN6rmEoaFoZNCJd1EU1xVdS",
1976 testNetwork(done, params);
1979 it('Allows selection
of MOAC
', function(done) {
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",
1987 testNetwork(done, params);
1989 it('Allows selection
of Musicoin
', function(done) {
1991 selectText: "MUSIC - Musicoin",
1992 phrase: "abandon abandon ability",
1993 firstAddress: "0xDc060e4A0b0313ea83Cf6B3A39B9db2D29004897",
1994 firstPubKey: "0x02a17278d54548e7cf0c1e6120646174f42e380ae5a0080f1a0d09f118305d6f9f",
1995 firstPrivKey: "0xaea8683b8bfd56b6fc68c19b88eee4ccd2f00430bc466741d0297aa65c7b56a5",
1997 testNetwork(done, params);
1999 it('Allows selection
of Poa
', function(done) {
2001 selectText: "POA - Poa",
2002 phrase: "abandon abandon ability",
2003 firstAddress: "0x53aF28d754e106210C3d0467Dd581eaf7e3C5e60",
2004 firstPubKey: "0x02cda40cf7f21f370afe0206cbf219f963369d7c7229dc7ba64137358489d96567",
2005 firstPrivKey: "0xed0a44cff8e44fa978f339af3308ee439c30f4170671ad0e1ccd7e4bfff70ed9",
2007 testNetwork(done, params);
2009 it('Allows selection
of Expanse
', function(done) {
2011 selectText: "EXP - Expanse",
2012 phrase: "abandon abandon ability",
2013 firstAddress: "0xf57FeAbf26582b6E3E666559d3B1Cc6fB2b2c5F6",
2014 firstPubKey: "0x0232fa15f0971f93c182afea54cb28a3180f5a4c31759235ca6ceca47a5a777335",
2015 firstPrivKey: "0x9f96418f9ec3672b52c2a6421272650b2d5992d524a48905a4ff0ed9ce347c9b",
2017 testNetwork(done, params);
2019 it('Allows selection
of Callisto
', function(done) {
2021 selectText: "CLO - Callisto",
2022 phrase: "abandon abandon ability",
2023 firstAddress: "0x4f9364F7420B317266C51Dc8eB979717D4dE3f4E",
2024 firstPubKey: "0x0313d9db8d77249c768630a5a8315e08e3a3284d7e18774476d15e073931ddc15e",
2025 firstPrivKey: "0x02bbf00719f3730baf989f7392b8d55548dd349abd744c68242c69bd016ce28d",
2027 testNetwork(done, params);
2029 it('Allows selection
of HUSH
', function(done) {
2031 selectText: "HUSH - Hush (Legacy)",
2032 phrase: "abandon abandon ability",
2033 firstAddress: "t1g6rLXUnJaiJuu4q4zmJjoa9Gk4fwKpiuA",
2034 firstPubKey: "038702683b2d7bbb5c35e18e01cd18483cda8485fb919f34c0186ae31a05007755",
2035 firstPrivKey: "Kx99fhLCDHPsBsZAJDH7v8vgGDch4rNr9VjhAUMfVevJWnoGr8WD",
2037 testNetwork(done, params);
2039 it('Allows selection
of HUSH3
', function(done) {
2041 selectText: "HUSH - Hush3",
2042 phrase: "abandon abandon ability",
2043 firstAddress: "RXWSQhwvw5jHPGP8bjwJhWoRnMLBnuPDKD",
2044 firstPubKey: "038702683b2d7bbb5c35e18e01cd18483cda8485fb919f34c0186ae31a05007755",
2045 firstPrivKey: "UpvyyNxAiWN7evMFUkxhgabuCHfq9xeTv17Wjj9LxN91QegKs6RR",
2047 testNetwork(done, params);
2049 it('Allows selection
of ExchangeCoin
', function(done) {
2051 selectText: "EXCC - ExchangeCoin",
2052 phrase: "abandon abandon ability",
2053 firstAddress: "22txYKpFN5fwGwdSs2UBf7ywewbLM92YqK7E",
2054 firstPubKey: "033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3",
2055 firstPrivKey: "L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE",
2057 testNetwork(done, params);
2059 it('Allows selection
of Artax
', function(done) {
2061 selectText: "XAX - Artax",
2062 phrase: "abandon abandon ability",
2063 firstAddress: "AYxaQPY7XLidG31V7F3yNzwxPYpYzRqG4q",
2064 firstPubKey: "02edef928ec3951112452119f9a63d9479741ea0fc497682bd13064cfc5d1cc4e3",
2065 firstPrivKey: "PMcqFx52ipYy9gZynEi5LYVD3XUC8YbQr2Neg6e3LFnh4yTBQ9yJ",
2067 testNetwork(done, params);
2069 it('Allows selection
of BitcoinGreen
', function(done) {
2071 selectText: "BITG - Bitcoin Green",
2072 phrase: "abandon abandon ability",
2073 firstAddress: "GeNGm9SkEfwbsws3UrrUSE2sJeyWYjzraY",
2074 firstPubKey: "02a8e34c2599a14ca861285b734750432a7ce10caf7f1ff5a366a94264c636a12b",
2075 firstPrivKey: "7uf6WeVgBqKR1WyUcaz1TLSKabyov9SfQDghyvfaCy6VZPwLNeku",
2077 testNetwork(done, params);
2079 it('Allows selection
of ANON
', function(done) {
2081 selectText: "ANON - ANON",
2082 phrase: "abandon abandon ability",
2083 firstAddress: "AnU6pijpEeUZFWSTyM2qTqZQn996Zq1Xard",
2084 firstPubKey: "032742ff4eaf9188d84d38dfb4a2fdbb541bfd3ca9ee533a7d1092940a1ea60bb4",
2085 firstPrivKey: "L2w3aoZExc9eHh1KMnDzrzaSVmfgQMvBxxFbtcegKNvrHVa4r81m",
2087 testNetwork(done, params);
2089 it('Allows selection
of ProjectCoin
', function(done) {
2091 selectText: "PRJ - ProjectCoin",
2092 phrase: "abandon abandon ability",
2093 firstAddress: "PXZG97saRseSCftfe1mcFmfAA7pf6qBbaz",
2094 firstPubKey: "025f84297a93a33bccb735c931140ddb4279fe9d55a571ee7731259e3e19d0c7fe",
2095 firstPrivKey: "JRR5uB6daEtSCLNnv7hKSgZ5KmFdHMUcpTzJGtEAi9sWSiQd4hVQ",
2097 testNetwork(done, params);
2099 it('Allows selection
of Phore
', function(done) {
2101 selectText: "PHR - Phore",
2102 phrase: "abandon abandon ability",
2103 firstAddress: "PJThxpoXAG6hqrmdeQQbVDX4TJtFTMMymC",
2104 firstPubKey: "022ef3c4cbc0481fd925ecac51f09f2976ea024b0863b543b1b481181e1ef34265",
2105 firstPrivKey: "YPzQxHMA2Pm5S2p8Xwhmhm2PnH6ooYHrWNXiAKCCA2CjMtHyNzuh",
2107 testNetwork(done, params);
2109 it('Allows selection
of Safecoin
', function(done) {
2111 selectText: "SAFE - Safecoin",
2112 phrase: "abandon abandon ability",
2113 firstAddress: "RtxHpnhJz6RY8k9owP3ua5QWraunmewB1G",
2114 firstPubKey: "0383956cd23c1124324c92ac69f4bcf71ad973892a83aceb4085041afb082f6db9",
2115 firstPrivKey: "Uznk2AHWqpSGRw8dmG3t3Q3rJJwyn3TcjzWh9EgDCQ9jU34DWF6m",
2117 testNetwork(done, params);
2119 it('Allows selection
of Blocknode
', function(done) {
2121 selectText: "BND - Blocknode",
2122 phrase: "abandon abandon ability",
2123 firstAddress: "BG8xZSAur2jYLG9VXt8dYfkKxxeR7w9bSe",
2124 firstPubKey: "03e91c00dcfca87c80f57691e34e0e4c55a18eb79048dbdd5f6d9c83daefea6459",
2125 firstPrivKey: "C6gySxND85cLnLgsjTfUxXmMzh8JrSR24vpQnUHqVMqGYy36k4ho",
2127 testNetwork(done, params);
2129 it('Allows selection
of Blocknode Testnet
', function(done) {
2131 selectText: "tBND - Blocknode Testnet",
2132 phrase: "abandon abandon ability",
2133 firstAddress: "bSptsFyDktFSKpWveRywJsDoJA2TC6qfHv",
2134 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
2135 firstPrivKey: "MPuJVFnTAhFFvtLqgYL32FBF1g7jPraowuN5tV9EF2AtkYXCfkE3",
2137 testNetwork(done, params);
2139 it('Allows selection
of LitecoinZ
', function(done) {
2141 selectText: "LTZ - LitecoinZ",
2142 phrase: "abandon abandon ability",
2143 firstAddress: "L1VTXju7hLgKV4T7fGXS9sKsnm2gmtRCmyw",
2144 firstPubKey: "03ea84a1cc8b43ea8330bc2f363e706a9ff2d48858185c42c296d06ddcb94bc827",
2145 firstPrivKey: "L1PktmLfTgVRQZsqs2ZoFBBqnVXi5hVAimJt8tmfT2ye95WH9zEd",
2147 testNetwork(done, params);
2149 it('Allows selection
of BlockStamp
', function(done) {
2151 selectText: "BST - BlockStamp",
2152 phrase: "abandon abandon ability",
2153 firstAddress: "15gypKtim4cVTj137ApfryG17RkvSbPazZ",
2154 firstPubKey: "0277bc537f8354004f8a77e07fb78b38f291df7bc07819c2d7eab049b8d10b3f7f",
2155 firstPrivKey: "L1NmycTQz17fXBMzK25aBTnN7v5U6rz3AURjL72xyKg21zmAmgt7",
2157 testNetwork(done, params);
2159 it('Allows selection
of DEXON
', function(done) {
2161 selectText: "DXN - DEXON",
2162 phrase: "abandon abandon ability",
2163 firstAddress: "0x136a58788033E028CCd740FbDec6734358DB56Ec",
2164 firstPubKey: "0x028d7fa8c3417904cec37946db8d12bba51d85dde25156651f216260e0ff641cf4",
2165 firstPrivKey: "0x8d7d8479dac38e786d4e493159dd655e116871d17ed803af6bb70207c60298ff",
2167 testNetwork(done, params);
2169 it('Allows selection
of Ellaism
', function(done) {
2171 selectText: "ELLA - Ellaism",
2172 phrase: "abandon abandon ability",
2173 firstAddress: "0xa8B0BeA09eeBc41062308546a01d6E544277e2Ca",
2174 firstPubKey: "0x03698fee21c52ad4b4772df3da92ddf0278da529da231c2ebfb167c9e3cc88f29f",
2175 firstPrivKey: "0xe10bc99fcea6f5bca20c1b6e5386a18991b8d16d658b36881b7aca792e06bac2",
2177 testNetwork(done, params);
2179 it('Allows selection
of Ethersocial Network
', function(done) {
2181 selectText: "ESN - Ethersocial Network",
2182 phrase: "abandon abandon ability",
2183 firstAddress: "0x6EE99Be2A0C7F887a71e21C8608ACF0aa0D2b767",
2184 firstPubKey: "0x028df59c64daa4f1036fe0dc832c4e36d9df0692a7ed9a062d48a4662a01d2c7b3",
2185 firstPrivKey: "0x44e0316578fd8168022039d5dfd5838e70826686a4b05dec9c88100c30049fce",
2187 testNetwork(done, params);
2189 it('Allows selection
of Stellar
', function(done) {
2191 selectText: "XLM - Stellar",
2192 phrase: "abandon abandon ability",
2193 firstAddress: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
2194 firstPubKey: "GCUK3NYYUXA2QGN6KU5RR36WAKN3Y5EANZV65XNAWN4XM4CHQ3G4DMO2",
2195 firstPrivKey: "SA35HYGAHWYYLCW2P5EDHGWAYQW2C5F25KH4KFWEXLG5I4CPKPZTLRM5",
2197 testNetwork(done, params);
2199 it('Allows selection
of Nano
', function(done) {
2201 selectText: "NANO - Nano",
2202 phrase: "deal wedding panda forum property artist whip total word student sea middle",
2203 firstAddress: "nano_15fum9n68681dz73qyu37fuc9tro84gqm86eptdqpm9jutkfnt34agkoqpw5",
2204 firstPubKey: "0dbb99e84310c05fca1bfb612b76a3eb15309d79988cb6977b4cf1dea4da6822",
2205 firstPrivKey: "30633c8497cc47e0aefd52c7971ffd45e6c5d166274c7978feca3482a859c0af",
2207 testNetwork(done, params);
2209 it('Allows selection
of Wagerr
', function(done) {
2211 selectText: "WGR - Wagerr",
2212 phrase: "abandon abandon ability",
2213 firstAddress: "WYiVgQU39VcQxcnacoCiaZHZZLjDCJoS95",
2214 firstPubKey: "0343cfa1ed85e02fdc782c3c8b0b5febe7653c30a0c4319bef2e7d462e67245e46",
2215 firstPrivKey: "WagfoYsRKgtBwBMgwYWuboY2DpGjJBpFcneqzSegZg4ppvYLWcry",
2217 testNetwork(done, params);
2219 it('Allows selection
of Groestlcoin
', function(done) {
2221 selectText: "GRS - Groestlcoin",
2222 phrase: "abandon abandon ability",
2223 firstAddress: "FZycsFvZ1eH1hbtyjBpAgJSukVw1bN6PBN",
2224 firstPubKey: "03c1d0c7b272a762b4b697bdb1b3b36e26add3215e69f7251db16c5a51c84b7b4c",
2225 firstPrivKey: "KzQVqEsQrKjb4K6bViRqqQJc9nXrvEAxDy2AiPf6tfEkRW7rgNfg",
2227 testNetwork(done, params);
2229 it('Allows selection
of Groestlcoin Testnet
', function(done) {
2231 selectText: "GRS - Groestlcoin Testnet",
2232 phrase: "abandon abandon ability",
2233 firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiygRPne9",
2234 firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
2235 firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJpRHpNq",
2237 testNetwork(done, params);
2239 it('Allows selection
of Elastos
', function(done) {
2241 selectText: "ELA - Elastos",
2242 phrase: "abandon abandon ability",
2243 firstAddress: "EMccDcsn3SwPDcfeQMf3w7utqi8ioWYtkg",
2244 firstPubKey: "02c936d5025b06acc283bf9562700279fd1ea3ce7ee204afca0c07be77bc3b4822",
2245 firstPrivKey: "608f7e64b46a1df51ba6b5b38b0599196afd1f36572b1ec696d7aae65d05045d",
2247 testNetwork(done, params);
2249 it('Allows selection
of Energyweb
', function(done) {
2251 selectText: "EWT - EnergyWeb",
2252 phrase: "abandon abandon ability",
2253 firstAddress: "0x22171474844Fc7E8E99A3A69CCf1eDb5574FdD4c",
2254 firstPubKey: "0x03eee63d4d201168802b43f392e61f148a478935055cd990549452c741f4c34b84",
2255 firstPrivKey: "0x325aa9e82d03b3773859d84bece81a598df8478d361cfbc59efc27385e0e3611",
2257 testNetwork(done, params);
2259 it('Allows selection
of Thought
', function(done) {
2261 selectText: "THT - Thought",
2262 phrase: "abandon abandon ability",
2263 firstAddress: "4B1Bh9GibDarFQrhtYU8krpc7WSjgGfYvo",
2264 firstPubKey: "0390e4598e7924f3b0369020394b133545db6bd37fa3aa4648aafbce46330c28cc",
2265 firstPrivKey: "KCwL3y6VVrgzJFqtCkh2RV9M1zruX9NymKsWheb7by1dWLd2QkFx",
2267 testNetwork(done, params);
2269 it('Allows selection
of EtherCore
', function(done) {
2271 selectText: "ERE - EtherCore",
2272 phrase: "abandon abandon ability",
2273 firstAddress: "0x119e6EAC3Ce1b473D62d9fD847fb0ea222eF1D9e",
2274 firstPubKey: "0x02cfeb9a4d8003b5c919c1eb67c91e06b3c08e602a336f74017fc7c756a2550ca9",
2275 firstPrivKey: "0x6bb6e036aaf39326d3c74345ec34ef0c73b1608acb409306c9ba73d22de6abf0",
2277 testNetwork(done, params);
2279 it('Allows selection
of RBTC
- RSK
', function(done) {
2281 selectText: "R-BTC - RSK",
2282 phrase: "abandon abandon ability",
2283 firstAddress: "0x37CA764c4b2fe819108448b80d2F35921b035931",
2284 firstPubKey: "0x0219d9b5087ab68edc8a714969d8cb70e7159417b47a05932b227e6f417c7962b9",
2285 firstPrivKey: "0x6e6f48cc422825f7fd68f2200d3dde757849f15342f252eeb0bc4ebc46089fe1",
2287 testNetwork(done, params);
2289 it('Allows selection
of tRBTC
- RSK Testnet
', function(done) {
2291 selectText: "tR-BTC - RSK Testnet",
2292 phrase: "abandon abandon ability",
2293 firstAddress: "0x176484B5a155Fe802aCB26055eb1c193D5A576d5",
2294 firstPubKey: "0x03f77eb7bd83e92ef47be1abddae7f71fb0bc8a7a1ee4b193662a86ed2705ffc5b",
2295 firstPrivKey: "0x18c2400d2f818d28b80d0e31235873bfeef644fc45fd702f54ae0d422cff6ab3",
2297 testNetwork(done, params);
2299 it('Allows selection
of Argoneum
', function(done) {
2301 selectText: "AGM - Argoneum",
2302 phrase: "abandon abandon ability",
2303 firstAddress: "MWgLPvJkaJwH6hrXFs1MimAC4FwC1kYRhe",
2304 firstPubKey: "0348e5252045fee1d3b1e5bce25dbc16284d5b6c3bfff9c305d4ffa6078c16f3f8",
2305 firstPrivKey: "VJXpuMEFnK8USLyo5tgF7M4cBXU44U8MUor1KRTQ6t9DVno9AAgg",
2307 testNetwork(done, params);
2309 it('Allows selection
of CranePay
', function(done) {
2311 selectText: "CRP - CranePay",
2312 phrase: "abandon abandon ability",
2313 firstAddress: "CcUHPqgmef1BmgWFa9g3YNc8scgVXVh8ip",
2314 firstPubKey: "0392af9ea9dc78170c6f68c50bac926f960e50769295f539ac6382a3af2b928740",
2315 firstPrivKey: "KHTCAvKHKg1WdLoDSg3VjjyZK5Wk1ihzJENpp2YMb1RmAxrCZrXX",
2317 testNetwork(done, params);
2319 it('Allows selection
of Scribe
', function(done) {
2321 selectText: "SCRIBE - Scribe",
2322 phrase: "abandon abandon ability",
2323 firstAddress: "RYAnPeBLD8veZ9Tw8xugeTC2f9PeZonLHM",
2324 firstPubKey: "02c912bc4759c8a209475502fb5352ff5be8a8f13eb72f1732ee25125cd53edc1e",
2325 firstPrivKey: "HLZWvNCEUv4ghygjH9A2EYCa9HNRcxe5CS42kzUTmoxJYp3z96QE",
2327 testNetwork(done, params);
2329 it('Allows selection
of Binance Smart Chain
', function(done) {
2331 selectText: "BSC - Binance Smart Chain",
2332 phrase: "abandon abandon ability",
2333 firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772",
2334 firstPubKey: "0x03e723e5b3aa7d72213f01139aa4783e1b34f74e1a04534e3fd8e29bfe2768af8a",
2335 firstPrivKey: "0x8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7",
2337 testNetwork(done, params);
2340 it('Allows selection
of TRX on Tron
', function(done) {
2342 selectText: "TRX - Tron",
2343 phrase: "abandon abandon ability",
2344 firstAddress: "TA891Fu7vVz595BGQpNX2MCzr7yBcxuoC7",
2345 firstPubKey: "0337bbb060e6166066f7f9e59e52f67bc23a6c9d0cbc815b82b6d89112444842e7",
2346 firstPrivKey: "3a8fbd0379a815764979de86a3fcda759cb62d49e784e7b2a9a03206c90cfae2",
2348 testNetwork(done, params);
2351 it('Allows selection
of ZooBlockchain
', function(done) {
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",
2359 testNetwork(done, params);
2362 // BIP39 seed is set from phrase
2363 it('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");
2376 // BIP32 root key is set from phrase
2377 it('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");
2390 // Tabs show correct addresses when changed
2391 it('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
'))
2397 driver.sleep(generateDelay).then(function() {
2398 getFirstAddress(function(address) {
2399 expect(address).toBe("17uQ7s2izWPwBmEVFikTmZUjbBKWYdJchz");
2406 // BIP44 derivation path is shown
2407 it('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");
2420 // BIP44 extended private key is shown
2421 it('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
");
2434 // BIP44 extended public key is shown
2435 it('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
");
2448 // BIP44 account field changes address list
2449 it('Changes the address list if bip44 account is changed', function(done) {
2450 driver.findElement(By.css('#bip44 .account'))
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
");
2462 // BIP44 change field changes address list
2463 it('Changes the address list if bip44 change is changed', function(done) {
2464 driver.findElement(By.css('#bip44 .change'))
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
");
2476 // BIP32 derivation path can be set
2477 it('Can use a custom bip32 derivation path', function(done) {
2478 driver.findElement(By.css('#bip32-tab a'))
2480 driver.findElement(By.css('#bip32 .path'))
2482 driver.findElement(By.css('#bip32 .path'))
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
");
2494 // BIP32 can use hardened derivation paths
2495 it('Can use a hardened derivation paths', function(done) {
2496 driver.findElement(By.css('#bip32-tab a'))
2498 driver.findElement(By.css('#bip32 .path'))
2500 driver.findElement(By.css('#bip32 .path'))
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");
2512 // BIP32 extended private key is shown
2513 it('Shows the BIP32 extended
private key
', function(done) {
2514 driver.findElement(By.css('#bip32
-tab a
'))
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");
2528 // BIP32 extended public key is shown
2529 it('Shows the BIP32 extended
public key
', function(done) {
2530 driver.findElement(By.css('#bip32
-tab a
'))
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");
2544 // Derivation path is shown in table
2545 it('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");
2556 // Derivation path for address can be hardened
2557 it('Can derive hardened addresses', function(done) {
2558 driver.findElement(By.css('#bip32-tab a'))
2560 driver.executeScript(function() {
2561 $(".hardened
-addresses
").prop("checked
", true);
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
");
2573 // Derivation path visibility can be toggled
2574 it('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'))
2580 testColumnValuesAreInvisible(done, "index
");
2585 it('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
");
2596 // Addresses are shown in order of derivation path
2597 it('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);
2605 // Address visibility can be toggled
2606 it('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'))
2612 testColumnValuesAreInvisible(done, "address
");
2616 // Public key is shown in table
2617 it('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) {
2624 .then(function(pubkey) {
2625 expect(pubkey).toBe("033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3
");
2632 // Public key visibility can be toggled
2633 it('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'))
2639 testColumnValuesAreInvisible(done, "pubkey
");
2643 // Private key is shown in table
2644 it('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) {
2651 .then(function(pubkey) {
2652 expect(pubkey).toBe("L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE
");
2659 // Private key visibility can be toggled
2660 it('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'))
2666 testColumnValuesAreInvisible(done, "privkey
");
2670 // More addresses can be generated
2671 it('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'))
2677 driver.sleep(generateDelay).then(function() {
2678 driver.findElements(By.css('.address'))
2679 .then(function(els) {
2680 expect(els.length).toBe(40);
2687 // A custom number of additional addresses can be generated
2688 it('Can generate more rows in the table', function(done) {
2689 driver.findElement(By.css('.phrase'))
2690 .sendKeys('abandon abandon ability');
2691 driver.sleep(generateDelay).then(function() {
2692 driver.findElement(By.css('.rows-to-add'))
2694 driver.findElement(By.css('.rows-to-add'))
2696 driver.findElement(By.css('.more'))
2698 driver.sleep(generateDelay).then(function() {
2699 driver.findElements(By.css('.address'))
2700 .then(function(els) {
2701 expect(els.length).toBe(21);
2708 // Additional addresses are shown in order of derivation path
2709 it('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'))
2715 driver.sleep(generateDelay).then(function() {
2716 testRowsAreInCorrectOrder(done);
2721 // BIP32 root key can be set by the user
2722 it('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
");
2733 // Setting BIP32 root key clears the existing phrase, passphrase and seed
2734 it('Confirms the existing phrase should be cleared', function(done) {
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("");
2747 // Clearing of phrase, passphrase and seed can be cancelled by user
2748 it('Allows the clearing of the phrase to be cancelled', function(done) {
2749 driver.findElement(By.css('.phrase'))
2750 .sendKeys('abandon abandon ability');
2751 driver.sleep(generateDelay).then(function() {
2752 driver.findElement(By.css('.root-key'))
2754 driver.findElement(By.css('.root-key'))
2756 driver.switchTo().alert().dismiss();
2757 driver.findElement(By.css('.phrase'))
2758 .getAttribute("value
").then(function(value) {
2759 expect(value).toBe("abandon abandon ability
");
2765 // Custom BIP32 root key is used when changing the derivation path
2766 it('Can set derivation path for root key instead of phrase', function(done) {
2767 driver.findElement(By.css('#bip44 .account'))
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
");
2779 // Incorrect mnemonic shows error
2780 it('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'))
2786 .then(function(feedback) {
2787 expect(feedback).toBe("Invalid mnemonic
");
2793 // Incorrect word shows suggested replacement
2794 it('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'))
2800 .then(function(feedback) {
2801 var msg = "abiliti not
in wordlist
, did you mean ability
?";
2802 expect(feedback).toBe(msg);
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
2812 it('Shows word suggestion based on first four chars', function(done) {
2813 driver.findElement(By.css('.phrase'))
2815 driver.sleep(feedbackDelay).then(function() {
2816 driver.findElement(By.css('.feedback'))
2818 .then(function(feedback) {
2819 var msg = "ille not
in wordlist
, did you mean illegal
?";
2820 expect(feedback).toBe(msg);
2826 // Incorrect BIP32 root key shows error
2827 it('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'))
2833 .then(function(feedback) {
2834 var msg = "Invalid root key
";
2835 expect(feedback).toBe(msg);
2841 // Derivation path not starting with m shows error
2842 it('Shows error for derivation path not starting with m', function(done) {
2843 driver.findElement(By.css('#bip32-tab a'))
2845 driver.findElement(By.css('#bip32 .path'))
2847 driver.findElement(By.css('#bip32 .path'))
2849 driver.findElement(By.css('.phrase'))
2850 .sendKeys('abandon abandon ability');
2851 driver.sleep(feedbackDelay).then(function() {
2852 driver.findElement(By.css('.feedback'))
2854 .then(function(feedback) {
2855 var msg = "First character must be
'm'";
2856 expect(feedback).toBe(msg);
2862 // Derivation path containing invalid characters shows useful error
2863 it('Shows error for derivation path not starting with m', function(done) {
2864 driver.findElement(By.css('#bip32-tab a'))
2866 driver.findElement(By.css('#bip32 .path'))
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'))
2875 .then(function(feedback) {
2876 var msg = "Invalid characters
0wrong1 found at depth
2";
2877 expect(feedback).toBe(msg);
2883 // Github Issue 11: Default word length is 15
2884 // https://github.com/iancoleman/bip39/issues/11
2885 it('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");
2894 // Github Issue 12: Generate more rows with private keys hidden
2895 // https://github.com/iancoleman/bip39/issues/12
2896 it('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'))
2902 driver.findElement(By.css('.more'))
2904 driver.sleep(generateDelay).then(function() {
2905 driver.findElements(By.css('.privkey'))
2906 .then(function(els) {
2907 expect(els.length).toBe(40);
2909 testColumnValuesAreInvisible(done, "privkey
");
2914 // Github Issue 19: Mnemonic is not sensitive to whitespace
2915 // https://github.com/iancoleman/bip39/issues/19
2916 it('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
");
2931 // Github Issue 23: Part 1: Use correct derivation path when changing tabs
2932 // https://github.com/iancoleman/bip39/issues/23
2933 // This test was failing for default timeout of 5000ms so changed it to +10s
2934 it('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'))
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");
2958 }, generateDelay + 10000);
2960 // Github Issue 23 Part 2: Coin selection in derivation path
2961 // https://github.com/iancoleman/bip39/issues/23#issuecomment-238011920
2962 it('Uses the correct derivation path when changing coins', function(done) {
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");
2979 // Github Issue 26: When using a Root key derrived altcoins are incorrect
2980 // https://github.com/iancoleman/bip39/issues/26
2981 it('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
");
2998 // Selecting a language with no existing phrase should generate a phrase in
3000 it('Generate a random phrase when language is selected and no current phrase', function(done) {
3001 driver.findElement(By.css("a
[href
='#japanese']"))
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);
3013 // Selecting a language with existing phrase should update the phrase to use
3015 it('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']"))
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
");
3036 // Suggested replacement for erroneous word in non-English language
3037 it('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'))
3043 .then(function(feedback) {
3044 var msg = "zbbaglio not
in wordlist
, did you mean abbaglio
?";
3045 expect(feedback).toBe(msg);
3051 // Japanese word does not break across lines.
3053 // https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
3054 it('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
");
3063 // Language can be specified at page load using hash value in url
3064 it('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);
3078 // Entropy can be entered by the user
3079 it('Allows entropy to be entered', function(done) {
3080 driver.findElement(By.css('.use-entropy'))
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
");
3096 // A warning about entropy is shown to the user, with additional information
3097 it('Shows a warning about using entropy', function(done) {
3098 driver.findElement(By.css('.use-entropy'))
3100 driver.findElement(By.css('.entropy-container'))
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::*"))
3108 .then(function(notesText) {
3109 var detail = "flipping a fair coin
, rolling a fair dice
, noise measurements etc
";
3110 expect(notesText).toContain(detail);
3116 // The types of entropy available are described to the user
3117 it('Shows the types of entropy available', function(done) {
3118 driver.findElement(By.css('.entropy'))
3119 .getAttribute("placeholder
")
3120 .then(function(placeholderText) {
3129 for (var i=0; i<options.length; i++) {
3130 var option = options[i];
3131 expect(placeholderText).toContain(option);
3137 // The actual entropy used is shown to the user
3138 it('Shows the actual entropy used', function(done) {
3139 driver.findElement(By.css('.use-entropy'))
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'))
3146 .then(function(text) {
3147 expect(text).toMatch(/Filtered Entropy\s+AedEceAA/);
3153 // Binary entropy can be entered
3154 it('Allows binary entropy to be entered', function(done) {
3155 testEntropyType(done, "01", "binary
");
3158 // Base 6 entropy can be entered
3159 it('Allows base 6 entropy to be entered', function(done) {
3160 testEntropyType(done, "012345", "base
6");
3163 // Base 6 dice entropy can be entered
3164 it('Allows base 6 dice entropy to be entered', function(done) {
3165 testEntropyType(done, "123456", "base
6 (dice
)");
3168 // Base 10 entropy can be entered
3169 it('Allows base 10 entropy to be entered', function(done) {
3170 testEntropyType(done, "789", "base
10");
3173 // Hexadecimal entropy can be entered
3174 it('Allows hexadecimal entropy to be entered', function(done) {
3175 testEntropyType(done, "abcdef
", "hexadecimal
");
3178 // Dice entropy value is shown as the converted base 6 value
3179 // ie 123456 is converted to 123450
3180 it('Shows dice entropy as base 6', function(done) {
3181 driver.findElement(By.css('.use-entropy'))
3183 driver.findElement(By.css('.entropy'))
3184 .sendKeys("123456");
3185 driver.sleep(generateDelay).then(function() {
3186 driver.findElement(By.css('.entropy-container'))
3188 .then(function(text) {
3189 expect(text).toMatch(/Filtered Entropy\s+123450/);
3195 // The number of bits of entropy accumulated is shown
3196 it("Shows the number
of bits
of entropy
for 20 bits
of binary
", function(done) {
3197 testEntropyBits(done, "0000 0000 0000 0000 0000", "20");
3199 it("Shows the number
of bits
of entropy
for 1 bit
of binary
", function(done) {
3200 testEntropyBits(done, "0", "1");
3202 it("Shows the number
of bits
of entropy
for 4 bits
of binary
", function(done) {
3203 testEntropyBits(done, "0000", "4");
3205 it("Shows the number
of bits
of entropy
for 1 character
of base
6 (dice
)", function(done) {
3206 // 6 in card is 0 in base 6, 0 is mapped to 00 by entropy.js
3207 testEntropyBits(done, "6", "2");
3209 it("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");
3213 it("Shows the number
of bits
of entropy
for 1 character
of base
10 with 4 bis
", function(done) {
3214 // 8 in base 10 is mapped to 0 by entropy.js
3215 testEntropyBits(done, "8", "1");
3217 it("Shows the number
of bits
of entropy
for 1 character
of hex
", function(done) {
3218 testEntropyBits(done, "F
", "4");
3220 it("Shows the number
of bits
of entropy
for 2 characters
of base
10", function(done) {
3221 // 2 as base 10 is binary 010, 9 is mapped to binary 1 by entropy.js
3222 testEntropyBits(done, "29", "4");
3224 it("Shows the number
of bits
of entropy
for 2 characters
of hex
", function(done) {
3225 testEntropyBits(done, "0A
", "8");
3227 it("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");
3231 it("Shows the number
of bits
of entropy
for 2 characters
of hex
with 2 leading zeros
", function(done) {
3232 testEntropyBits(done, "2A
", "8");
3234 it("Shows the number
of bits
of entropy
for 2 characters
of hex
with 1 leading zero
", function(done) {
3235 testEntropyBits(done, "4A
", "8");
3237 it("Shows the number
of bits
of entropy
for 2 characters
of hex
with no leading zeros
", function(done) {
3238 testEntropyBits(done, "8A
", "8");
3240 it("Shows the number
of bits
of entropy
for 2 characters
of hex starting
with F
", function(done) {
3241 testEntropyBits(done, "FA
", "8");
3243 it("Shows the number
of bits
of entropy
for 4 characters
of hex
with leading zeros
", function(done) {
3244 testEntropyBits(done, "000A
", "16");
3246 it("Shows the number
of bits
of entropy
for 4 characters
of base
6", function(done) {
3247 // 5 in base 6 is mapped to binary 1
3248 testEntropyBits(done, "5555", "4");
3250 it("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
3253 testEntropyBits(done, "6666", "8");
3255 it("Shows the number
of bits
of entropy
for 4 charactes
of base
10", function(done) {
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");
3259 it("Shows the number
of bits
of entropy
for 4 characters
of hex
with 2 leading zeros
", function(done) {
3260 testEntropyBits(done, "222F
", "16");
3262 it("Shows the number
of bits
of entropy
for 4 characters
of hex starting
with F
", function(done) {
3263 testEntropyBits(done, "FFFF
", "16");
3265 it("Shows the number
of bits
of entropy
for 10 characters
of base
10", function(done) {
3266 // 10 events with 3 bits for each event
3267 testEntropyBits(done, "0000101017", "30");
3269 it("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");
3273 it("Shows the number
of bits
of entropy
for a full deck
of cards
", function(done) {
3274 // removing bias is 32*5 + 16*4 + 4*2
3275 testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
", "232");
3278 it("Shows details about the entered entropy
", function(done) {
3279 testEntropyFeedback(done,
3283 type: "hexadecimal
",
3287 strength: "less than a second
",
3291 it("Shows details about the entered entropy
", function(done) {
3292 testEntropyFeedback(done,
3294 entropy: "AAAAAAAA
",
3295 filtered: "AAAAAAAA
",
3296 type: "hexadecimal
",
3300 strength: "less than a second
- Repeats like
\"aaa
\" are easy to guess
",
3304 it("Shows details about the entered entropy
", function(done) {
3305 testEntropyFeedback(done,
3307 entropy: "AAAAAAAA B
",
3308 filtered: "AAAAAAAAB
",
3309 type: "hexadecimal
",
3313 strength: "less than a second
- Repeats like
\"aaa
\" are easy to guess
",
3317 it("Shows details about the entered entropy
", function(done) {
3318 testEntropyFeedback(done,
3320 entropy: "AAAAAAAA BBBBBBBB
",
3321 filtered: "AAAAAAAABBBBBBBB
",
3322 type: "hexadecimal
",
3326 strength: "less than a second
- Repeats like
\"aaa
\" are easy to guess
",
3330 it("Shows details about the entered entropy
", function(done) {
3331 testEntropyFeedback(done,
3333 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC
",
3334 filtered: "AAAAAAAABBBBBBBBCCCCCCCC
",
3335 type: "hexadecimal
",
3339 strength: "less than a second
",
3343 it("Shows details about the entered entropy
", function(done) {
3344 testEntropyFeedback(done,
3346 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
",
3347 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD
",
3348 type: "hexadecimal
",
3352 strength: "2 minutes
",
3356 it("Shows details about the entered entropy
", function(done) {
3357 testEntropyFeedback(done,
3359 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA
",
3360 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDA
",
3361 type: "hexadecimal
",
3369 it("Shows details about the entered entropy
", function(done) {
3370 testEntropyFeedback(done,
3372 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA EEEEEEEE
",
3373 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDAEEEEEEEE
",
3374 type: "hexadecimal
",
3378 strength: "3 years
",
3382 it("Shows details about the entered entropy
", function(done) {
3383 testEntropyFeedback(done,
3385 entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDA EEEEEEEE FFFFFFFF
",
3386 filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDAEEEEEEEEFFFFFFFF
",
3387 type: "hexadecimal
",
3391 strength: "centuries
",
3395 it("Shows details about the entered entropy
", function(done) {
3396 testEntropyFeedback(done,
3403 strength: "less than a second
",
3407 it("Shows details about the entered entropy
", function(done) {
3408 testEntropyFeedback(done,
3410 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
",
3411 type: "card (full deck
)",
3415 strength: "centuries
",
3419 it("Shows details about the entered entropy
", function(done) {
3420 testEntropyFeedback(done,
3422 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks3d
",
3423 type: "card (full deck
, 1 duplicate: 3d
)",
3427 strength: "centuries
",
3431 it("Shows details about the entered entropy
", function(done) {
3432 testEntropyFeedback(done,
3434 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d
",
3435 type: "card (2 duplicates: 3d
4d
, 1 missing: KS
)",
3439 strength: "centuries
",
3443 it("Shows details about the entered entropy
", function(done) {
3444 testEntropyFeedback(done,
3446 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d5d6d
",
3447 type: "card (4 duplicates: 3d
4d
5d
..., 1 missing: KS
)",
3451 strength: "centuries
",
3455 it("Shows details about the entered entropy
", function(done) {
3456 testEntropyFeedback(done,
3457 // Next test was throwing uncaught error in zxcvbn
3459 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsksac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
",
3460 type: "card (full deck
, 52 duplicates: ac
2c
3c
...)",
3464 strength: "centuries
",
3468 it("Shows details about the entered entropy
", function(done) {
3469 testEntropyFeedback(done,
3470 // Case insensitivity to duplicate cards
3473 type: "card (1 duplicate: AS
)",
3477 strength: "less than a second
",
3481 it("Shows details about the entered entropy
", function(done) {
3482 testEntropyFeedback(done,
3485 type: "card (1 duplicate: as
)",
3489 strength: "less than a second
",
3493 it("Shows details about the entered entropy
", function(done) {
3494 testEntropyFeedback(done,
3495 // Missing cards are detected
3497 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
",
3498 type: "card (1 missing: 9C
)",
3502 strength: "centuries
",
3506 it("Shows details about the entered entropy
", function(done) {
3507 testEntropyFeedback(done,
3509 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d
6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
",
3510 type: "card (2 missing: 9C
5D
)",
3514 strength: "centuries
",
3518 it("Shows details about the entered entropy
", function(done) {
3519 testEntropyFeedback(done,
3521 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d
6d7d8d9dtdjd kdah2h3h
5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks
",
3522 type: "card (4 missing: 9C
5D QD
...)",
3526 strength: "centuries
",
3530 it("Shows details about the entered entropy
", function(done) {
3531 testEntropyFeedback(done,
3532 // More than six missing cards does not show message
3534 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d
6d
8d9d jd kdah2h3h
5h6h7h8h9hthjhqhkh
2s3s4s5s6s7s8s9stsjsqsks
",
3539 strength: "centuries
",
3543 it("Shows details about the entered entropy
", function(done) {
3544 // multiple decks does not affect the bits per event
3545 // since the bits are hardcoded in entropy.js
3546 testEntropyFeedback(done,
3551 bitsPerEvent: "4.46",
3555 it("Shows details about the entered entropy
", function(done) {
3556 testEntropyFeedback(done,
3561 bitsPerEvent: "4.46",
3565 it("Shows details about the entered entropy
", function(done) {
3566 testEntropyFeedback(done,
3571 bitsPerEvent: "4.46",
3575 it("Shows details about the entered entropy
", function(done) {
3576 testEntropyFeedback(done,
3578 entropy: "3d3d3d3d
",
3581 bitsPerEvent: "4.46",
3585 it("Shows details about the entered entropy
", function(done) {
3586 testEntropyFeedback(done,
3588 entropy: "3d3d3d3d3d
",
3591 bitsPerEvent: "4.46",
3595 it("Shows details about the entered entropy
", function(done) {
3596 testEntropyFeedback(done,
3598 entropy: "3d3d3d3d3d3d
",
3601 bitsPerEvent: "4.46",
3605 it("Shows details about the entered entropy
", function(done) {
3606 testEntropyFeedback(done,
3608 entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
",
3611 bitsPerEvent: "4.46",
3612 strength: 'less than a second - Repeats like "abcabcabc
" are only slightly harder to guess than "abc
"',
3617 // Entropy is truncated from the left
3618 it('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'))
3627 driver.findElement(By.css('.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
");
3638 // Very large entropy results in very long mnemonics
3639 it('Converts very long entropy to very long mnemonics', function(done) {
3641 for (var i=0; i<33; i++) {
3642 entropy += "AAAAAAAA
"; // 3 words * 33 iterations = 99 words
3644 driver.findElement(By.css('.use-entropy'))
3646 driver.findElement(By.css('.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);
3658 // Is compatible with bip32jp entropy
3659 // https://bip32jp.github.io/english/index.html
3661 // Is incompatible with:
3664 it('Is compatible with bip32jp.github.io', function(done) {
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
";
3667 driver.findElement(By.css('.use-entropy'))
3669 driver.findElement(By.css('.entropy'))
3671 driver.sleep(generateDelay).then(function() {
3672 driver.findElement(By.css(".phrase
"))
3673 .getAttribute("value
").then(function(phrase) {
3674 expect(phrase).toBe(expectedPhrase);
3680 // Blank entropy does not generate mnemonic or addresses
3681 it('Does not generate mnemonic for blank entropy', function(done) {
3682 driver.findElement(By.css('.use-entropy'))
3684 driver.findElement(By.css('.entropy'))
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
"))
3698 .then(function(feedbackText) {
3699 expect(feedbackText).toBe("Blank entropy
");
3707 // Mnemonic length can be selected even for weak entropy
3708 it('Allows selection of mnemonic length even for weak entropy', function(done) {
3709 driver.findElement(By.css('.use-entropy'))
3711 driver.executeScript(function() {
3712 $(".mnemonic
-length
").val("18").trigger("change
");
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);
3727 // https://github.com/iancoleman/bip39/issues/33
3728 // Final cards should contribute entropy
3729 it('Uses as much entropy as possible for the mnemonic', function(done) {
3730 driver.findElement(By.css('.use-entropy'))
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() {
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'))
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() {
3745 driver.findElement(By.css(".phrase
"))
3746 .getAttribute("value
").then(function(newPhrase) {
3747 expect(originalPhrase).not.toEqual(newPhrase);
3756 // https://github.com/iancoleman/bip39/issues/35
3758 // TODO this doesn't work in selenium with firefox
3759 // see https://stackoverflow.com/q/40360223
3760 it('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");
3764 // generate a random mnemonic
3765 var generateEl
= driver
.findElement(By
.css('.generate'));
3767 // toggle qr to show (hidden by default)
3768 var phraseEl
= driver
.findElement(By
.css(".phrase"));
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;
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;
3786 .then(function(qrHidden
) {
3787 expect(qrHidden
).toBe(true);
3796 // BIP44 account extendend private key is shown
3797 // github issue 37 - compatibility with electrum
3798 it('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");
3811 // BIP44 account extendend public key is shown
3812 // github issue 37 - compatibility with electrum
3813 it('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");
3827 // BIP32 root key can be set as an xpub
3828 it('Generates addresses from xpub as bip32 root key', function(done
) {
3829 driver
.findElement(By
.css('#bip32-tab a'))
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
) {
3848 .then(function(privkey
) {
3849 expect(xprv
).toBe("NA");
3859 // xpub for bip32 root key will not work with hardened derivation paths
3860 it('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'))
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);
3882 // no root key shows feedback
3883 it('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'))
3887 driver
.sleep(feedbackDelay
).then(function() {
3888 // Check feedback is correct
3889 driver
.findElement(By
.css('.feedback'))
3891 .then(function(feedback
) {
3892 expect(feedback
).toBe("Invalid root key");
3899 // display error switching tabs while addresses are generating
3900 it('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'))
3908 driver
.findElement(By
.css('.rows-to-add'))
3911 driver
.findElement(By
.css('.phrase'))
3912 .sendKeys("abandon abandon ability");
3913 driver
.sleep(generateDelay
).then(function() {
3914 // change tabs which should cancel the previous generating
3915 driver
.findElement(By
.css('.rows-to-add'))
3917 driver
.findElement(By
.css('.rows-to-add'))
3919 driver
.findElement(By
.css('#bip32-tab a'))
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
);
3931 }, generateDelay
+ 10000);
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
3937 it('Pads hashed entropy with leading zeros', function(done
) {
3938 driver
.findElement(By
.css('.use-entropy'))
3940 driver
.executeScript(function() {
3941 $(".mnemonic-length").val("15").trigger("change");
3943 driver
.findElement(By
.css('.entropy'))
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");
3955 // Github pull request 55
3956 // https://github.com/iancoleman/bip39/pull/55
3958 it('Can set the derivation path on bip32 tab for bitcoincore', function(done
) {
3959 testClientSelect(done
, {
3961 bip32path: "m/0'/0'",
3962 useHardenedAddresses: "true",
3965 it('Can set the derivation path on bip32 tab for multibit', function(done
) {
3966 testClientSelect(done
, {
3968 bip32path: "m/0'/0",
3969 useHardenedAddresses: null,
3972 it('Can set the derivation path on bip32 tab for coinomi/ledger', function(done
) {
3973 testClientSelect(done
, {
3975 bip32path: "m/44'/0'/0'",
3976 useHardenedAddresses: null,
3981 // https://github.com/iancoleman/bip39/issues/58
3982 // bip32 derivation is correct, does not drop leading zeros
3984 // https://medium.com/@alexberegszaszi/why-do-my-bip32-wallets-disagree-6f3254cc5846
3985 it('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");
4002 // Japanese mnemonics generate incorrect bip32 seed
4003 // BIP39 seed is set from phrase
4004 it('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");
4019 // BIP49 official test vectors
4020 // https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki#test-vectors
4021 it('Generates BIP49 addresses matching the official test vectors', function(done
) {
4022 driver
.findElement(By
.css('#bip49-tab a'))
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");
4035 // BIP49 derivation path is shown
4036 it('Shows the bip49 derivation path', function(done
) {
4037 driver
.findElement(By
.css('#bip49-tab a'))
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");
4051 // BIP49 extended private key is shown
4052 it('Shows the bip49 extended private key', function(done
) {
4053 driver
.findElement(By
.css('#bip49-tab a'))
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");
4067 // BIP49 extended public key is shown
4068 it('Shows the bip49 extended public key', function(done
) {
4069 driver
.findElement(By
.css('#bip49-tab a'))
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");
4083 // BIP49 account field changes address list
4084 it('Can set the bip49 account field', function(done
) {
4085 driver
.findElement(By
.css('#bip49-tab a'))
4087 driver
.findElement(By
.css('#bip49 .account'))
4089 driver
.findElement(By
.css('#bip49 .account'))
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");
4101 // BIP49 change field changes address list
4102 it('Can set the bip49 change field', function(done
) {
4103 driver
.findElement(By
.css('#bip49-tab a'))
4105 driver
.findElement(By
.css('#bip49 .change'))
4107 driver
.findElement(By
.css('#bip49 .change'))
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");
4119 // BIP49 account extendend private key is shown
4120 it('Shows the bip49 account extended private key', function(done
) {
4121 driver
.findElement(By
.css('#bip49-tab a'))
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");
4135 // BIP49 account extendend public key is shown
4136 it('Shows the bip49 account extended public key', function(done
) {
4137 driver
.findElement(By
.css('#bip49-tab a'))
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");
4151 // Test selecting coin where bip49 is unavailable (eg CLAM)
4152 it('Shows an error on bip49 tab for coins without bip49', function(done
) {
4153 driver
.findElement(By
.css('#bip49-tab a'))
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('');
4193 // Cleared mnemonic and root key still allows addresses to be generated
4194 // https://github.com/iancoleman/bip39/issues/43
4195 it('Clears old root keys from memory when mnemonic is cleared', function(done
) {
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'))
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);
4228 // error trying to generate addresses from xpub with hardened derivation
4229 it('Shows error for hardened addresses with xpub root key', function(done
) {
4230 driver
.findElement(By
.css('#bip32-tab a'))
4232 driver
.executeScript(function() {
4233 $(".hardened-addresses").prop("checked", true);
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'))
4242 .then(function(feedback
) {
4243 var msg
= "Hardened derivation path is invalid with xpub key";
4244 expect(feedback
).toBe(msg
);
4250 // Litecoin uses ltub by default, and can optionally be set to xprv
4252 // https://github.com/iancoleman/bip39/issues/96
4253 // Issue with extended keys on Litecoin
4254 it('Uses ltub by default for litecoin, but can be set to xprv', function(done
) {
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
) {
4263 expect(rootKey
).toBe("Ltpv71G8qDifUiNesiPqf6h5V6eQ8ic77oxQiYtawiACjBEx3sTXNR2HGDGnHETYxESjqkMLFBkKhWVq67ey1B2MKQXannUqNy1RZVHbmrEjnEU");
4264 // set litecoin to use ltub
4265 driver
.executeScript(function() {
4266 $(".litecoin-use-ltub").prop("checked", false);
4267 $(".litecoin-use-ltub").trigger("change");
4269 driver
.sleep(generateDelay
).then(function() {
4270 driver
.findElement(By
.css('.root-key'))
4271 .getAttribute("value")
4272 .then(function(rootKey
) {
4273 expect(rootKey
).toBe("xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi");
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
4285 it('Warns when entropy is filtered and discarded', function(done
) {
4286 driver
.findElement(By
.css('.use-entropy'))
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");
4313 // Bitcoin Cash address can be set to use cashaddr format
4314 it('Can use cashaddr format for bitcoin cash addresses', function(done
) {
4315 driver
.executeScript(function() {
4316 $(".use-bch-cashaddr-addresses").prop("checked", true);
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");
4329 // Bitcoin Cash address can be set to use bitpay format
4330 it('Can use bitpay format for bitcoin cash addresses', function(done
) {
4331 driver
.executeScript(function() {
4332 $(".use-bch-bitpay-addresses").prop("checked", true);
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");
4345 // Bitcoin Cash address can be set to use legacy format
4346 it('Can use legacy format for bitcoin cash addresses', function(done
) {
4347 driver
.executeScript(function() {
4348 $(".use-bch-legacy-addresses").prop("checked", true);
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");
4361 // End of tests ported from old suit, so no more comments above each test now
4363 it('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
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'))
4375 driver
.findElement(By
.css('.more'))
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
) {
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);
4405 it('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
'))
4409 driver.findElement(By.css('.bip141
-path
'))
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
");
4424 it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) {
4425 driver.findElement(By.css('#bip141-tab a'))
4428 driver.executeScript(function() {
4429 $(".bip141
-semantics option
[selected
]").removeAttr("selected
");
4430 $(".bip141
-semantics option
").filter(function(i,e) {
4431 return $(e).html() == "P2WSH (1-of-1 multisig
)";
4432 }).prop("selected
", true);
4433 $(".bip141
-semantics
").trigger("change
");
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
");
4442 getFirstAddress(function(address) {
4443 expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r
");
4450 it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) {
4451 driver.findElement(By.css('#bip141-tab a'))
4453 // Choose P2WSH-in-P2SH
4454 driver.executeScript(function() {
4455 $(".bip141
-semantics option
[selected
]").removeAttr("selected
");
4456 $(".bip141
-semantics option
").filter(function(i,e) {
4457 return $(e).html() == "P2WSH nested
in P2SH (1-of-1 multisig
)";
4458 }).prop("selected
", true);
4459 $(".bip141
-semantics
").trigger("change
");
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
");
4468 getFirstAddress(function(address) {
4469 expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G
");
4476 it('Uses Vprv for bitcoin testnet p2wsh', function(done) {
4477 selectNetwork("BTC
- Bitcoin Testnet
");
4478 driver.findElement(By.css('#bip141-tab a'))
4481 driver.executeScript(function() {
4482 $(".bip141
-semantics option
[selected
]").removeAttr("selected
");
4483 $(".bip141
-semantics option
").filter(function(i,e) {
4484 return $(e).html() == "P2WSH (1-of-1 multisig
)";
4485 }).prop("selected
", true);
4486 $(".bip141
-semantics
").trigger("change
");
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
");
4500 it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) {
4501 selectNetwork("BTC
- Bitcoin Testnet
");
4502 driver.findElement(By.css('#bip141-tab a'))
4504 // Choose P2WSH-in-P2SH
4505 driver.executeScript(function() {
4506 $(".bip141
-semantics option
[selected
]").removeAttr("selected
");
4507 $(".bip141
-semantics option
").filter(function(i,e) {
4508 return $(e).html() == "P2WSH nested
in P2SH (1-of-1 multisig
)";
4509 }).prop("selected
", true);
4510 $(".bip141
-semantics
").trigger("change
");
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
");
4524 it('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'))
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
");
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
");
4552 it('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("");
4564 it('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'))
4570 driver.findElement(By.css('.word-indexes'))
4572 .then(function(indexes) {
4573 expect(indexes).toBe("0, 0, 1");
4579 it('Shows the derivation path for bip84 tab', function(done) {
4580 driver.findElement(By.css('#bip84-tab a'))
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");
4594 it('Shows the extended private key for bip84 tab', function(done) {
4595 driver.findElement(By.css('#bip84-tab a'))
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
");
4609 it('Shows the extended public key for bip84 tab', function(done) {
4610 driver.findElement(By.css('#bip84-tab a'))
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
");
4624 it('Changes the address list if bip84 account is changed', function(done) {
4625 driver.findElement(By.css('#bip84-tab a'))
4627 driver.findElement(By.css('#bip84 .account'))
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
");
4639 it('Changes the address list if bip84 change is changed', function(done) {
4640 driver.findElement(By.css('#bip84-tab a'))
4642 driver.findElement(By.css('#bip84 .change'))
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
");
4654 it('Passes the official BIP84 test spec for rootpriv', function(done) {
4655 driver.findElement(By.css('#bip84-tab a'))
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
");
4669 it('Passes the official BIP84 test spec for account 0 xprv', function(done) {
4670 driver.findElement(By.css('#bip84-tab a'))
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
");
4684 it('Passes the official BIP84 test spec for account 0 xpub', function(done) {
4685 driver.findElement(By.css('#bip84-tab a'))
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
");
4699 it('Passes the official BIP84 test spec for account 0 first address', function(done) {
4700 driver.findElement(By.css('#bip84-tab a'))
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
");
4712 it('Passes the official BIP84 test spec for account 0 first change address', function(done) {
4713 driver.findElement(By.css('#bip84-tab a'))
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'))
4719 driver.sleep(generateDelay).then(function() {
4720 getFirstAddress(function(address) {
4721 expect(address).toBe("bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el
");
4727 it('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);
4745 it('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'))
4750 driver.findElement(By.css('#bip32-path'))
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() {
4757 getFirstAddress(function(address) {
4758 expect(address).toBe("0x8943E785B4a5714FC87a3aFAad1eB1FeB602B118");
4764 it('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);
4769 driver.findElement(By.css('.bip38-password'))
4770 .sendKeys('bip38password');
4771 driver.findElement(By.css('.rows-to-add'))
4773 driver.findElement(By.css('.rows-to-add'))
4775 driver.findElement(By.css('.phrase'))
4776 .sendKeys('abandon abandon ability');
4777 driver.sleep(bip38delay).then(function() {
4779 getFirstRowValue(function(address) {
4780 expect(address).toBe("1NCvSdumA3ngMM9c4aqU56AM6rqXddfuXB
");
4782 getFirstRowValue(function(pubkey) {
4783 expect(pubkey).toBe("043f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3884a74447ea901729b1e73a999b7520e7cb55b4120e6432c64153ccab8a848e1
");
4785 getFirstRowValue(function(privkey) {
4786 expect(privkey).toBe("6PRNRiFnj1RoR3sXhymdCvoZCgnUHQpfupNdKkFbWJkwWQEKesWt1EDMDM
");
4792 }, bip38delay + 5000);
4794 it('Shows the checksum for the entropy', function(done) {
4795 driver.findElement(By.css('.use-entropy'))
4797 driver.findElement(By.css('.entropy'))
4798 .sendKeys("00000000000000000000000000000000");
4799 driver.sleep(generateDelay).then(function() {
4800 driver.findElement(By.css('.checksum'))
4802 .then(function(text) {
4803 expect(text).toBe("1");
4809 it('Shows the checksum for the entropy with the correct groupings', function(done) {
4810 driver.findElement(By.css('.use-entropy'))
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'))
4818 .then(function(text) {
4819 // first group is 9 bits, second group is 11
4820 expect(text).toBe("011010111 01110000110");
4826 it('Uses vprv for bitcoin testnet p2wpkh', function(done) {
4827 selectNetwork("BTC
- Bitcoin Testnet
");
4828 driver.findElement(By.css('#bip84-tab a'))
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
");
4842 it('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
");
4848 driver.findElement(By.css(".generate
-container
.warning
"))
4849 .getAttribute("class")
4850 .then(function(classes) {
4851 expect(classes).not.toContain("hidden
");
4856 it('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);
4861 driver.findElement(By.css(".generate
-container
.warning
"))
4862 .getAttribute("class")
4863 .then(function(classes) {
4864 expect(classes).toContain("hidden
");
4869 it('Shows a warning if overriding weak entropy with longer mnemonics', function(done) {
4870 driver.findElement(By.css('.use-entropy'))
4872 driver.findElement(By.css('.entropy'))
4873 .sendKeys("0123456789abcdef
"); // 6 words
4874 driver.executeScript(function() {
4875 $(".mnemonic
-length
").val("12").trigger("change
");
4877 driver.findElement(By.css(".weak
-entropy
-override
-warning
"))
4878 .getAttribute("class")
4879 .then(function(classes) {
4880 expect(classes).not.toContain("hidden
");
4885 it('Does not show a warning if entropy is stronger than mnemonic length', function(done) {
4886 driver.findElement(By.css('.use-entropy'))
4888 driver.findElement(By.css('.entropy'))
4889 .sendKeys("0123456789abcdef0123456789abcdef0123456789abcdef
"); // 18 words
4890 driver.executeScript(function() {
4891 $(".mnemonic
-length
").val("12").trigger("change
");
4893 driver.findElement(By.css(".weak
-entropy
-override
-warning
"))
4894 .getAttribute("class")
4895 .then(function(classes) {
4896 expect(classes).toContain("hidden
");
4901 it('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'))
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
");
4922 it('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'))
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
");
4943 it('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
4949 driver.findElement(By.css('#root-key'))
4950 .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
4951 driver.findElement(By.css('#bip49-tab a'))
4953 // bip49 addresses are shown
4954 driver.sleep(generateDelay).then(function() {
4955 getFirstAddress(function(address) {
4956 expect(address).toBe("3QG2Y9AA4xZ846gKHZqNf7mvVKbLqMKxr2
");
4963 // Allow converting mnemonic back to raw entropy value
4964 it('Converts mnemonics into raw entropy', function(done) {
4965 driver.findElement(By.css('.phrase'))
4966 .sendKeys('abandon abandon about');
4967 driver.sleep(generateDelay).then(function() {
4968 driver.findElement(By.css('.use-entropy'))
4970 driver.findElement(By.css('.entropy'))
4971 .getAttribute("value
")
4972 .then(function(entropy) {
4973 expect(entropy).toBe("00000001");
4974 driver.findElement(By.css('.phrase'))
4975 .getAttribute("value
")
4976 .then(function(phrase) {
4977 expect(phrase).toBe("abandon abandon about
");
4985 // Added Split Phrase Card Output
4986 it('Shows split prase cards', function(done) {
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];
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);
5015 // Pull Request 454 https://github.com/iancoleman/bip39/pull/454
5016 // Add BIP85 support
5017 it('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')
5033 it('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')
5052 // It allows manually specifying the entropy type
5053 it('Allows entropy type to be manually selected', function(done) {
5054 driver.findElement(By.css('.use-entropy'))
5056 // use decimal entropy
5057 driver.findElement(By.css('.entropy'))
5059 // manually change to binary entropy
5060 driver.executeScript(function() {
5061 $(".entropy
-container input
[value
='binary']").click();
5063 driver.sleep(entropyFeedbackDelay).then(function() {
5064 driver.findElement(By.css('.entropy-container'))
5066 .then(function(text) {
5067 // overide 91 to be just 1
5068 var key = "Filtered Entropy
";
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
";
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
";
5088 var reText = key + "\\s
+" + value;
5089 var re = new RegExp(reText);
5090 expect(text).toMatch(re);
5096 // https://github.com/iancoleman/bip39/issues/388
5097 // Make field for bip39 seed editable
5098 it('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
");
5109 // https://github.com/iancoleman/bip39/issues/169
5110 it('Generates ethereum addresses from a public key', function(done) {
5111 var pubkey = "xpub68UK3hrMEp2jLPxPASgXSiqiUsQsUWZHCeuu6NqcJLt259LMeWzwDyufXLN1QmjLeLRY5he4QfArDDLbsXiw3xN3kFcYtyDy74BY73RPhhW
";
5112 driver.findElement(By.css('.root-key'))
5114 driver.findElement(By.css('#bip32-tab a'))
5116 selectNetwork('ETH - Ethereum');
5117 driver.sleep(generateDelay).then(function() {
5118 getFirstAddress(function(address) {
5119 expect(address).toBe("0x1Bd54748903438C7E386b4a3fCbe16237A316a98");