Skip to content

Commit

Permalink
TST: Add Electrum backup JSON test
Browse files Browse the repository at this point in the history
  • Loading branch information
marcosrdz committed Feb 8, 2021
1 parent 99b4a16 commit ed1640f
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
7 changes: 6 additions & 1 deletion class/wallets/abstract-wallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,12 @@ export class AbstractWallet {
let parsedSecret;
// regex might've matched invalid data. if so, parse newSecret.
if (this.secret.trim().length > 0) {
parsedSecret = JSON.parse(this.secret);
try {
parsedSecret = JSON.parse(this.secret);
} catch (e) {
console.log(e);
parsedSecret = JSON.parse(newSecret);
}
} else {
parsedSecret = JSON.parse(newSecret);
}
Expand Down
40 changes: 40 additions & 0 deletions tests/unit/watch-only-wallet.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,46 @@ describe('Watch only wallet', () => {
);
});

it('can import Electrum compatible backup wallet, and create a tx with master fingerprint', async () => {
const skeleton =
'{"addr_history":{"bc1q2jaqard66jw6l9h6xkfmr9lhfvxqmujwpzrcc3":[["59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345",668857]],"bc1q2mghqtxmqhx5r3tl8f4ls54mstjh4t6gsut6p7":[],"bc1q2rvpxtsedfd4c7f2q8v0745aycpu08teq43gd0":[],"bc1q2zccw0mf0t3340hksy379k9p2f2y22z6txr5cf":[],"bc1q3r46dug4ayxqpdlh98wf4j9w8nuxu2s25pkqcp":[],"bc1q3vjcf40hpurace60zruzes4c8plqak40t8mws0":[],"bc1q4f3qqcas5893dj032pycnhjeyh3dcp9xt47uj9":[],"bc1q7365nq9fzlycrtk0226pzptjs856m9utxsvrmv":[],"bc1q8qkx38rlv0rnj5ncjtey0uyallvfgxwg0df0tq":[],"bc1q8qzr45yphgn97eupqpvp9pj8gv4prah9z2zztn":[],"bc1q94td9e2m4yj9ry7v5csreusx43fwzrza77eae7":[],"bc1qe04gtngw0d0cjkq0any838tjn33sr53tlxvsg4":[],"bc1qeaty2ddvr9avakrypxsje5kzk6pzj4x5yyhle5":[],"bc1qenh8p3xz7e978jz3rzhfcg0snj23kuddxhcrzj":[],"bc1qexh7mdq3ud0c4h5rwypysgm2htvjut8sp30lxv":[],"bc1qf2faweyjtr3y9rpax8yr2n6rf5g9kcvzwxerv7":[],"bc1qg06yf3jvfgtx4wc7wrh763p8jy3jsgnt2tkegl":[],"bc1qgs7eqljkg2ngu6s857quyjuwha0fdgy6hevsc3":[],"bc1qgw7xtp8mu4lr2kavdlhfqexj0ha2mjyfz5ceuf":[],"bc1qhtjfx7fpw2zka902dnuam2z7jpyyamaedkhf8h":[],"bc1qlaj23t7jqgw5ktxywthuaxjx60pzsfhqq74m69":[],"bc1qrdygemvvljqef40m7hdu68j9sm70wn4dcfw4l9":[],"bc1qsnq4qdwq70nl4949dnq38sp306duywk603un4a":[],"bc1qta4dyjsc40pqhrn9xcqr7unwlskd733r9dr3f4":[],"bc1qtl7dmlskk6gwmzkt39shh8leq7fslr2dn68h0j":[],"bc1qv8vee62rvhe784wlmwct2llv2euk9lutj0497j":[],"bc1qvmlvfgl5rd3r2ayqhfqfkkftqwye0zaql44y5a":[],"bc1qx22qha842r5jg8z40x86yj8ss5cxrpdfplpv4r":[],"bc1qx7kl0sy53tpd9jj9atfv0gn9nkzjg5ef7rz8s0":[],"bc1qz6je3l5nq5628v09upuqf4zf4dqe6j0tfhk6d4":[],"bc1qzam4mc3fx33mxfw9nyhjwk5fse0g87suuhwdh0":[]},"addresses":{"change":["bc1qf2faweyjtr3y9rpax8yr2n6rf5g9kcvzwxerv7","bc1qzam4mc3fx33mxfw9nyhjwk5fse0g87suuhwdh0","bc1q7365nq9fzlycrtk0226pzptjs856m9utxsvrmv","bc1q2mghqtxmqhx5r3tl8f4ls54mstjh4t6gsut6p7","bc1qe04gtngw0d0cjkq0any838tjn33sr53tlxvsg4","bc1qta4dyjsc40pqhrn9xcqr7unwlskd733r9dr3f4","bc1qvmlvfgl5rd3r2ayqhfqfkkftqwye0zaql44y5a","bc1qz6je3l5nq5628v09upuqf4zf4dqe6j0tfhk6d4","bc1q8qzr45yphgn97eupqpvp9pj8gv4prah9z2zztn","bc1qgw7xtp8mu4lr2kavdlhfqexj0ha2mjyfz5ceuf"],"receiving":["bc1q2jaqard66jw6l9h6xkfmr9lhfvxqmujwpzrcc3","bc1qv8vee62rvhe784wlmwct2llv2euk9lutj0497j","bc1q3vjcf40hpurace60zruzes4c8plqak40t8mws0","bc1q2zccw0mf0t3340hksy379k9p2f2y22z6txr5cf","bc1q94td9e2m4yj9ry7v5csreusx43fwzrza77eae7","bc1qexh7mdq3ud0c4h5rwypysgm2htvjut8sp30lxv","bc1qenh8p3xz7e978jz3rzhfcg0snj23kuddxhcrzj","bc1q8qkx38rlv0rnj5ncjtey0uyallvfgxwg0df0tq","bc1qhtjfx7fpw2zka902dnuam2z7jpyyamaedkhf8h","bc1qx22qha842r5jg8z40x86yj8ss5cxrpdfplpv4r","bc1qsnq4qdwq70nl4949dnq38sp306duywk603un4a","bc1qlaj23t7jqgw5ktxywthuaxjx60pzsfhqq74m69","bc1qgs7eqljkg2ngu6s857quyjuwha0fdgy6hevsc3","bc1qeaty2ddvr9avakrypxsje5kzk6pzj4x5yyhle5","bc1qtl7dmlskk6gwmzkt39shh8leq7fslr2dn68h0j","bc1qrdygemvvljqef40m7hdu68j9sm70wn4dcfw4l9","bc1qg06yf3jvfgtx4wc7wrh763p8jy3jsgnt2tkegl","bc1q3r46dug4ayxqpdlh98wf4j9w8nuxu2s25pkqcp","bc1qx7kl0sy53tpd9jj9atfv0gn9nkzjg5ef7rz8s0","bc1q2rvpxtsedfd4c7f2q8v0745aycpu08teq43gd0","bc1q4f3qqcas5893dj032pycnhjeyh3dcp9xt47uj9"]},"channel_backups":{},"channels":{},"fiat_value":{},"invoices":{},"keystore":{"ckcc_xpub":"xpub661MyMwAqRbcFG7osGX7Td2YTmiPEoizenPoxSRQKhirBamV4V8gpSsh8raBSkwPNyVcRFLEKyQg2FtNq6k3zA7yoc7RFMmMYcXGwEjwrVa","derivation":"m/84\u0027/0\u0027/1\u0027","hw_type":"coldcard","label":"Coldcard Import 64392470 Acct#1","root_fingerprint":"64392470","type":"hardware","xpub":"zpub6rFDtF1nuXZ9PUL4XzKURh3vJBW6Kj6TUrYL4qPtFNtDXtcTVfiqjQDyrZNwjwzt5HS14qdqo3Co2282Lv3Re6Y5wFZxAVuMEpeygnnDwfx"},"labels":{},"lightning_payments":{},"lightning_preimages":{},"lightning_privkey2":"xprv9s21ZrQH143K3FbGsjrhgoAjhfnztx2Q4CMTMSbWnrxotqStr6YKDvLFmadjb9ymp8dvH1x2ei57EzVkbnXEsaPTZ87LxeoPxrXbvQZXMQW","payment_requests":{},"prevouts_by_scripthash":{"2655301797aedc6f6b9c20cc987d0880576bc537f432e1df4f7887a8878987c3":[["59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345:0",269295]]},"qt-console-history":[],"seed_version":33,"spent_outpoints":{"c2d31f0754a8271f10f6484cb6b84cc2339b9b64b86324b62ba4ee807becb731":{"2":"59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345"}},"stored_height":668854,"submarine_swaps":{},"transactions":{"59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345":"0100000000010131b7ec7b80eea42bb62463b8649b9b33c24cb8b64c48f6101f27a854071fd3c20200000000ffffffff01ef1b04000000000016001454ba0e8dbad49daf96fa3593b197f74b0c0df24e02483045022100c1c305a4d61dd58b8f669a18fec979aba09925b56f4ad1313131eccdc031613f022033c63b479f21275a3efa05e2e30401c638e43d43acea9eef43b3dcf09854091d012103539fedf51f0750b3b8106e39bbaa775d8bf9047e9c0585a05d62ea5bde9f880000000000"},"tx_fees":{"59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345":[1290,false,1]},"txi":{},"txo":{"59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345":{"bc1q2jaqard66jw6l9h6xkfmr9lhfvxqmujwpzrcc3":{"0":[269295,false]}}},"use_encryption":false,"verified_tx3":{"59aa0eea3833c4ceb605c37e5e4f2dfcf30b1f381e263362684591347e931345":[668857,1612327310,1309,"0000000000000000000acb0563f55d7e8e171d36c36bac8c326024d358ca83ea"]},"wallet_type":"standard","winpos-qt":[323,341,873,437]}';
const w = new WatchOnlyWallet();
w.setSecret(skeleton);
w.init();
assert.ok(w.valid());
assert.strictEqual(
w.getSecret(),
'zpub6rFDtF1nuXZ9PUL4XzKURh3vJBW6Kj6TUrYL4qPtFNtDXtcTVfiqjQDyrZNwjwzt5HS14qdqo3Co2282Lv3Re6Y5wFZxAVuMEpeygnnDwfx',
);
assert.strictEqual(w.getMasterFingerprint(), 64392470);
assert.strictEqual(w.getMasterFingerprintHex(), '168dd603');

const utxos = [
{
height: 618811,
value: 66600,
address: 'bc1qzqjwye4musmz56cg44ttnchj49zueh9yr0qsxt',
txId: '5df595dc09ee7a5c245b34ea519288137ffee731629c4ff322a6de4f72c06222',
vout: 0,
txid: '5df595dc09ee7a5c245b34ea519288137ffee731629c4ff322a6de4f72c06222',
amount: 66600,
wif: false,
confirmations: 1,
},
];

const { psbt } = await w.createTransaction(
utxos,
[{ address: 'bc1qdamevhw3zwm0ajsmyh39x8ygf0jr0syadmzepn', value: 5000 }],
22,
'bc1qtutssamysdkgd87df0afjct0mztx56qpze7wqe',
);
assert.strictEqual(
psbt.toBase64(),
'cHNidP8BAHECAAAAASJiwHJP3qYi80+cYjHn/n8TiJJR6jRbJFx67gnclfVdAAAAAAAAAACAAogTAAAAAAAAFgAUb3eWXdETtv7KGyXiUxyIS+Q3wJ003QAAAAAAABYAFF8XCHdkg2yGn81L+plhb9iWamgBAAAAAAABAR8oBAEAAAAAABYAFBAk4ma75DYqawitVrni8qlFzNykIgYDNK9TxoCjQ8P0+qI2Hu4hrnXnJuYAC3h2puZbgRORp+sYFo3WA1QAAIAAAACAAAAAgAAAAAAAAAAAAAAiAgL1DWeV+AfIP5RRB5zHv5vuXsIt8+rF9rrsji3FhQlhzBgWjdYDVAAAgAAAAIAAAACAAQAAAAAAAAAA',
);
});

it('can import cobo vault JSON skeleton wallet', async () => {
const skeleton =
'{"ExtPubKey":"zpub6rcabYFcdr41zyUNRWRyHYs2Sm86E5XV8RjjRzTFYsiCngteeZnkwaF2xuhjmM6kpHjuNpFW42BMhzPmFwXt48e1FhddMB7xidZzN4SF24K","MasterFingerprint":"5271c071","CoboVaultFirmwareVersion":"1.2.4(BTC-Only)"}';
Expand Down

0 comments on commit ed1640f

Please sign in to comment.