}
function calcBip32RootKeyFromBase58(rootKeyBase58) {
+ // try parsing with various segwit network params since this extended
+ // key may be from any one of them.
+ if (networkHasSegwit()) {
+ var n = network;
+ if ("baseNetwork" in n) {
+ n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+ }
+ // try parsing using base network params
+ try {
+ bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
+ return;
+ }
+ catch (e) {}
+ // try parsing using p2wpkh params
+ if ("p2wpkh" in n) {
+ try {
+ bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+ return;
+ }
+ catch (e) {}
+ }
+ // try parsing using p2wpkh-in-p2sh network params
+ if ("p2wpkhInP2sh" in n) {
+ try {
+ bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+ return;
+ }
+ catch (e) {}
+ }
+ }
+ // try the network params as currently specified
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
}
}
function validateRootKey(rootKeyBase58) {
+ // try various segwit network params since this extended key may be from
+ // any one of them.
+ if (networkHasSegwit()) {
+ var n = network;
+ if ("baseNetwork" in n) {
+ n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+ }
+ // try parsing using base network params
+ try {
+ bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
+ return "";
+ }
+ catch (e) {}
+ // try parsing using p2wpkh params
+ if ("p2wpkh" in n) {
+ try {
+ bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+ return "";
+ }
+ catch (e) {}
+ }
+ // try parsing using p2wpkh-in-p2sh network params
+ if ("p2wpkhInP2sh" in n) {
+ try {
+ bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+ return "";
+ }
+ catch (e) {}
+ }
+ }
+ // try the network params as currently specified
try {
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
}
});
});
+it('Can use root keys to generate segwit table rows', function(done) {
+ // segwit uses ypub / zpub instead of xpub but the root key should still
+ // be valid regardless of the encoding used to import that key.
+ // Maybe this breaks the reason for the different extended key prefixes, but
+ // since the parsed root key is used behind the scenes anyhow this should be
+ // allowed.
+ driver.findElement(By.css('#root-key'))
+ .sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
+ driver.findElement(By.css('#bip49-tab a'))
+ .click()
+ // bip49 addresses are shown
+ driver.sleep(generateDelay).then(function() {
+ getFirstAddress(function(address) {
+ expect(address).toBe("3QG2Y9AA4xZ846gKHZqNf7mvVKbLqMKxr2");
+ done();
+ });
+ });
+});
+
});