mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-06 19:03:49 +00:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de8e5bc11f | ||
|
|
5c1003dde3 | ||
|
|
a78f4e280c | ||
|
|
4e9b492ca4 | ||
|
|
91eb2cbcfd | ||
|
|
c51bb4f9e5 | ||
|
|
3fa0f4cbef | ||
|
|
92fb39311e | ||
|
|
d00c719932 | ||
|
|
ab1bd64d52 | ||
|
|
aab3645f21 | ||
|
|
66419cf39c |
@@ -6858,6 +6858,14 @@ button.close {
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
.csv {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
white-space: pre;
|
||||
overflow-wrap: normal;
|
||||
overflow-x: scroll;
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
<meta content="Mnemonic code for generating deterministic keys" name="description"/>
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||
@@ -6869,7 +6877,7 @@ button.close {
|
||||
<div class="container">
|
||||
|
||||
<h1 class="text-center">Mnemonic Code Converter</h1>
|
||||
<p class="version">v0.3.1</p>
|
||||
<p class="version">v0.3.2</p>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@@ -7058,6 +7066,9 @@ button.close {
|
||||
<li id="bip49-tab">
|
||||
<a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
|
||||
</li>
|
||||
<li id="bip84-tab">
|
||||
<a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
|
||||
</li>
|
||||
<li id="bip141-tab">
|
||||
<a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
|
||||
</li>
|
||||
@@ -7341,6 +7352,86 @@ button.close {
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="bip84" class="tab-pane">
|
||||
<form class="form-horizontal" role="form">
|
||||
<br>
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-10">
|
||||
<p>
|
||||
For more info see the
|
||||
<a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="purpose" class="col-sm-2 control-label">
|
||||
Purpose
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="purpose" type="text" class="purpose form-control" value="84" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="coin" class="col-sm-2 control-label">
|
||||
Coin
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="coin" type="text" class="coin form-control" value="0" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account" class="col-sm-2 control-label">
|
||||
Account
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="account" type="text" class="account form-control" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="change" class="col-sm-2 control-label">
|
||||
External / Internal
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="change" type="text" class="change form-control" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account-xprv" class="col-sm-2 control-label">
|
||||
<span>Account Extended Private Key</span>
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account-xpub" class="col-sm-2 control-label">
|
||||
<span>Account Extended Public Key</span>
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<form class="form-horizontal" role="form">
|
||||
<div class="form-group">
|
||||
@@ -7374,42 +7465,59 @@ button.close {
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Path</span>
|
||||
<button class="index-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Address</span>
|
||||
<button class="address-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Public Key</span>
|
||||
<button class="public-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Private Key</span>
|
||||
<button class="private-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody class="addresses monospace">
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<ul class="addresses-type nav nav-tabs" role="tablist">
|
||||
<li id="table-tab" class="active">
|
||||
<a href="#table" role="tab" data-toggle="tab">Table</a>
|
||||
</li>
|
||||
<li id="csv-tab">
|
||||
<a href="#csv" role="tab" data-toggle="tab">CSV</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="addresses-type tab-content">
|
||||
<div id="table" class="tab-pane active">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Path</span>
|
||||
<button class="index-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Address</span>
|
||||
<button class="address-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Public Key</span>
|
||||
<button class="public-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Private Key</span>
|
||||
<button class="private-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody class="addresses monospace">
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="csv" class="tab-pane">
|
||||
<div class="col-md-12">
|
||||
<textarea class="csv form-control" rows="25" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span>Show</span>
|
||||
@@ -50855,6 +50963,18 @@ bitcoinjs.bitcoin.networks.myriadcoin = {
|
||||
wif: 0xb2
|
||||
};
|
||||
|
||||
|
||||
bitcoinjs.bitcoin.networks.onixcoin = {
|
||||
messagePrefix: 'unused',
|
||||
bip32: {
|
||||
public: 0x049d7cb2,
|
||||
private: 0x049d7878
|
||||
},
|
||||
pubKeyHash: 0x4B,
|
||||
scriptHash: 0x05,
|
||||
wif: 0x80
|
||||
};
|
||||
|
||||
bitcoinjs.bitcoin.networks.pivx = {
|
||||
messagePrefix: 'unused',
|
||||
bip32: {
|
||||
@@ -50942,6 +51062,17 @@ bitcoinjs.bitcoin.networks.litecoinXprv = {
|
||||
scriptHash: 0x32,
|
||||
wif: 0xb0
|
||||
};
|
||||
|
||||
bitcoinjs.bitcoin.networks.komodo = {
|
||||
messagePrefix: '\x18Komodo Signed Message:\n',
|
||||
bip32: {
|
||||
public: 0x0488B21E,
|
||||
private: 0x0488ADE4
|
||||
},
|
||||
pubKeyHash: 0x3c,
|
||||
scriptHash: 0x55,
|
||||
wif: 0xbc
|
||||
};
|
||||
</script>
|
||||
<script>(function() {
|
||||
|
||||
@@ -74567,6 +74698,7 @@ window.Entropy = new (function() {
|
||||
DOM.bip32tab = $("#bip32-tab");
|
||||
DOM.bip44tab = $("#bip44-tab");
|
||||
DOM.bip49tab = $("#bip49-tab");
|
||||
DOM.bip84tab = $("#bip84-tab");
|
||||
DOM.bip141tab = $("#bip141-tab");
|
||||
DOM.bip32panel = $("#bip32");
|
||||
DOM.bip44panel = $("#bip44");
|
||||
@@ -74588,6 +74720,13 @@ window.Entropy = new (function() {
|
||||
DOM.bip49accountXprv = $("#bip49 .account-xprv");
|
||||
DOM.bip49accountXpub = $("#bip49 .account-xpub");
|
||||
DOM.bip49change = $("#bip49 .change");
|
||||
DOM.bip84path = $("#bip84-path");
|
||||
DOM.bip84purpose = $("#bip84 .purpose");
|
||||
DOM.bip84coin = $("#bip84 .coin");
|
||||
DOM.bip84account = $("#bip84 .account");
|
||||
DOM.bip84accountXprv = $("#bip84 .account-xprv");
|
||||
DOM.bip84accountXpub = $("#bip84 .account-xpub");
|
||||
DOM.bip84change = $("#bip84 .change");
|
||||
DOM.bip141unavailable = $("#bip141 .unavailable");
|
||||
DOM.bip141available = $("#bip141 .available");
|
||||
DOM.bip141path = $("#bip141-path");
|
||||
@@ -74597,6 +74736,8 @@ window.Entropy = new (function() {
|
||||
DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
|
||||
DOM.useBitpayAddresses = $(".use-bitpay-addresses");
|
||||
DOM.addresses = $(".addresses");
|
||||
DOM.csvTab = $("#csv-tab a");
|
||||
DOM.csv = $(".csv");
|
||||
DOM.rowsToAdd = $(".rows-to-add");
|
||||
DOM.more = $(".more");
|
||||
DOM.moreRowsStartIndex = $(".more-rows-start-index");
|
||||
@@ -74631,6 +74772,8 @@ window.Entropy = new (function() {
|
||||
DOM.bip44change.on("input", calcForDerivationPath);
|
||||
DOM.bip49account.on("input", calcForDerivationPath);
|
||||
DOM.bip49change.on("input", calcForDerivationPath);
|
||||
DOM.bip84account.on("input", calcForDerivationPath);
|
||||
DOM.bip84change.on("input", calcForDerivationPath);
|
||||
DOM.bip141path.on("input", calcForDerivationPath);
|
||||
DOM.bip141semantics.on("change", tabChanged);
|
||||
DOM.tab.on("shown.bs.tab", tabChanged);
|
||||
@@ -74639,6 +74782,7 @@ window.Entropy = new (function() {
|
||||
DOM.addressToggle.on("click", toggleAddresses);
|
||||
DOM.publicKeyToggle.on("click", togglePublicKeys);
|
||||
DOM.privateKeyToggle.on("click", togglePrivateKeys);
|
||||
DOM.csvTab.on("click", updateCsv);
|
||||
DOM.languages.on("click", languageChanged);
|
||||
DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
|
||||
setQrEvents(DOM.showQrEls);
|
||||
@@ -74871,6 +75015,9 @@ window.Entropy = new (function() {
|
||||
else if (bip49TabSelected()) {
|
||||
displayBip49Info();
|
||||
}
|
||||
else if (bip84TabSelected()) {
|
||||
displayBip84Info();
|
||||
}
|
||||
displayBip32Info();
|
||||
}
|
||||
|
||||
@@ -75073,6 +75220,21 @@ window.Entropy = new (function() {
|
||||
console.log("Using derivation path from BIP49 tab: " + derivationPath);
|
||||
return derivationPath;
|
||||
}
|
||||
else if (bip84TabSelected()) {
|
||||
var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
|
||||
var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
|
||||
var account = parseIntNoNaN(DOM.bip84account.val(), 0);
|
||||
var change = parseIntNoNaN(DOM.bip84change.val(), 0);
|
||||
var path = "m/";
|
||||
path += purpose + "'/";
|
||||
path += coin + "'/";
|
||||
path += account + "'/";
|
||||
path += change;
|
||||
DOM.bip84path.val(path);
|
||||
var derivationPath = DOM.bip84path.val();
|
||||
console.log("Using derivation path from BIP84 tab: " + derivationPath);
|
||||
return derivationPath;
|
||||
}
|
||||
else if (bip32TabSelected()) {
|
||||
var derivationPath = DOM.bip32path.val();
|
||||
console.log("Using derivation path from BIP32 tab: " + derivationPath);
|
||||
@@ -75173,6 +75335,24 @@ window.Entropy = new (function() {
|
||||
DOM.bip49accountXpub.val(accountXpub);
|
||||
}
|
||||
|
||||
function displayBip84Info() {
|
||||
// Get the derivation path for the account
|
||||
var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
|
||||
var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
|
||||
var account = parseIntNoNaN(DOM.bip84account.val(), 0);
|
||||
var path = "m/";
|
||||
path += purpose + "'/";
|
||||
path += coin + "'/";
|
||||
path += account + "'/";
|
||||
// Calculate the account extended keys
|
||||
var accountExtendedKey = calcBip32ExtendedKey(path);
|
||||
var accountXprv = accountExtendedKey.toBase58();
|
||||
var accountXpub = accountExtendedKey.neutered().toBase58();
|
||||
// Display the extended keys
|
||||
DOM.bip84accountXprv.val(accountXprv);
|
||||
DOM.bip84accountXpub.val(accountXpub);
|
||||
}
|
||||
|
||||
function displayBip32Info() {
|
||||
// Display the key
|
||||
DOM.seed.val(seed);
|
||||
@@ -75213,11 +75393,12 @@ window.Entropy = new (function() {
|
||||
}
|
||||
|
||||
function segwitSelected() {
|
||||
return bip49TabSelected() || bip141TabSelected();
|
||||
return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
|
||||
}
|
||||
|
||||
function p2wpkhSelected() {
|
||||
return bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
|
||||
return bip84TabSelected() ||
|
||||
bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
|
||||
}
|
||||
|
||||
function p2wpkhInP2shSelected() {
|
||||
@@ -75298,6 +75479,7 @@ window.Entropy = new (function() {
|
||||
addAddressToList(indexText, address, pubkey, privkey);
|
||||
if (isLast) {
|
||||
hidePending();
|
||||
updateCsv();
|
||||
}
|
||||
}, 50)
|
||||
}
|
||||
@@ -75338,6 +75520,7 @@ window.Entropy = new (function() {
|
||||
|
||||
function clearAddressesList() {
|
||||
DOM.addresses.empty();
|
||||
DOM.csv.val("");
|
||||
stopGenerating();
|
||||
}
|
||||
|
||||
@@ -75798,6 +75981,10 @@ window.Entropy = new (function() {
|
||||
return DOM.bip49tab.hasClass("active");
|
||||
}
|
||||
|
||||
function bip84TabSelected() {
|
||||
return DOM.bip84tab.hasClass("active");
|
||||
}
|
||||
|
||||
function bip141TabSelected() {
|
||||
return DOM.bip141tab.hasClass("active");
|
||||
}
|
||||
@@ -75805,6 +75992,7 @@ window.Entropy = new (function() {
|
||||
function setHdCoin(coinValue) {
|
||||
DOM.bip44coin.val(coinValue);
|
||||
DOM.bip49coin.val(coinValue);
|
||||
DOM.bip84coin.val(coinValue);
|
||||
}
|
||||
|
||||
function showSegwitAvailable() {
|
||||
@@ -75888,6 +76076,26 @@ window.Entropy = new (function() {
|
||||
DOM.entropyWordIndexes.text(wordIndexesStr);
|
||||
}
|
||||
|
||||
function updateCsv() {
|
||||
var tableCsv = "path,address,public key,private key\n";
|
||||
var rows = DOM.addresses.find("tr");
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
var row = $(rows[i]);
|
||||
var cells = row.find("td");
|
||||
for (var j=0; j<cells.length; j++) {
|
||||
var cell = $(cells[j]);
|
||||
if (!cell.children().hasClass("invisible")) {
|
||||
tableCsv = tableCsv + cell.text();
|
||||
}
|
||||
if (j != cells.length - 1) {
|
||||
tableCsv = tableCsv + ",";
|
||||
}
|
||||
}
|
||||
tableCsv = tableCsv + "\n";
|
||||
}
|
||||
DOM.csv.val(tableCsv);
|
||||
}
|
||||
|
||||
var networks = [
|
||||
{
|
||||
name: "BCH - Bitcoin Cash",
|
||||
@@ -75994,6 +76202,14 @@ window.Entropy = new (function() {
|
||||
setHdCoin(26);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "KMD - Komodo",
|
||||
bip49available: false,
|
||||
onSelect: function() {
|
||||
network = bitcoinjs.bitcoin.networks.komodo;
|
||||
setHdCoin(141);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LTC - Litecoin",
|
||||
segwitAvailable: true,
|
||||
@@ -76027,6 +76243,14 @@ window.Entropy = new (function() {
|
||||
setHdCoin(7);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ONX - Onixcoin",
|
||||
segwitAvailable: false,
|
||||
onSelect: function() {
|
||||
network = bitcoinjs.bitcoin.networks.onixcoin;
|
||||
setHdCoin(174);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "PIVX - PIVX",
|
||||
segwitAvailable: false,
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
# 0.3.2
|
||||
|
||||
* Add Onixcoin
|
||||
* Add Komodo
|
||||
* BIP84 tab for derivation path
|
||||
* CSV tab for derived addresses
|
||||
|
||||
# 0.3.1
|
||||
|
||||
* Populate entropy field with hex value used from PRNG
|
||||
|
||||
@@ -95,3 +95,11 @@ body {
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
.csv {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
white-space: pre;
|
||||
overflow-wrap: normal;
|
||||
overflow-x: scroll;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
174
src/index.html
174
src/index.html
@@ -15,7 +15,7 @@
|
||||
<div class="container">
|
||||
|
||||
<h1 class="text-center">Mnemonic Code Converter</h1>
|
||||
<p class="version">v0.3.1</p>
|
||||
<p class="version">v0.3.2</p>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@@ -204,6 +204,9 @@
|
||||
<li id="bip49-tab">
|
||||
<a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
|
||||
</li>
|
||||
<li id="bip84-tab">
|
||||
<a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
|
||||
</li>
|
||||
<li id="bip141-tab">
|
||||
<a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
|
||||
</li>
|
||||
@@ -487,6 +490,86 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="bip84" class="tab-pane">
|
||||
<form class="form-horizontal" role="form">
|
||||
<br>
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-10">
|
||||
<p>
|
||||
For more info see the
|
||||
<a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="purpose" class="col-sm-2 control-label">
|
||||
Purpose
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="purpose" type="text" class="purpose form-control" value="84" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="coin" class="col-sm-2 control-label">
|
||||
Coin
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="coin" type="text" class="coin form-control" value="0" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account" class="col-sm-2 control-label">
|
||||
Account
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="account" type="text" class="account form-control" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="change" class="col-sm-2 control-label">
|
||||
External / Internal
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="change" type="text" class="change form-control" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account-xprv" class="col-sm-2 control-label">
|
||||
<span>Account Extended Private Key</span>
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="account-xpub" class="col-sm-2 control-label">
|
||||
<span>Account Extended Public Key</span>
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
|
||||
<div class="col-sm-10">
|
||||
<input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<form class="form-horizontal" role="form">
|
||||
<div class="form-group">
|
||||
@@ -520,42 +603,59 @@
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Path</span>
|
||||
<button class="index-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Address</span>
|
||||
<button class="address-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Public Key</span>
|
||||
<button class="public-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Private Key</span>
|
||||
<button class="private-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody class="addresses monospace">
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<ul class="addresses-type nav nav-tabs" role="tablist">
|
||||
<li id="table-tab" class="active">
|
||||
<a href="#table" role="tab" data-toggle="tab">Table</a>
|
||||
</li>
|
||||
<li id="csv-tab">
|
||||
<a href="#csv" role="tab" data-toggle="tab">CSV</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="addresses-type tab-content">
|
||||
<div id="table" class="tab-pane active">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Path</span>
|
||||
<button class="index-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Address</span>
|
||||
<button class="address-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Public Key</span>
|
||||
<button class="public-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
<div class="input-group">
|
||||
<span>Private Key</span>
|
||||
<button class="private-key-toggle">Toggle</button>
|
||||
</div>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody class="addresses monospace">
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
<tr><td> </td><td> </td><td> </td><td> </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="csv" class="tab-pane">
|
||||
<div class="col-md-12">
|
||||
<textarea class="csv form-control" rows="25" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span>Show</span>
|
||||
|
||||
@@ -207,6 +207,18 @@ bitcoinjs.bitcoin.networks.myriadcoin = {
|
||||
wif: 0xb2
|
||||
};
|
||||
|
||||
|
||||
bitcoinjs.bitcoin.networks.onixcoin = {
|
||||
messagePrefix: 'unused',
|
||||
bip32: {
|
||||
public: 0x049d7cb2,
|
||||
private: 0x049d7878
|
||||
},
|
||||
pubKeyHash: 0x4B,
|
||||
scriptHash: 0x05,
|
||||
wif: 0x80
|
||||
};
|
||||
|
||||
bitcoinjs.bitcoin.networks.pivx = {
|
||||
messagePrefix: 'unused',
|
||||
bip32: {
|
||||
@@ -294,3 +306,14 @@ bitcoinjs.bitcoin.networks.litecoinXprv = {
|
||||
scriptHash: 0x32,
|
||||
wif: 0xb0
|
||||
};
|
||||
|
||||
bitcoinjs.bitcoin.networks.komodo = {
|
||||
messagePrefix: '\x18Komodo Signed Message:\n',
|
||||
bip32: {
|
||||
public: 0x0488B21E,
|
||||
private: 0x0488ADE4
|
||||
},
|
||||
pubKeyHash: 0x3c,
|
||||
scriptHash: 0x55,
|
||||
wif: 0xbc
|
||||
};
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
DOM.bip32tab = $("#bip32-tab");
|
||||
DOM.bip44tab = $("#bip44-tab");
|
||||
DOM.bip49tab = $("#bip49-tab");
|
||||
DOM.bip84tab = $("#bip84-tab");
|
||||
DOM.bip141tab = $("#bip141-tab");
|
||||
DOM.bip32panel = $("#bip32");
|
||||
DOM.bip44panel = $("#bip44");
|
||||
@@ -74,6 +75,13 @@
|
||||
DOM.bip49accountXprv = $("#bip49 .account-xprv");
|
||||
DOM.bip49accountXpub = $("#bip49 .account-xpub");
|
||||
DOM.bip49change = $("#bip49 .change");
|
||||
DOM.bip84path = $("#bip84-path");
|
||||
DOM.bip84purpose = $("#bip84 .purpose");
|
||||
DOM.bip84coin = $("#bip84 .coin");
|
||||
DOM.bip84account = $("#bip84 .account");
|
||||
DOM.bip84accountXprv = $("#bip84 .account-xprv");
|
||||
DOM.bip84accountXpub = $("#bip84 .account-xpub");
|
||||
DOM.bip84change = $("#bip84 .change");
|
||||
DOM.bip141unavailable = $("#bip141 .unavailable");
|
||||
DOM.bip141available = $("#bip141 .available");
|
||||
DOM.bip141path = $("#bip141-path");
|
||||
@@ -83,6 +91,8 @@
|
||||
DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
|
||||
DOM.useBitpayAddresses = $(".use-bitpay-addresses");
|
||||
DOM.addresses = $(".addresses");
|
||||
DOM.csvTab = $("#csv-tab a");
|
||||
DOM.csv = $(".csv");
|
||||
DOM.rowsToAdd = $(".rows-to-add");
|
||||
DOM.more = $(".more");
|
||||
DOM.moreRowsStartIndex = $(".more-rows-start-index");
|
||||
@@ -117,6 +127,8 @@
|
||||
DOM.bip44change.on("input", calcForDerivationPath);
|
||||
DOM.bip49account.on("input", calcForDerivationPath);
|
||||
DOM.bip49change.on("input", calcForDerivationPath);
|
||||
DOM.bip84account.on("input", calcForDerivationPath);
|
||||
DOM.bip84change.on("input", calcForDerivationPath);
|
||||
DOM.bip141path.on("input", calcForDerivationPath);
|
||||
DOM.bip141semantics.on("change", tabChanged);
|
||||
DOM.tab.on("shown.bs.tab", tabChanged);
|
||||
@@ -125,6 +137,7 @@
|
||||
DOM.addressToggle.on("click", toggleAddresses);
|
||||
DOM.publicKeyToggle.on("click", togglePublicKeys);
|
||||
DOM.privateKeyToggle.on("click", togglePrivateKeys);
|
||||
DOM.csvTab.on("click", updateCsv);
|
||||
DOM.languages.on("click", languageChanged);
|
||||
DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
|
||||
setQrEvents(DOM.showQrEls);
|
||||
@@ -357,6 +370,9 @@
|
||||
else if (bip49TabSelected()) {
|
||||
displayBip49Info();
|
||||
}
|
||||
else if (bip84TabSelected()) {
|
||||
displayBip84Info();
|
||||
}
|
||||
displayBip32Info();
|
||||
}
|
||||
|
||||
@@ -559,6 +575,21 @@
|
||||
console.log("Using derivation path from BIP49 tab: " + derivationPath);
|
||||
return derivationPath;
|
||||
}
|
||||
else if (bip84TabSelected()) {
|
||||
var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
|
||||
var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
|
||||
var account = parseIntNoNaN(DOM.bip84account.val(), 0);
|
||||
var change = parseIntNoNaN(DOM.bip84change.val(), 0);
|
||||
var path = "m/";
|
||||
path += purpose + "'/";
|
||||
path += coin + "'/";
|
||||
path += account + "'/";
|
||||
path += change;
|
||||
DOM.bip84path.val(path);
|
||||
var derivationPath = DOM.bip84path.val();
|
||||
console.log("Using derivation path from BIP84 tab: " + derivationPath);
|
||||
return derivationPath;
|
||||
}
|
||||
else if (bip32TabSelected()) {
|
||||
var derivationPath = DOM.bip32path.val();
|
||||
console.log("Using derivation path from BIP32 tab: " + derivationPath);
|
||||
@@ -659,6 +690,24 @@
|
||||
DOM.bip49accountXpub.val(accountXpub);
|
||||
}
|
||||
|
||||
function displayBip84Info() {
|
||||
// Get the derivation path for the account
|
||||
var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
|
||||
var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
|
||||
var account = parseIntNoNaN(DOM.bip84account.val(), 0);
|
||||
var path = "m/";
|
||||
path += purpose + "'/";
|
||||
path += coin + "'/";
|
||||
path += account + "'/";
|
||||
// Calculate the account extended keys
|
||||
var accountExtendedKey = calcBip32ExtendedKey(path);
|
||||
var accountXprv = accountExtendedKey.toBase58();
|
||||
var accountXpub = accountExtendedKey.neutered().toBase58();
|
||||
// Display the extended keys
|
||||
DOM.bip84accountXprv.val(accountXprv);
|
||||
DOM.bip84accountXpub.val(accountXpub);
|
||||
}
|
||||
|
||||
function displayBip32Info() {
|
||||
// Display the key
|
||||
DOM.seed.val(seed);
|
||||
@@ -699,11 +748,12 @@
|
||||
}
|
||||
|
||||
function segwitSelected() {
|
||||
return bip49TabSelected() || bip141TabSelected();
|
||||
return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
|
||||
}
|
||||
|
||||
function p2wpkhSelected() {
|
||||
return bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
|
||||
return bip84TabSelected() ||
|
||||
bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
|
||||
}
|
||||
|
||||
function p2wpkhInP2shSelected() {
|
||||
@@ -784,6 +834,7 @@
|
||||
addAddressToList(indexText, address, pubkey, privkey);
|
||||
if (isLast) {
|
||||
hidePending();
|
||||
updateCsv();
|
||||
}
|
||||
}, 50)
|
||||
}
|
||||
@@ -824,6 +875,7 @@
|
||||
|
||||
function clearAddressesList() {
|
||||
DOM.addresses.empty();
|
||||
DOM.csv.val("");
|
||||
stopGenerating();
|
||||
}
|
||||
|
||||
@@ -1284,6 +1336,10 @@
|
||||
return DOM.bip49tab.hasClass("active");
|
||||
}
|
||||
|
||||
function bip84TabSelected() {
|
||||
return DOM.bip84tab.hasClass("active");
|
||||
}
|
||||
|
||||
function bip141TabSelected() {
|
||||
return DOM.bip141tab.hasClass("active");
|
||||
}
|
||||
@@ -1291,6 +1347,7 @@
|
||||
function setHdCoin(coinValue) {
|
||||
DOM.bip44coin.val(coinValue);
|
||||
DOM.bip49coin.val(coinValue);
|
||||
DOM.bip84coin.val(coinValue);
|
||||
}
|
||||
|
||||
function showSegwitAvailable() {
|
||||
@@ -1374,6 +1431,26 @@
|
||||
DOM.entropyWordIndexes.text(wordIndexesStr);
|
||||
}
|
||||
|
||||
function updateCsv() {
|
||||
var tableCsv = "path,address,public key,private key\n";
|
||||
var rows = DOM.addresses.find("tr");
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
var row = $(rows[i]);
|
||||
var cells = row.find("td");
|
||||
for (var j=0; j<cells.length; j++) {
|
||||
var cell = $(cells[j]);
|
||||
if (!cell.children().hasClass("invisible")) {
|
||||
tableCsv = tableCsv + cell.text();
|
||||
}
|
||||
if (j != cells.length - 1) {
|
||||
tableCsv = tableCsv + ",";
|
||||
}
|
||||
}
|
||||
tableCsv = tableCsv + "\n";
|
||||
}
|
||||
DOM.csv.val(tableCsv);
|
||||
}
|
||||
|
||||
var networks = [
|
||||
{
|
||||
name: "BCH - Bitcoin Cash",
|
||||
@@ -1480,6 +1557,14 @@
|
||||
setHdCoin(26);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "KMD - Komodo",
|
||||
bip49available: false,
|
||||
onSelect: function() {
|
||||
network = bitcoinjs.bitcoin.networks.komodo;
|
||||
setHdCoin(141);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LTC - Litecoin",
|
||||
segwitAvailable: true,
|
||||
@@ -1513,6 +1598,14 @@
|
||||
setHdCoin(7);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ONX - Onixcoin",
|
||||
segwitAvailable: false,
|
||||
onSelect: function() {
|
||||
network = bitcoinjs.bitcoin.networks.onixcoin;
|
||||
setHdCoin(174);
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "PIVX - PIVX",
|
||||
segwitAvailable: false,
|
||||
|
||||
@@ -492,6 +492,13 @@ it('Allows selection of game', function(done) {
|
||||
};
|
||||
testNetwork(done, params);
|
||||
});
|
||||
it('Allows selection of komodo', function(done) {
|
||||
var params = {
|
||||
selectText: "KMD - Komodo",
|
||||
firstAddress: "RMPPzJwAjPVZZAwJvXivHJGGjdCx6WBD2t",
|
||||
};
|
||||
testNetwork(done, params);
|
||||
});
|
||||
it('Allows selection of namecoin', function(done) {
|
||||
var params = {
|
||||
selectText: "NMC - Namecoin",
|
||||
@@ -499,6 +506,13 @@ it('Allows selection of namecoin', function(done) {
|
||||
};
|
||||
testNetwork(done, params);
|
||||
});
|
||||
it('Allows selection of onixcoin', function(done) {
|
||||
var params = {
|
||||
selectText: "ONX - Onixcoin",
|
||||
firstAddress: "XGwMqddeKjT3ddgX73QokjVbCL3aK6Yxfk",
|
||||
};
|
||||
testNetwork(done, params);
|
||||
});
|
||||
it('Allows selection of peercoin', function(done) {
|
||||
var params = {
|
||||
selectText: "PPC - Peercoin",
|
||||
@@ -2670,4 +2684,170 @@ it('Shows the index of each word in the mnemonic', function(done) {
|
||||
});
|
||||
});
|
||||
|
||||
it('Shows the derivation path for bip84 tab', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css('#bip84 .path'))
|
||||
.getAttribute("value")
|
||||
.then(function(path) {
|
||||
expect(path).toBe("m/84'/0'/0'/0");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Shows the extended private key for bip84 tab', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css('.extended-priv-key'))
|
||||
.getAttribute("value")
|
||||
.then(function(path) {
|
||||
expect(path).toBe("zprvAev3RKrZ3QVKiUFCfdeMRen1BPDJgdNt1XpxiDy8acSs4kkAGTCvq7HeRYRNNpo8EtEjCFQBWavJwtCUR29y4TUCH4X5RXMcyq48uN8y9BP");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Shows the extended public key for bip84 tab', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css('.extended-pub-key'))
|
||||
.getAttribute("value")
|
||||
.then(function(path) {
|
||||
expect(path).toBe("zpub6suPpqPSsn3cvxKfmfBMnnijjR3o666jNkkZWcNk8wyqwZ5JozXBNuc8Gs7DB3uLwTDvGVTspVEAUQcEjKF3pZHgywVbubdTqbXTUg7usyx");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Changes the address list if bip84 account is changed', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('#bip84 .account'))
|
||||
.sendKeys('1');
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
getFirstAddress(function(address) {
|
||||
expect(address).toBe("bc1qp7vv669t2fy965jdzvqwrraana89ctd5ewc662");
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Changes the address list if bip84 change is changed', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('#bip84 .change'))
|
||||
.sendKeys('1');
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
getFirstAddress(function(address) {
|
||||
expect(address).toBe("bc1qr39vj6rh06ff05m53uxq8uazehwhccswylhrs2");
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Passes the official BIP84 test spec for rootpriv', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css(".root-key"))
|
||||
.getAttribute("value")
|
||||
.then(function(rootKey) {
|
||||
expect(rootKey).toBe("zprvAWgYBBk7JR8Gjrh4UJQ2uJdG1r3WNRRfURiABBE3RvMXYSrRJL62XuezvGdPvG6GFBZduosCc1YP5wixPox7zhZLfiUm8aunE96BBa4Kei5");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Passes the official BIP84 test spec for account 0 xprv', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css("#bip84 .account-xprv"))
|
||||
.getAttribute("value")
|
||||
.then(function(rootKey) {
|
||||
expect(rootKey).toBe("zprvAdG4iTXWBoARxkkzNpNh8r6Qag3irQB8PzEMkAFeTRXxHpbF9z4QgEvBRmfvqWvGp42t42nvgGpNgYSJA9iefm1yYNZKEm7z6qUWCroSQnE");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Passes the official BIP84 test spec for account 0 xpub', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css("#bip84 .account-xpub"))
|
||||
.getAttribute("value")
|
||||
.then(function(rootKey) {
|
||||
expect(rootKey).toBe("zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs");
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
it('Passes the official BIP84 test spec for account 0 first address', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
getFirstAddress(function(address) {
|
||||
expect(address).toBe("bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu");
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Passes the official BIP84 test spec for account 0 first change address', function(done) {
|
||||
driver.findElement(By.css('#bip84-tab a'))
|
||||
.click()
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
|
||||
driver.findElement(By.css('#bip84 .change'))
|
||||
.sendKeys('1');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
getFirstAddress(function(address) {
|
||||
expect(address).toBe("bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el");
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Can display the table as csv', function(done) {
|
||||
var headings = "path,address,public key,private key";
|
||||
var row1 = "m/44'/0'/0'/0/0,1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug,033f5aed5f6cfbafaf223188095b5980814897295f723815fea5d3f4b648d0d0b3,L26cVSpWFkJ6aQkPkKmTzLqTdLJ923e6CzrVh9cmx21QHsoUmrEE";
|
||||
var row20 = "m/44'/0'/0'/0/19,1KhBy28XLAciXnnRvm71PvQJaETyrxGV55,02b4b3e396434d8cdd20c03ac4aaa07387784d5d867b75987f516f5705ee68cb3a,L4GrDrjReMsCAu5DkLXn79jSb95qR7Zfx7eshybCQZ1qL32MXJab";
|
||||
driver.findElement(By.css('.phrase'))
|
||||
.sendKeys('abandon abandon ability');
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
driver.findElement(By.css('.csv'))
|
||||
.getAttribute("value")
|
||||
.then(function(csv) {
|
||||
expect(csv).toContain(headings);
|
||||
expect(csv).toContain(row1);
|
||||
expect(csv).toContain(row20);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user