X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=blobdiff_plain;f=tests%2Fspec%2Ftests.js;h=b2c3addd2da52dd8c049e1a19d46a1fce0a58f5b;hp=660249169ccda481913a3df4ffc11c2fad2c5223;hb=a67554c649438a4c16feb9806e48ce6dc8f4be75;hpb=93f3a286dbb0ffaf49fe549027485778df133d8d diff --git a/tests/spec/tests.js b/tests/spec/tests.js index 6602491..b2c3add 100644 --- a/tests/spec/tests.js +++ b/tests/spec/tests.js @@ -412,6 +412,13 @@ it('Allows selection of bitcoin testnet', function(done) { }; testNetwork(done, params); }); +it('Allows selection of bitcoin regtest', function(done) { + var params = { + selectText: "BTC - Bitcoin RegTest", + firstAddress: "mucaU5iiDaJDb69BHLeDv8JFfGiyg2nJKi", + }; + testNetwork(done, params); +}); it('Allows selection of litecoin', function(done) { var params = { selectText: "LTC - Litecoin", @@ -585,10 +592,9 @@ it('Allows selection of peercoin', function(done) { it('Allows selection of ethereum', function(done) { var params = { selectText: "ETH - Ethereum", - firstAddress: "0x20Bb0CD7dd4a255f558bCD1A34D21E27061Ac2CF", + firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772", }; testNetwork(done, params); - // TODO test private key and public key }); it('Allows selection of slimcoin', function(done) { var params = { @@ -1358,7 +1364,7 @@ it('Allows selection of Vpncoin', function(done) { it('Allows selection of VeChain', function(done) { var params = { selectText: "VET - VeChain", - firstAddress: "0x993680FDF7f4a6AbcD4b9Db23b92Bc6B08AF9e48", + firstAddress: "0xdba55B1B6070f3a733D5eDFf35F0da4A00E455F2", }; testNetwork(done, params); }); @@ -1414,21 +1420,21 @@ it('Allows selection of Energi', function(done) { it('Allows selection of Ethereum Classic', function(done) { var params = { selectText: "ETC - Ethereum Classic", - firstAddress: "0x8Ad2bc632591bb442CfBEA19AC919ef16480B162", + firstAddress: "0x3c05e5556693808367afB62eF3b63e35d6eD249A", }; testNetwork(done, params); }); it('Allows selection of Pirl', function(done) { var params = { selectText: "PIRL - Pirl", - firstAddress: "0xc85E5dc7287F759394E53e5ba62510a35cE0DcFF", + firstAddress: "0xe77FC0723dA122B5025CA79193c28563eB47e776", }; testNetwork(done, params); }); it('Allows selection of MIX', function(done) { var params = { selectText: "MIX - MIX", - firstAddress: "0x325C6118DD0f788B50998591B2a7A35FB0a4a402", + firstAddress: "0x98BC5e63aeb6A4e82d72850d20710F07E29A29F1", }; testNetwork(done, params); }); @@ -1443,28 +1449,28 @@ it('Allows selection of Monkey Project', function(done) { it('Allows selection of Musicoin', function(done) { var params = { selectText: "MUSIC - Musicoin", - firstAddress: "0x600c481Fa6100531357dD49B3aa042A8F56F6AB5", + firstAddress: "0xDc060e4A0b0313ea83Cf6B3A39B9db2D29004897", }; testNetwork(done, params); }); it('Allows selection of Poa', function(done) { var params = { selectText: "POA - Poa", - firstAddress: "0x6F0d9bA6fda8EAA31f24A9c9fef3321F9851329D", + firstAddress: "0x53aF28d754e106210C3d0467Dd581eaf7e3C5e60", }; testNetwork(done, params); }); it('Allows selection of Expanse', function(done) { var params = { selectText: "EXP - Expanse", - firstAddress: "0xEc6e7f6782a29353c32A9A104E849605a01546e4", + firstAddress: "0xf57FeAbf26582b6E3E666559d3B1Cc6fB2b2c5F6", }; testNetwork(done, params); }); it('Allows selection of Callisto', function(done) { var params = { selectText: "CLO - Callisto", - firstAddress: "0x57bE971d6E61315fB957a2BFC9202fbE31f49e89", + firstAddress: "0x4f9364F7420B317266C51Dc8eB979717D4dE3f4E", }; testNetwork(done, params); }); @@ -1562,21 +1568,21 @@ it('Allows selection of BlockStamp', function(done) { it('Allows selection of DEXON', function(done) { var params = { selectText: "DXN - DEXON", - firstAddress: "0x7c444Dd705c6Ecd6a4F926aFd38bC96d6BdcC3D5", + firstAddress: "0x136a58788033E028CCd740FbDec6734358DB56Ec", }; testNetwork(done, params); }); it('Allows selection of Ellaism', function(done) { var params = { selectText: "ELLA - Ellaism", - firstAddress: "0x9DA7b90b0c0Cf7a2EbbE1A20f9d9A663451a2F8D", + firstAddress: "0xa8B0BeA09eeBc41062308546a01d6E544277e2Ca", }; testNetwork(done, params); }); it('Allows selection of Ethersocial Network', function(done) { var params = { selectText: "ESN - Ethersocial Network", - firstAddress: "0x0685439123f9a1767Bad9b99258d72733783f64C", + firstAddress: "0x6EE99Be2A0C7F887a71e21C8608ACF0aa0D2b767", }; testNetwork(done, params); }); @@ -1618,7 +1624,7 @@ it('Allows selection of Elastos', function(done) { it('Allows selection of Energyweb', function(done) { var params = { selectText: "EWT - EnergyWeb", - firstAddress: "0x190aCfa6dA6Ff2D0a28Fbd0e02Aec493bCa5D7f7", + firstAddress: "0x22171474844Fc7E8E99A3A69CCf1eDb5574FdD4c", }; testNetwork(done, params); }); @@ -1629,6 +1635,27 @@ it('Allows selection of Thought', function(done) { }; testNetwork(done, params); }); +it('Allows selection of EtherCore', function(done) { + var params = { + selectText: "ERE - EtherCore", + firstAddress: "0x119e6EAC3Ce1b473D62d9fD847fb0ea222eF1D9e", + }; + testNetwork(done, params); +}); +it('Allows selection of RBTC - RSK', function(done) { + var params = { + selectText: "RBTC - RSK", + firstAddress: "RGtz5TDdtviAZ9haz1YAUNQzcGVFm5bQrP", + }; + testNetwork(done, params); +}); +it('Allows selection of tRBTC - RSK Testnet', function(done) { + var params = { + selectText: "tRBTC - RSK Testnet", + firstAddress: "RHkrWgnSdJHxQAqEsMErhUUa4icXY6xUUC", + }; + testNetwork(done, params); +}); // BIP39 seed is set from phrase it('Sets the bip39 seed from the prhase', function(done) { @@ -2002,11 +2029,7 @@ it('Allows the user to set the BIP32 root key', function(done) { }); // Setting BIP32 root key clears the existing phrase, passphrase and seed -// TODO this doesn't work in selenium with chrome it('Confirms the existing phrase should be cleared', function(done) { - if (browser == "chrome") { - pending("Selenium + Chrome headless bug for alert, see https://stackoverflow.com/q/45242264"); - } driver.findElement(By.css('.phrase')) .sendKeys('A non-blank but invalid value'); driver.findElement(By.css('.root-key')) @@ -2020,11 +2043,7 @@ it('Confirms the existing phrase should be cleared', function(done) { }); // Clearing of phrase, passphrase and seed can be cancelled by user -// TODO this doesn't work in selenium with chrome it('Allows the clearing of the phrase to be cancelled', function(done) { - if (browser == "chrome") { - pending("Selenium + Chrome headless bug for alert, see https://stackoverflow.com/q/45242264"); - } driver.findElement(By.css('.phrase')) .sendKeys('abandon abandon ability'); driver.sleep(generateDelay).then(function() { @@ -3694,6 +3713,106 @@ it('Can generate BIP141 addresses with P2WPKH-in-P2SH semanitcs', function(done) }); }); +it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) { + driver.findElement(By.css('#bip141-tab a')) + .click(); + // Choose P2WSH + driver.executeScript(function() { + $(".bip141-semantics option[selected]").removeAttr("selected"); + $(".bip141-semantics option").filter(function(i,e) { + return $(e).html() == "P2WSH (1-of-1 multisig)"; + }).prop("selected", true); + $(".bip141-semantics").trigger("change"); + }); + driver.findElement(By.css(".phrase")) + .sendKeys("abandon abandon ability"); + driver.sleep(generateDelay).then(function() { + driver.findElement(By.css("#root-key")) + .getAttribute("value") + .then(function(rootKey) { + expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6"); + getFirstAddress(function(address) { + expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r"); + done(); + }); + }) + }); +}); + +it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done) { + driver.findElement(By.css('#bip141-tab a')) + .click(); + // Choose P2WSH-in-P2SH + driver.executeScript(function() { + $(".bip141-semantics option[selected]").removeAttr("selected"); + $(".bip141-semantics option").filter(function(i,e) { + return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)"; + }).prop("selected", true); + $(".bip141-semantics").trigger("change"); + }); + driver.findElement(By.css(".phrase")) + .sendKeys("abandon abandon ability"); + driver.sleep(generateDelay).then(function() { + driver.findElement(By.css("#root-key")) + .getAttribute("value") + .then(function(rootKey) { + expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe"); + getFirstAddress(function(address) { + expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G"); + done(); + }); + }) + }); +}); + +it('Uses Vprv for bitcoin testnet p2wsh', function(done) { + selectNetwork("BTC - Bitcoin Testnet"); + driver.findElement(By.css('#bip141-tab a')) + .click() + // Choose P2WSH + driver.executeScript(function() { + $(".bip141-semantics option[selected]").removeAttr("selected"); + $(".bip141-semantics option").filter(function(i,e) { + return $(e).html() == "P2WSH (1-of-1 multisig)"; + }).prop("selected", true); + $(".bip141-semantics").trigger("change"); + }); + driver.findElement(By.css('.phrase')) + .sendKeys('abandon abandon ability'); + driver.sleep(generateDelay).then(function() { + driver.findElement(By.css('.root-key')) + .getAttribute("value") + .then(function(path) { + expect(path).toBe("Vprv16YtLrHXxePM5ja5hXQbiJs5JKDAc4WcaXo5rZcrVMU6bMhUg1oY7fpPku3i819gvMcHvq1h8aELDsyfCEs19vj1Q3iDHRrESWyJConkoT1"); + done(); + }) + }); +}); + +it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) { + selectNetwork("BTC - Bitcoin Testnet"); + driver.findElement(By.css('#bip141-tab a')) + .click() + // Choose P2WSH-in-P2SH + driver.executeScript(function() { + $(".bip141-semantics option[selected]").removeAttr("selected"); + $(".bip141-semantics option").filter(function(i,e) { + return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)"; + }).prop("selected", true); + $(".bip141-semantics").trigger("change"); + }); + driver.findElement(By.css('.phrase')) + .sendKeys('abandon abandon ability'); + driver.sleep(generateDelay).then(function() { + driver.findElement(By.css('.root-key')) + .getAttribute("value") + .then(function(path) { + expect(path).toBe("Uprv95RJn67y7xyEuRLHenkZYVUx9LkARJzAsVx3ZJMeyHMdVwosWD9K8JTe4Z1FeE4gwBVcnqKF3f82ZvJxkBxHS5E74fYnigxvqeke8ZV3Fp2"); + done(); + }) + }); +}); + it('Can generate BIP141 addresses with P2WPKH semanitcs', function(done) { // This result tested against bitcoinjs-lib test spec for segwit address // using the first private key of this mnemonic and default path m/0 @@ -4143,7 +4262,7 @@ it('Converts mnemonics into raw entropy', function(done) { driver.findElement(By.css('.entropy')) .getAttribute("value") .then(function(entropy) { - expect(entropy).toBe("00000000000000000000000000000001"); + expect(entropy).toBe("00000001"); driver.findElement(By.css('.phrase')) .getAttribute("value") .then(function(phrase) { @@ -4185,4 +4304,77 @@ it('Shows split prase cards', function(done) { }); }); +// It allows manually specifying the entropy type +it('Allows entropy type to be manually selected', function(done) { + driver.findElement(By.css('.use-entropy')) + .click(); + // use decimal entropy + driver.findElement(By.css('.entropy')) + .sendKeys("91"); + // manually change to binary entropy + driver.executeScript(function() { + $(".entropy-container input[value='binary']").click(); + }); + driver.sleep(entropyFeedbackDelay).then(function() { + driver.findElement(By.css('.entropy-container')) + .getText() + .then(function(text) { + // overide 91 to be just 1 + var key = "Filtered Entropy"; + var value = "1"; + var reText = key + "\\s+" + value; + var re = new RegExp(reText); + expect(text).toMatch(re); + // overide automatic decimal to binary + var key = "Entropy Type"; + var value = "binary"; + var reText = key + "\\s+" + value; + var re = new RegExp(reText); + expect(text).toMatch(re); + // overide 2 events to 1 + var key = "Event Count"; + var value = 1; + var reText = key + "\\s+" + value; + var re = new RegExp(reText); + expect(text).toMatch(re); + // overide log2(10)*2 bits to 1 bit + var key = "Total Bits"; + var value = 1; + var reText = key + "\\s+" + value; + var re = new RegExp(reText); + expect(text).toMatch(re); + done(); + }); + }); +}); + +// https://github.com/iancoleman/bip39/issues/388 +// Make field for bip39 seed editable +it('Generates addresses when seed is set', function(done) { + driver.findElement(By.css('.seed')) + .sendKeys("20da140d3dd1df8713cefcc4d54ce0e445b4151027a1ab567b832f6da5fcc5afc1c3a3f199ab78b8e0ab4652efd7f414ac2c9a3b81bceb879a70f377aa0a58f3"); + driver.sleep(generateDelay).then(function() { + getFirstAddress(function(address) { + expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug"); + done(); + }); + }); +}); + +// https://github.com/iancoleman/bip39/issues/169 +it('Generates ethereum addresses from a public key', function(done) { + var pubkey = "xpub68UK3hrMEp2jLPxPASgXSiqiUsQsUWZHCeuu6NqcJLt259LMeWzwDyufXLN1QmjLeLRY5he4QfArDDLbsXiw3xN3kFcYtyDy74BY73RPhhW"; + driver.findElement(By.css('.root-key')) + .sendKeys(pubkey); + driver.findElement(By.css('#bip32-tab a')) + .click() + selectNetwork('ETH - Ethereum'); + driver.sleep(generateDelay).then(function() { + getFirstAddress(function(address) { + expect(address).toBe("0x1Bd54748903438C7E386b4a3fCbe16237A316a98"); + done(); + }); + }); +}); + });