which are used for import / export in most BIP44 wallets.
<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">
<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">
</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>
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");
return;
}
bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
+ if (bip44TabSelected()) {
+ displayBip44Info();
+ }
displayBip32Info();
hidePending();
}
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);
});
},
+// 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...