From 793bfa5e7fe2ae60e3d664988c2c0de5903df1a8 Mon Sep 17 00:00:00 2001 From: Alessandro Rezzi Date: Thu, 2 Nov 2023 22:16:03 +0100 Subject: [PATCH] save and load extfvk in place of a deafult address --- js/pivx_shield.js | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/js/pivx_shield.js b/js/pivx_shield.js index ada90d7..4631304 100644 --- a/js/pivx_shield.js +++ b/js/pivx_shield.js @@ -44,12 +44,16 @@ export class PIVXShield { accountIndex = 0, loadSaplingData = true, }) { - if (!extendedSpendingKey && !seed && !extendedFullViewingKey) { + if (!extendedSpendingKey && !seed && !extendedFullViewingKey && !data) { throw new Error( - "One of seed or extendedSpendingKey or extendedFullViewingKey must be provided", + "At least one among seed, extendedSpendingKey, extendedFullViewingKey or backup data must be provided", ); } + if (extendedSpendingKey && seed) { + throw new Error("Don't provide both a seed and an extendedSpendingKey"); + } + const shieldWorker = new Worker( new URL("worker_start.js", import.meta.url), ); @@ -75,7 +79,7 @@ export class PIVXShield { throw new Error("Cannot load sapling data"); } } - if (!extendedSpendingKey && !extendedFullViewingKey) { + if (seed) { const serData = { seed: seed, coin_type: coinType, @@ -97,7 +101,7 @@ export class PIVXShield { let readFromData = false; if (data) { const shieldData = JSON.parse(data); - if (await pivxShield.load(shieldData)) { + if (pivxShield.load(shieldData)) { readFromData = true; } } @@ -197,16 +201,10 @@ export class PIVXShield { } //Save your shield data - async save() { - const { address, _ } = await this.callWorker( - "generate_default_payment_address", - this.extfvk, - this.isTestNet, - ); - + save() { return JSON.stringify( new ShieldData({ - defaultAddress: address, + extfvk: this.extfvk, lastProcessedBlock: this.lastProcessedBlock, commitmentTree: this.commitmentTree, diversifierIndex: this.diversifierIndex, @@ -219,15 +217,11 @@ export class PIVXShield { * Load shieldWorker from a shieldData * @param {ShieldData} shieldData - shield data */ - async load(shieldData) { - const { address, _ } = await this.callWorker( - "generate_default_payment_address", - this.extfvk, - this.isTestNet, - ); - if (address != shieldData.defaultAddress) { + load(shieldData) { + if (this.extfvk && this.extfvk != shieldData.extfvk) { return false; } + this.extfvk = shieldData.extfvk; this.commitmentTree = shieldData.commitmentTree; this.unspentNotes = shieldData.unspentNotes; this.lastProcessedBlock = shieldData.lastProcessedBlock; @@ -446,20 +440,20 @@ class ShieldData { /** * Add a transparent UTXO, along with its private key * @param {Object} o - Options - * @param {String} o.defaultAddress - Default shield address used for double check that data matches the seed + * @param {String} o.extfvk - Extended full viewing key * @param {Number} o.lastProcessedBlock - Last processed block in blockchain * @param {String} o.commitmentTree - Hex encoded commitment tree * @param {Uint8Array} o.diversifierIndex - Diversifier index of the last generated address * @param {[Note, String][]} o.unspentNotes - Array of notes, corresponding witness */ constructor({ - defaultAddress, + extfvk, lastProcessedBlock, commitmentTree, diversifierIndex, unspentNotes, }) { - this.defaultAddress = defaultAddress; + this.extfvk = extfvk; this.diversifierIndex = diversifierIndex; this.lastProcessedBlock = lastProcessedBlock; this.commitmentTree = commitmentTree;