BIP44 Account xprv and xpub keys are shown

which are used for import / export in most BIP44 wallets.
This commit is contained in:
Ian Coleman
2016-12-12 10:54:08 +11:00
parent 32fab2c395
commit c554e6ff5c
3 changed files with 107 additions and 23 deletions

View File

@@ -312,6 +312,36 @@
<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 data-translate>The account extendend keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
</div>
</div>
<div class="form-group">
<label for="account-xprv" class="col-sm-2 control-label">
<span data-translate>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 data-translate>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 data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
</div>
</div>
<div class="form-group">
<label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
<div class="col-sm-10">
@@ -343,27 +373,6 @@
<span data-translate>Use hardened addresses</span>
</label>
</div>
<div class="form-group">
<label for="mycelium-path" class="col-sm-2 control-label" data-translate>Mycelium Wallet</label>
<div class="col-sm-10">
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'</code> generates extended keys for import / export
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'/0</code> generates public addresses
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'/1</code> generates change addresses
</p>
<p class="form-control no-border" data-translate-html>
For more info see the
<a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
</p>
</div>
</div>
<div class="form-group">
<label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
<div class="col-sm-10">
@@ -394,13 +403,13 @@
</div>
<form class="form-horizontal" role="form">
<div class="form-group">
<label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Key</label>
<label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
<div class="col-sm-10">
<textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
</div>
</div>
<div class="form-group">
<label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Key (addresses only)</label>
<label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
<div class="col-sm-10">
<textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
</div>

View File

@@ -51,6 +51,8 @@
DOM.bip44purpose = $("#bip44 .purpose");
DOM.bip44coin = $("#bip44 .coin");
DOM.bip44account = $("#bip44 .account");
DOM.bip44accountXprv = $("#bip44 .account-xprv");
DOM.bip44accountXpub = $("#bip44 .account-xpub");
DOM.bip44change = $("#bip44 .change");
DOM.generatedStrength = $(".generate-container .strength");
DOM.hardenedAddresses = $(".hardened-addresses");
@@ -239,6 +241,9 @@
return;
}
bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
if (bip44TabSelected()) {
displayBip44Info();
}
displayBip32Info();
hidePending();
}
@@ -450,6 +455,24 @@
return false;
}
function displayBip44Info() {
// Get the derivation path for the account
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
var account = parseIntNoNaN(DOM.bip44account.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.toBase58(false);
// Display the extended keys
DOM.bip44accountXprv.val(accountXprv);
DOM.bip44accountXpub.val(accountXpub);
}
function displayBip32Info() {
// Display the key
DOM.seed.val(seed);

View File

@@ -3086,6 +3086,58 @@ page.open(url, function(status) {
});
},
// BIP44 account extendend private key is shown
// github issue 37 - compatibility with electrum
function() {
page.open(url, function(status) {
// set the phrase
var expected = "xprv9yzrnt4zWVJUr1k2VxSPy9ettKz5PpeDMgaVG7UKedhqnw1tDkxP2UyYNhuNSumk2sLE5ctwKZs9vwjsq3e1vo9egCK6CzP87H2cVYXpfwQ";
page.evaluate(function() {
$(".phrase").val("abandon abandon ability");
$(".phrase").trigger("input");
});
// check the BIP44 account extended private key
waitForGenerate(function() {
var actual = page.evaluate(function() {
return $(".account-xprv").val();
});
if (actual != expected) {
console.log("BIP44 account extended private key is incorrect");
console.log("Expected: " + expected);
console.log("Actual: " + actual);
fail();
}
next();
});
});
},
// BIP44 account extendend public key is shown
// github issue 37 - compatibility with electrum
function() {
page.open(url, function(status) {
// set the phrase
var expected = "xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf";
page.evaluate(function() {
$(".phrase").val("abandon abandon ability");
$(".phrase").trigger("input");
});
// check the BIP44 account extended public key
waitForGenerate(function() {
var actual = page.evaluate(function() {
return $(".account-xpub").val();
});
if (actual != expected) {
console.log("BIP44 account extended public key is incorrect");
console.log("Expected: " + expected);
console.log("Actual: " + actual);
fail();
}
next();
});
});
},
// If you wish to add more tests, do so here...