diff --git a/package-lock.json b/package-lock.json index 07103ed04b..3f81493720 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "github:OriginTrail/dkg-evm-module#feature/paranets", + "dkg-evm-module": "^4.3.0", "dotenv": "^16.0.1", "ethers": "^5.7.2", "express": "^4.18.1", @@ -26181,7 +26181,7 @@ }, "dkg-evm-module": { "version": "git+ssh://git@github.com/OriginTrail/dkg-evm-module.git#030a97416dd66e05a7a43145c05e7b9f43fac2a5", - "from": "dkg-evm-module@github:OriginTrail/dkg-evm-module#feature/paranets", + "from": "dkg-evm-module@^4.3.0", "requires": { "@openzeppelin/contracts": "^4.9.3", "@prb/math": "^2.5.0", diff --git a/package.json b/package.json index 6df62272d1..780e5ace14 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "github:OriginTrail/dkg-evm-module#feature/paranets", + "dkg-evm-module": "^4.3.0", "dotenv": "^16.0.1", "ethers": "^5.7.2", "express": "^4.18.1", diff --git a/src/commands/paranet/paranet-sync-command.js b/src/commands/paranet/paranet-sync-command.js index aa0a5a49bd..0ba3b1809d 100644 --- a/src/commands/paranet/paranet-sync-command.js +++ b/src/commands/paranet/paranet-sync-command.js @@ -34,7 +34,7 @@ class ParanetSyncCommand extends Command { const paranetId = this.paranetService.constructParanetId(blockchain, contract, tokenId); this.logger.info( - `Paranet sync: Starting paranet sync for paranetId: ${paranetId}, operation ID: ${operationId}`, + `Paranet sync: Starting paranet sync for paranet: ${paranetUAL}, operation ID: ${operationId}`, ); let contractKaCount = await this.blockchainModuleManager.getParanetKnowledgeAssetsCount( @@ -50,9 +50,9 @@ class ParanetSyncCommand extends Command { const cachedMissedKaCount = await this.repositoryModuleManager.getCountOfMissedAssetsOfParanet(paranetUAL); - if (cachedKaCount + cachedMissedKaCount === contractKaCount) { + if (cachedKaCount + cachedMissedKaCount >= contractKaCount) { this.logger.info( - `Paranet sync: KA count from contract and in DB is the same, nothing new to sync, for paranetId: ${paranetId}, operation ID: ${operationId}!`, + `Paranet sync: KA count from contract and in DB is the same, nothing new to sync, for paranet: ${paranetUAL}, operation ID: ${operationId}!`, ); if (cachedMissedKaCount > 0) { this.logger.info( @@ -60,7 +60,7 @@ class ParanetSyncCommand extends Command { cachedMissedKaCount > PARANET_SYNC_KA_COUNT ? PARANET_SYNC_KA_COUNT : cachedMissedKaCount - } assets, for paranetId: ${paranetId}, operation ID: ${operationId}!`, + } assets, for paranet: ${paranetUAL}, operation ID: ${operationId}!`, ); const missedParanetAssets = await this.repositoryModuleManager.getMissedParanetAssetsRecords( @@ -76,7 +76,7 @@ class ParanetSyncCommand extends Command { (async () => { const { knowledgeAssetId } = missedParanetAsset; this.logger.info( - `Paranet sync: Syncing missed token id: ${knowledgeAssetId} for ${paranetId} with operation id: ${operationId}`, + `Paranet sync: Syncing missed token id: ${knowledgeAssetId} for ${paranetUAL} with operation id: ${operationId}`, ); const { knowledgeAssetStorageContract, tokenId: kaTokenId } = @@ -172,7 +172,7 @@ class ParanetSyncCommand extends Command { this.logger.info( `Paranet sync: Syncing ${ contractKaCount + cachedMissedKaCount - cachedKaCount - } new assets for paranetId: ${paranetId}, operation ID: ${operationId}`, + } new assets for paranet: ${paranetUAL}, operation ID: ${operationId}`, ); // TODO: Rename i, should it be cachedKaCount + 1 as cachedKaCount is already in, but count is index const kaToUpdate = []; @@ -199,7 +199,7 @@ class ParanetSyncCommand extends Command { promises.push( (async () => { this.logger.info( - `Paranet sync: Syncing token id: ${knowledgeAssetId} for ${paranetId} with operation id: ${operationId}`, + `Paranet sync: Syncing token id: ${knowledgeAssetId} for ${paranetUAL} with operation id: ${operationId}`, ); const { knowledgeAssetStorageContract, tokenId: kaTokenId } = diff --git a/src/modules/blockchain/implementation/web3-service.js b/src/modules/blockchain/implementation/web3-service.js index 3b25e70dca..76b5148913 100644 --- a/src/modules/blockchain/implementation/web3-service.js +++ b/src/modules/blockchain/implementation/web3-service.js @@ -1659,8 +1659,8 @@ class Web3Service { async getKnowledgeAssetLocatorFromParanetId(paranetId) { const [paranetKAStorageContract, paranetKATokenId] = await this.callContractFunction( - this.ParanetRegistryContract, - 'getKnowledgeAssetLocator', + this.ParanetsRegistryContract, + 'getParanetKnowledgeAssetLocator', [paranetId], ); const tokenId = paranetKATokenId.toNumber(); diff --git a/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js index 3f86f5904d..94ff743e9a 100644 --- a/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js +++ b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js @@ -1,3 +1,5 @@ +import { Sequelize } from 'sequelize'; + class ParanetRepository { constructor(models) { this.sequelize = models.sequelize; @@ -59,6 +61,14 @@ class ParanetRepository { }, }); } + + async getParanetsBlockchains() { + return this.model.findAll({ + attributes: [ + [Sequelize.fn('DISTINCT', Sequelize.col('blockchain_id')), 'blockchain_id'], + ], + }); + } } export default ParanetRepository; diff --git a/src/modules/repository/repository-module-manager.js b/src/modules/repository/repository-module-manager.js index c6330d8f44..30ad35a165 100644 --- a/src/modules/repository/repository-module-manager.js +++ b/src/modules/repository/repository-module-manager.js @@ -523,6 +523,10 @@ class RepositoryModuleManager extends BaseModuleManager { async getCountOfMissedAssetsOfParanet(ual) { return this.getRepository('missed_paranet_asset').getCountOfMissedAssetsOfParanet(ual); } + + async getParanetsBlockchains() { + return this.getRepository('paranet').getParanetsBlockchains(); + } } export default RepositoryModuleManager; diff --git a/src/service/blockchain-event-listener-service.js b/src/service/blockchain-event-listener-service.js index 85261852a5..f0ea2fb9c7 100644 --- a/src/service/blockchain-event-listener-service.js +++ b/src/service/blockchain-event-listener-service.js @@ -11,6 +11,7 @@ import { DELAY_BETWEEN_FAILED_FETCH_EVENTS_MILLIS, CONTRACT_EVENT_TO_GROUP_MAPPING, GROUPED_CONTRACT_EVENTS, + ZERO_BYTES32, } from '../constants/constants.js'; const fetchEventsFailedCount = {}; @@ -578,49 +579,66 @@ class BlockchainEventListenerService { ]); // eslint-disable-next-line no-await-in-loop - const knowledgeAssetId = await this.paranetService.constructKnowledgeAssetId( - blockchain, - contract, - tokenId, - ); + const paranetsBlockchains = await this.repositoryModuleManager.getParanetsBlockchains(); - // eslint-disable-next-line no-await-in-loop - const paranetId = await this.blockchainModuleManager.getParanetId(knowledgeAssetId); - if (paranetId) { - const { - knowledgeAssetStorageContract: paranetKasContract, - tokenId: paranetTokenId, - // eslint-disable-next-line no-await-in-loop - } = await this.blockchainModuleManager.getKnowledgeAssetLocatorFromParanetId( - paranetId, - ); - const paranetUAL = this.ualService.deriveUAL( + if (paranetsBlockchains.includes(blockchain)) { + // eslint-disable-next-line no-await-in-loop + const knowledgeAssetId = await this.paranetService.constructKnowledgeAssetId( blockchain, - paranetKasContract, - paranetTokenId, + contract, + tokenId, ); // eslint-disable-next-line no-await-in-loop - const paranetAssetExists = await this.tripleStoreService.paranetAssetExists( + const paranetId = await this.blockchainModuleManager.getParanetId( blockchain, - contract, - tokenId, - paranetKasContract, - paranetTokenId, + knowledgeAssetId, ); + if (paranetId && paranetId !== ZERO_BYTES32) { + // eslint-disable-next-line no-await-in-loop + const paranetExists = await this.repositoryModuleManager.paranetExists( + paranetId, + blockchain, + ); + if (paranetExists) { + const { + paranetKAStorageContract: paranetKasContract, + tokenId: paranetTokenId, + } = + // eslint-disable-next-line no-await-in-loop + await this.blockchainModuleManager.getKnowledgeAssetLocatorFromParanetId( + blockchain, + paranetId, + ); + const paranetUAL = this.ualService.deriveUAL( + blockchain, + paranetKasContract, + paranetTokenId, + ); - if (paranetAssetExists) { - const kaUAL = this.ualService.deriveUAL(blockchain, contract, tokenId); + // eslint-disable-next-line no-await-in-loop + const paranetAssetExists = await this.tripleStoreService.paranetAssetExists( + blockchain, + contract, + tokenId, + paranetKasContract, + paranetTokenId, + ); - // Create a record for missing Paranet KA - // Paranet sync command will get it from network - // eslint-disable-next-line no-await-in-loop - await this.repositoryModuleManager.createMissedParanetAssetRecord({ - blockchainId: blockchain, - ual: kaUAL, - paranetUal: paranetUAL, - knowledgeAssetId, - }); + if (paranetAssetExists) { + const kaUAL = this.ualService.deriveUAL(blockchain, contract, tokenId); + + // Create a record for missing Paranet KA + // Paranet sync command will get it from network + // eslint-disable-next-line no-await-in-loop + await this.repositoryModuleManager.createMissedParanetAssetRecord({ + blockchainId: blockchain, + ual: kaUAL, + paranetUal: paranetUAL, + knowledgeAssetId, + }); + } + } } } }