From 089ebde404e85fbbfe20332a5c00f40872b19e48 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Mon, 11 Jul 2022 23:42:21 +0700 Subject: [PATCH 1/3] chore: better sync masternode identities logging --- .../abci/handlers/initChainHandlerFactory.js | 35 ++++++++++++++----- .../masternode/handleNewMasternodeFactory.js | 16 +++++---- .../handleUpdatedPubKeyOperatorFactory.js | 16 +++++---- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/packages/js-drive/lib/abci/handlers/initChainHandlerFactory.js b/packages/js-drive/lib/abci/handlers/initChainHandlerFactory.js index b28729a1626..a6f1438e640 100644 --- a/packages/js-drive/lib/abci/handlers/initChainHandlerFactory.js +++ b/packages/js-drive/lib/abci/handlers/initChainHandlerFactory.js @@ -41,17 +41,17 @@ function initChainHandlerFactory( async function initChainHandler(request) { const { time } = request; - const contextLogger = logger.child({ + const consensusLogger = logger.child({ height: request.initialHeight.toString(), abciMethod: 'initChain', }); - contextLogger.debug('InitChain ABCI method requested'); - contextLogger.trace({ abciRequest: request }); + consensusLogger.debug('InitChain ABCI method requested'); + consensusLogger.trace({ abciRequest: request }); await updateSimplifiedMasternodeList( initialCoreChainLockedHeight, { - logger: contextLogger, + logger: consensusLogger, }, ); @@ -61,9 +61,28 @@ function initChainHandlerFactory( await createInitialStateStructure(); - await registerSystemDataContracts(contextLogger, time); + await registerSystemDataContracts(consensusLogger, time); - await synchronizeMasternodeIdentities(initialCoreChainLockedHeight); + const synchronizeMasternodeIdentitiesResult = await synchronizeMasternodeIdentities( + initialCoreChainLockedHeight, + ); + + const { + createdEntities, updatedEntities, removedEntities, fromHeight, toHeight, + } = synchronizeMasternodeIdentitiesResult; + + consensusLogger.info( + `Masternode identities are synced for heights from ${fromHeight} to ${toHeight}: ${createdEntities.length} created, ${updatedEntities.length} updated, ${removedEntities.length} removed`, + ); + + consensusLogger.trace( + { + createdEntities: createdEntities.map((item) => item.toJSON()), + updatedEntities: updatedEntities.map((item) => item.toJSON()), + removedEntities: removedEntities.map((item) => item.toJSON()), + }, + 'Synchronized masternode identities', + ); await groveDBStore.commitTransaction(); @@ -77,9 +96,9 @@ function initChainHandlerFactory( const validatorSetUpdate = createValidatorSetUpdate(validatorSet); - contextLogger.trace(validatorSetUpdate, `Validator set initialized with ${quorumHash} quorum`); + consensusLogger.trace(validatorSetUpdate, `Validator set initialized with ${quorumHash} quorum`); - contextLogger.info( + consensusLogger.info( { chainId: request.chainId, appHash: appHash.toString('hex').toUpperCase(), diff --git a/packages/js-drive/lib/identity/masternode/handleNewMasternodeFactory.js b/packages/js-drive/lib/identity/masternode/handleNewMasternodeFactory.js index d65a7e8861c..eab925d058d 100644 --- a/packages/js-drive/lib/identity/masternode/handleNewMasternodeFactory.js +++ b/packages/js-drive/lib/identity/masternode/handleNewMasternodeFactory.js @@ -79,14 +79,16 @@ function handleNewMasternodeFactory( ); // Create a document in rewards data contract with percentage - result.push( - await createRewardShareDocument( - dataContract, - masternodeIdentifier, - operatorIdentifier, - proRegTxPayload.operatorReward, - ), + const rewardShareDocument = await createRewardShareDocument( + dataContract, + masternodeIdentifier, + operatorIdentifier, + proRegTxPayload.operatorReward, ); + + if (rewardShareDocument) { + result.push(rewardShareDocument); + } } return result; diff --git a/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js b/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js index 74e0aeab6b3..16a27cc56b5 100644 --- a/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js +++ b/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js @@ -77,15 +77,17 @@ function handleUpdatedPubKeyOperatorFactory( proRegTxHash, ); - result.push( - await createRewardShareDocument( - dataContract, - masternodeIdentifier, - operatorIdentifier, - proRegTxPayload.operatorReward, - ), + const rewardShareDocument = await createRewardShareDocument( + dataContract, + masternodeIdentifier, + operatorIdentifier, + proRegTxPayload.operatorReward, ); + if (rewardShareDocument) { + result.push(rewardShareDocument); + } + // Delete document from reward shares data contract with ID corresponding to the // masternode identity (ownerId) and previous operator identity (payToId) From fd57445290de1e2c312ee811c744a3fde3b0b4fa Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Tue, 12 Jul 2022 15:59:56 +0700 Subject: [PATCH 2/3] fix: invalid transaction option --- .../identity/masternode/handleUpdatedPubKeyOperatorFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js b/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js index 16a27cc56b5..d99de0043b9 100644 --- a/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js +++ b/packages/js-drive/lib/identity/masternode/handleUpdatedPubKeyOperatorFactory.js @@ -112,7 +112,7 @@ function handleUpdatedPubKeyOperatorFactory( dataContract, 'rewardShare', previousDocument.getId(), - true, + { useTransaction: true }, ); result.push(previousDocument); From fffceab67f3d6c0d9d3552ec77ee9adf349b6ece Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Tue, 12 Jul 2022 16:05:07 +0700 Subject: [PATCH 3/3] test: fix sync masternode identities tests --- .../synchronizeMasternodeIdentitiesFactory.spec.js | 2 +- .../unit/abci/handlers/initChainHandlerFactory.spec.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js b/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js index 0256ddcf2b3..48d0f69d574 100644 --- a/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js +++ b/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js @@ -551,7 +551,7 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { expect(result.fromHeight).to.be.equal(3); expect(result.toHeight).to.be.equal(45); - expect(result.createdEntities).to.have.lengthOf(4); + expect(result.createdEntities).to.have.lengthOf(3); expect(result.updatedEntities).to.have.lengthOf(0); expect(result.removedEntities).to.have.lengthOf(0); diff --git a/packages/js-drive/test/unit/abci/handlers/initChainHandlerFactory.spec.js b/packages/js-drive/test/unit/abci/handlers/initChainHandlerFactory.spec.js index 87b1569ae61..5c4523a9638 100644 --- a/packages/js-drive/test/unit/abci/handlers/initChainHandlerFactory.spec.js +++ b/packages/js-drive/test/unit/abci/handlers/initChainHandlerFactory.spec.js @@ -45,7 +45,13 @@ describe('initChainHandlerFactory', () => { validatorSetUpdate = new ValidatorSetUpdate(); createValidatorSetUpdateMock = this.sinon.stub().returns(validatorSetUpdate); - synchronizeMasternodeIdentitiesMock = this.sinon.stub(); + synchronizeMasternodeIdentitiesMock = this.sinon.stub().resolves({ + createdEntities: [], + updatedEntities: [], + removedEntities: [], + fromHeight: 1, + toHeight: 42, + }); loggerMock = new LoggerMock(this.sinon);