mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-22 23:08:07 +01:00
zpub with fingerprint
* parse core-like HD key [mfp/derivation]zpub * add unittest for zpub with fingerprint
This commit is contained in:
parent
d27768c656
commit
bd39adf8fc
2 changed files with 26 additions and 0 deletions
|
@ -142,6 +142,18 @@ export class AbstractWallet {
|
||||||
|
|
||||||
if (this.secret.startsWith('BC1')) this.secret = this.secret.toLowerCase();
|
if (this.secret.startsWith('BC1')) this.secret = this.secret.toLowerCase();
|
||||||
|
|
||||||
|
// [fingerprint/derivation]zpub
|
||||||
|
let re = /\[([^\]]+)\](.*)/;
|
||||||
|
let m = this.secret.match(re);
|
||||||
|
if(m && m.length==3){
|
||||||
|
let hexFingerprint = m[1].split("/")[0];
|
||||||
|
if(hexFingerprint.length == 8){
|
||||||
|
hexFingerprint = Buffer.from(hexFingerprint, 'hex').reverse().toString('hex');
|
||||||
|
this.masterFingerprint = parseInt(hexFingerprint, 16);
|
||||||
|
}
|
||||||
|
this.secret = m[2];
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const parsedSecret = JSON.parse(this.secret);
|
const parsedSecret = JSON.parse(this.secret);
|
||||||
if (parsedSecret && parsedSecret.keystore && parsedSecret.keystore.xpub) {
|
if (parsedSecret && parsedSecret.keystore && parsedSecret.keystore.xpub) {
|
||||||
|
|
|
@ -119,6 +119,20 @@ describe('Watch only wallet', () => {
|
||||||
assert.strictEqual(w.getLabel(), 'Cobo Vault 5271c071');
|
assert.strictEqual(w.getLabel(), 'Cobo Vault 5271c071');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can import zpub with master fingerprint', async () => {
|
||||||
|
const zpub = "[8cce63f8/84h/0h/0h]zpub6s2RJ9qAEBW8Abhojs6LyDzF7gttcDr6EsR3Umu2aptZBb45e734rGtt4KqsCMmNyR1EEzUU2ugdVYez2VywQvAbBjUSKn8ho4Zk2c5otkk";
|
||||||
|
const w = new WatchOnlyWallet();
|
||||||
|
w.setSecret(zpub);
|
||||||
|
w.init();
|
||||||
|
assert.ok(w.valid());
|
||||||
|
assert.strictEqual(
|
||||||
|
w.getSecret(),
|
||||||
|
'zpub6s2RJ9qAEBW8Abhojs6LyDzF7gttcDr6EsR3Umu2aptZBb45e734rGtt4KqsCMmNyR1EEzUU2ugdVYez2VywQvAbBjUSKn8ho4Zk2c5otkk',
|
||||||
|
);
|
||||||
|
assert.strictEqual(w.getMasterFingerprint(), 4167290508);
|
||||||
|
assert.strictEqual(w.getMasterFingerprintHex(), '8cce63f8');
|
||||||
|
});
|
||||||
|
|
||||||
it('can combine signed PSBT and prepare it for broadcast', async () => {
|
it('can combine signed PSBT and prepare it for broadcast', async () => {
|
||||||
const w = new WatchOnlyWallet();
|
const w = new WatchOnlyWallet();
|
||||||
w.setSecret('zpub6rjLjQVqVnj7crz9E4QWj4WgczmEseJq22u2B6k2HZr6NE2PQx3ZYg8BnbjN9kCfHymSeMd2EpwpM5iiz5Nrb3TzvddxW2RMcE3VXdVaXHk');
|
w.setSecret('zpub6rjLjQVqVnj7crz9E4QWj4WgczmEseJq22u2B6k2HZr6NE2PQx3ZYg8BnbjN9kCfHymSeMd2EpwpM5iiz5Nrb3TzvddxW2RMcE3VXdVaXHk');
|
||||||
|
|
Loading…
Add table
Reference in a new issue