From 12a8d42072912969152b8883eeabdf3ff50f194e Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 2 Aug 2023 17:22:33 +0200 Subject: [PATCH] improve generator --- .../actions/KeySharesCustomBulkAction.js | 66 ++++++++-------- .../actions/KeySharesCustomBulkAction.js.map | 2 +- .../actions/KeySharesCustomBulkAction.ts | 75 ++++++++++--------- 3 files changed, 72 insertions(+), 71 deletions(-) diff --git a/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js b/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js index 2ed584e..bd3e369 100644 --- a/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js +++ b/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js @@ -59,6 +59,10 @@ class KeySharesCustomBulkAction extends BaseAction_1.BaseAction { const bulkProcess = multiShares || true; if (bulkProcess) { const { files } = yield (0, file_helper_1.getKeyStoreFiles)((0, file_1.sanitizePath)(keystorePath)); + // validate data + if (files.length !== operatorGroups.length) { + throw Error(`Files amoumt(${files.length}) is not equal clusters amount(${operatorGroups.length})`); + } // validate all files console.debug('Validating keystore files, do not terminate process!'); let validatedFilesCount = 0; @@ -78,9 +82,9 @@ class KeySharesCustomBulkAction extends BaseAction_1.BaseAction { this.ownerNonce = ownerNonce; let processedFilesCount = 0; console.debug('Splitting keystore files to shares, do not terminate process!'); - for (const file of files) { - const keySharesFiles = yield this._processFile(file, password, outputFolder, operatorGroups, ownerAddress); - outputFiles = [...outputFiles, ...keySharesFiles]; + for (const [index, file] of files.entries()) { + const keySharesFile = yield this._processFile(file, password, outputFolder, operatorGroups[index], ownerAddress); + outputFiles.push(keySharesFile); processedFilesCount++; process.stdout.write(`\r${processedFilesCount}/${files.length} keystore files successfully split into shares`); } @@ -94,45 +98,41 @@ class KeySharesCustomBulkAction extends BaseAction_1.BaseAction { if (isValidPassword !== true) { throw Error(String(isValidPassword)); } - const keySharesFiles = yield this._processFile(keystorePath, password, outputFolder, operatorGroups, ownerAddress); - outputFiles = [...keySharesFiles]; + const keySharesFile = yield this._processFile(keystorePath, password, outputFolder, operatorGroups[0], ownerAddress); + outputFiles = [keySharesFile]; } return outputFiles; }); } - _processFile(keystoreFilePath, password, outputFolder, operatorGroups, ownerAddress) { + _processFile(keystoreFilePath, password, outputFolder, operators, ownerAddress) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const keystoreData = yield (0, file_helper_1.readFile)(keystoreFilePath); // Initialize SSVKeys SDK const ssvKeys = new SSVKeys_1.SSVKeys(); const { privateKey, publicKey } = yield ssvKeys.extractKeys(keystoreData, password); - const keySharesFiles = []; - for (const [index, operators] of operatorGroups.entries()) { - // Build shares from operator IDs and public keys - const encryptedShares = yield ssvKeys.buildShares(privateKey, operators); - const keyShares = new KeyShares_1.KeyShares(); - yield keyShares.update({ - ownerAddress, - ownerNonce: this.ownerNonce, - operators, - publicKey, - }); - // Build payload and save it in key shares file - yield keyShares.buildPayload({ - publicKey, - operators, - encryptedShares, - }, { - ownerAddress, - ownerNonce: this.ownerNonce, - privateKey, - }); - const keySharesFilePath = yield (0, file_helper_1.getFilePath)('keyshares-files', outputFolder.trim(), `${index}`); - yield (0, file_helper_1.writeFile)(keySharesFilePath, keyShares.toJson()); - keySharesFiles.push(keySharesFilePath); - this.ownerNonce++; - } - return keySharesFiles; + // Build shares from operator IDs and public keys + const encryptedShares = yield ssvKeys.buildShares(privateKey, operators); + const keyShares = new KeyShares_1.KeyShares(); + yield keyShares.update({ + ownerAddress, + ownerNonce: this.ownerNonce, + operators, + publicKey, + }); + // Build payload and save it in key shares file + yield keyShares.buildPayload({ + publicKey, + operators, + encryptedShares, + }, { + ownerAddress, + ownerNonce: this.ownerNonce, + privateKey, + }); + const keySharesFilePath = yield (0, file_helper_1.getFilePath)('keyshares-files', outputFolder.trim()); + yield (0, file_helper_1.writeFile)(keySharesFilePath, keyShares.toJson()); + this.ownerNonce++; + return keySharesFilePath; }); } } diff --git a/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js.map b/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js.map index 13ba849..86975a4 100644 --- a/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js.map +++ b/dist/tsc/src/commands/actions/KeySharesCustomBulkAction.js.map @@ -1 +1 @@ -{"version":3,"file":"KeySharesCustomBulkAction.js","sourceRoot":"","sources":["../../../../../src/commands/actions/KeySharesCustomBulkAction.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"KeySharesCustomBulkAction.js","sourceRoot":"","sources":["../../../../../src/commands/actions/KeySharesCustomBulkAction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/commands/actions/KeySharesCustomBulkAction.ts b/src/commands/actions/KeySharesCustomBulkAction.ts index 0d15810..b043ff5 100644 --- a/src/commands/actions/KeySharesCustomBulkAction.ts +++ b/src/commands/actions/KeySharesCustomBulkAction.ts @@ -72,6 +72,12 @@ export class KeySharesCustomBulkAction extends BaseAction { const bulkProcess = multiShares || true; if (bulkProcess) { const { files } = await getKeyStoreFiles(sanitizePath(keystorePath)); + + // validate data + if (files.length !== operatorGroups.length) { + throw Error(`Files amoumt(${files.length}) is not equal clusters amount(${operatorGroups.length})`); + } + // validate all files console.debug('Validating keystore files, do not terminate process!'); let validatedFilesCount = 0; @@ -92,10 +98,9 @@ export class KeySharesCustomBulkAction extends BaseAction { this.ownerNonce = ownerNonce; let processedFilesCount = 0; console.debug('Splitting keystore files to shares, do not terminate process!'); - for (const file of files) { - const keySharesFiles = await this._processFile(file, password, outputFolder, operatorGroups, ownerAddress); - outputFiles = [...outputFiles, ...keySharesFiles]; - + for (const [index, file] of files.entries()) { + const keySharesFile = await this._processFile(file, password, outputFolder, operatorGroups[index], ownerAddress); + outputFiles.push(keySharesFile); processedFilesCount++; process.stdout.write(`\r${processedFilesCount}/${files.length} keystore files successfully split into shares`); } @@ -108,49 +113,45 @@ export class KeySharesCustomBulkAction extends BaseAction { if (isValidPassword !== true) { throw Error(String(isValidPassword)); } - const keySharesFiles = await this._processFile(keystorePath, password, outputFolder, operatorGroups, ownerAddress); - outputFiles = [...keySharesFiles]; + const keySharesFile = await this._processFile(keystorePath, password, outputFolder, operatorGroups[0], ownerAddress); + outputFiles = [keySharesFile]; } return outputFiles; } - private async _processFile(keystoreFilePath: string, password: string, outputFolder: string, operatorGroups: any[], ownerAddress: string) { + private async _processFile(keystoreFilePath: string, password: string, outputFolder: string, operators: any[], ownerAddress: string) { const keystoreData = await readFile(keystoreFilePath); // Initialize SSVKeys SDK const ssvKeys = new SSVKeys(); const { privateKey, publicKey } = await ssvKeys.extractKeys(keystoreData, password); - const keySharesFiles = []; - for (const [index, operators] of operatorGroups.entries()) { - // Build shares from operator IDs and public keys - const encryptedShares = await ssvKeys.buildShares(privateKey, operators); - - const keyShares = new KeyShares(); - await keyShares.update({ - ownerAddress, - ownerNonce: this.ownerNonce, - operators, - publicKey, - }); - - // Build payload and save it in key shares file - await keyShares.buildPayload({ - publicKey, - operators, - encryptedShares, - }, { - ownerAddress, - ownerNonce: this.ownerNonce, - privateKey, - }); - - const keySharesFilePath = await getFilePath('keyshares-files', outputFolder.trim(), `${index}`); - await writeFile(keySharesFilePath, keyShares.toJson()); - keySharesFiles.push(keySharesFilePath); - this.ownerNonce++; - } + // Build shares from operator IDs and public keys + const encryptedShares = await ssvKeys.buildShares(privateKey, operators); + + const keyShares = new KeyShares(); + await keyShares.update({ + ownerAddress, + ownerNonce: this.ownerNonce, + operators, + publicKey, + }); + + // Build payload and save it in key shares file + await keyShares.buildPayload({ + publicKey, + operators, + encryptedShares, + }, { + ownerAddress, + ownerNonce: this.ownerNonce, + privateKey, + }); + + const keySharesFilePath = await getFilePath('keyshares-files', outputFolder.trim()); + await writeFile(keySharesFilePath, keyShares.toJson()); + this.ownerNonce++; - return keySharesFiles; + return keySharesFilePath; } }