diff --git a/config/config.json b/config/config.json index 7b3b4121e0..9b1d8b10a8 100644 --- a/config/config.json +++ b/config/config.json @@ -159,6 +159,9 @@ "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "info", + "assetSync": { + "syncParanets": [] + }, "auth": { "ipBasedAuthEnabled": true, "tokenBasedAuthEnabled": false, @@ -317,6 +320,9 @@ "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", + "assetSync": { + "syncParanets": [] + }, "auth": { "ipBasedAuthEnabled": true, "tokenBasedAuthEnabled": false, @@ -488,6 +494,9 @@ "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", + "assetSync": { + "syncParanets": [] + }, "auth": { "ipBasedAuthEnabled": true, "tokenBasedAuthEnabled": false, @@ -659,6 +668,9 @@ "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", + "assetSync": { + "syncParanets": [] + }, "auth": { "ipBasedAuthEnabled": true, "tokenBasedAuthEnabled": false, @@ -830,6 +842,9 @@ "commandExecutorVerboseLoggingEnabled": false, "appDataPath": "data", "logLevel": "trace", + "assetSync": { + "syncParanets": [] + }, "auth": { "ipBasedAuthEnabled": true, "tokenBasedAuthEnabled": false, diff --git a/ot-node.js b/ot-node.js index 06a00c7bab..5614b42e3d 100644 --- a/ot-node.js +++ b/ot-node.js @@ -51,6 +51,7 @@ class OTNode { this.initializeEventEmitter(); await this.initializeModules(); + await this.initializeParanets(); await MigrationExecutor.executeRemoveServiceAgreementsForChiadoMigration( this.container, @@ -341,6 +342,57 @@ class OTNode { await autoUpdaterCommand.execute(); } + async initializeParanets() { + const blockchainModuleManager = this.container.resolve('blockchainModuleManager'); + const tripleStoreService = this.container.resolve('tripleStoreService'); + const tripleStoreModuleManager = this.container.resolve('tripleStoreModuleManager'); + const paranetService = this.container.resolve('paranetService'); + const ualService = this.container.resolve('ualService'); + const validParanets = []; + + // eslint-disable-next-line no-unsafe-optional-chaining + for (const paranetUAL of this.config.assetSync?.syncParanets) { + if (!ualService.isUAL(paranetUAL)) { + this.logger.warn( + `Unable to initialize Paranet with id ${paranetUAL} because of invalid UAL format`, + ); + } else { + const { blockchain, contract, tokenId } = ualService.resolveUAL(paranetUAL); + if (!blockchainModuleManager.getImplementationNames().includes(blockchain)) { + this.logger.warn( + `Unable to initialize Paranet with id ${paranetUAL} because of unsupported blockchain implementation`, + ); + } else { + const paranetId = paranetService.constructParanetId( + blockchain, + contract, + tokenId, + ); + // eslint-disable-next-line no-await-in-loop + const paranetExists = await blockchainModuleManager.paranetExists( + blockchain, + paranetId, + ); + if (!paranetExists) { + this.logger.warn( + `Unable to initialize Paranet with id ${paranetUAL} because it doesn't exist`, + ); + } else { + validParanets.push(paranetUAL); + const repository = paranetService.getParanetRepositoryName(paranetUAL); + // eslint-disable-next-line no-await-in-loop + await tripleStoreModuleManager.initializeParanetRepository(repository); + // eslint-disable-next-line no-await-in-loop + await paranetService.initializeParanetRecord(blockchain, paranetId); + } + } + } + } + + this.config.assetSync.syncParanets = validParanets; + tripleStoreService.initializeRepositories(); + } + stop(code = 0) { this.logger.info('Stopping node...'); process.exit(code); diff --git a/package-lock.json b/package-lock.json index 3a18c9d491..07103ed04b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "origintrail_node", - "version": "6.3.0", + "version": "6.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "origintrail_node", - "version": "6.3.0", + "version": "6.4.0", "license": "ISC", "dependencies": { "@comunica/query-sparql": "^2.4.3", @@ -25,7 +25,7 @@ "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "^4.2.3", + "dkg-evm-module": "github:OriginTrail/dkg-evm-module#feature/paranets", "dotenv": "^16.0.1", "ethers": "^5.7.2", "express": "^4.18.1", @@ -2597,6 +2597,8 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2608,6 +2610,8 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "optional": true, + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3946,6 +3950,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", + "devOptional": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -3961,6 +3966,7 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", + "devOptional": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -5645,22 +5651,30 @@ "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "optional": true, + "peer": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "optional": true, + "peer": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "optional": true, + "peer": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "optional": true, + "peer": true }, "node_modules/@types/argparse": { "version": "1.0.38", @@ -6124,7 +6138,9 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true }, "node_modules/argparse": { "version": "2.0.1", @@ -7567,7 +7583,9 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true, + "peer": true }, "node_modules/cross-fetch": { "version": "4.0.0", @@ -8569,1473 +8587,23 @@ }, "node_modules/diff": { "version": "4.0.2", + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/dkg-evm-module": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.2.3.tgz", - "integrity": "sha512-2BlIDHHle+Z0CuVinoejzVOAp+CO6gGENYDxRDiRfMEuexmPokqm3YJQPfqCmmmPZG6GO7mryJl7HLF6qNgt8w==", + "version": "4.3.0", + "resolved": "git+ssh://git@github.com/OriginTrail/dkg-evm-module.git#030a97416dd66e05a7a43145c05e7b9f43fac2a5", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3", - "@polkadot/api": "^10.1.4", - "@polkadot/keyring": "^11.1.1", - "@polkadot/util": "^11.1.1", - "@polkadot/util-crypto": "^11.1.1", "@prb/math": "^2.5.0", "dotenv": "^16.0.3", "hardhat": "^2.19.1", "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.3.0-beta.13", - "ts-node": "^10.9.1", - "typescript": "^4.9.4" - } - }, - "node_modules/dkg-evm-module/node_modules/@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.11.2.tgz", - "integrity": "sha512-AorCZxCWCoTtdbl4DPUZh+ACe/pbLIS1BkdQY0AFJuZllm0x/yWzjgampcPd5jQAA/O3iKShRBkZqj6Mk9yG/A==", - "dependencies": { - "@polkadot/api-augment": "10.11.2", - "@polkadot/api-base": "10.11.2", - "@polkadot/api-derive": "10.11.2", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/rpc-core": "10.11.2", - "@polkadot/rpc-provider": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/types-known": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.11.2.tgz", - "integrity": "sha512-PTpnqpezc75qBqUtgrc0GYB8h9UHjfbHSRZamAbecIVAJ2/zc6CqtnldeaBlIu1IKTgBzi3FFtTyYu+ZGbNT2Q==", - "dependencies": { - "@polkadot/api-base": "10.11.2", - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-base": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.11.2.tgz", - "integrity": "sha512-4LIjaUfO9nOzilxo7XqzYKCNMtmUypdk8oHPdrRnSjKEsnK7vDsNi+979z2KXNXd2KFSCFHENmI523fYnMnReg==", - "dependencies": { - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-base/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-base/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-base/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.11.2.tgz", - "integrity": "sha512-m3BQbPionkd1iSlknddxnL2hDtolPIsT+aRyrtn4zgMRPoLjHFmTmovvg8RaUyYofJtZeYrnjMw0mdxiSXx7eA==", - "dependencies": { - "@polkadot/api": "10.11.2", - "@polkadot/api-augment": "10.11.2", - "@polkadot/api-base": "10.11.2", - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/wasm-util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api-derive/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "dependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/wasm-util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/api/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/keyring": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-11.1.3.tgz", - "integrity": "sha512-bzGz1cWDYK7MWhp0630W6KOwTC/wsvKKHBvWxReMT7iQwFHeLn5AemUOveqIPxF+esd/UfdN5aFDHApjYcyZsg==", - "dependencies": { - "@polkadot/util": "11.1.3", - "@polkadot/util-crypto": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@polkadot/util": "11.1.3", - "@polkadot/util-crypto": "11.1.3" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/networks": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", - "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", - "dependencies": { - "@polkadot/util": "12.6.2", - "@substrate/ss58-registry": "^1.44.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/networks/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/networks/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/networks/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.11.2.tgz", - "integrity": "sha512-9AhT0WW81/8jYbRcAC6PRmuxXqNhJje8OYiulBQHbG1DTCcjAfz+6VQBke9BwTStzPq7d526+yyBKD17O3zlAA==", - "dependencies": { - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.11.2.tgz", - "integrity": "sha512-Ot0CFLWx8sZhLZog20WDuniPA01Bk2StNDsdAQgcFKPwZw6ShPaZQCHuKLQK6I6DodOrem9FXX7c1hvoKJP5Ww==", - "dependencies": { - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/rpc-provider": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-core/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.11.2.tgz", - "integrity": "sha512-he5jWMpDJp7e+vUzTZDzpkB7ps3H8psRally+/ZvZZScPvFEjfczT7I1WWY9h58s8+ImeVP/lkXjL9h/gUOt3Q==", - "dependencies": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-support": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "@polkadot/x-fetch": "^12.6.2", - "@polkadot/x-global": "^12.6.2", - "@polkadot/x-ws": "^12.6.2", - "eventemitter3": "^5.0.1", - "mock-socket": "^9.3.1", - "nock": "^13.4.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@substrate/connect": "0.7.35" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "dependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/wasm-util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/rpc-provider/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-10.11.2.tgz", - "integrity": "sha512-d52j3xXni+C8GdYZVTSfu8ROAnzXFMlyRvXtor0PudUc8UQHOaC4+mYAkTBGA2gKdmL8MHSfRSbhcxHhsikY6Q==", - "dependencies": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.11.2.tgz", - "integrity": "sha512-8eB8ew04wZiE5GnmFvEFW1euJWmF62SGxb1O+8wL3zoUtB9Xgo1vB6w6xbTrd+HLV6jNSeXXnbbF1BEUvi9cNg==", - "dependencies": { - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.11.2.tgz", - "integrity": "sha512-3xjOQL+LOOMzYqlgP9ROL0FQnzU8lGflgYewzau7AsDlFziSEtb49a9BpYo6zil4koC+QB8zQ9OHGFumG08T8w==", - "dependencies": { - "@polkadot/util": "^12.6.2", - "@polkadot/x-bigint": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-create": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.11.2.tgz", - "integrity": "sha512-SJt23NxYvefRxVZZm6mT9ed1pR6FDoIGQ3xUpbjhTLfU2wuhpKjekMVorYQ6z/gK2JLMu2kV92Ardsz+6GX5XQ==", - "dependencies": { - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-create/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-create/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-create/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-known": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.11.2.tgz", - "integrity": "sha512-kbEIX7NUQFxpDB0FFGNyXX/odY7jbp56RGD+Z4A731fW2xh/DgAQrI994xTzuh0c0EqPE26oQm3kATSpseqo9w==", - "dependencies": { - "@polkadot/networks": "^12.6.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-known/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-known/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-known/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-support": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.11.2.tgz", - "integrity": "sha512-X11hoykFYv/3efg4coZy2hUOUc97JhjQMJLzDhHniFwGLlYU8MeLnPdCVGkXx0xDDjTo4/ptS1XpZ5HYcg+gRw==", - "dependencies": { - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-support/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-support/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types-support/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "dependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/wasm-util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/types/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-11.1.3.tgz", - "integrity": "sha512-Gsqzv1/fSoypS5tnJkM+NJQeT7O4iYlSniubUJnaZVOKsIbueTS1bMQ1y3/h8ISxbKBtICW5cZ6zCej6Q/jC3w==", - "dependencies": { - "@polkadot/x-bigint": "11.1.3", - "@polkadot/x-global": "11.1.3", - "@polkadot/x-textdecoder": "11.1.3", - "@polkadot/x-textencoder": "11.1.3", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-11.1.3.tgz", - "integrity": "sha512-hjH1y6jXQuceJ2NWx7+ei0sR4A7t844XwlNquPxZX3kQbQS+1t6tO4Eo3/95JhPsEaJOXduus02cYEF6gteEYQ==", - "dependencies": { - "@noble/hashes": "1.3.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "11.1.3", - "@polkadot/util": "11.1.3", - "@polkadot/wasm-crypto": "^7.0.3", - "@polkadot/x-bigint": "11.1.3", - "@polkadot/x-randomvalues": "11.1.3", - "@scure/base": "1.1.1", - "tslib": "^2.5.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@polkadot/util": "11.1.3" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto/node_modules/@polkadot/networks": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-11.1.3.tgz", - "integrity": "sha512-goLpX9SswAGGeh1jXB79wHEfWOF5rLIItMHYalujBmhQVxyAqbxP2tzQqPQXDLcnkWbgwkyYGLXaDD72GBqHZw==", - "dependencies": { - "@polkadot/util": "11.1.3", - "@substrate/ss58-registry": "^1.39.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto/node_modules/@polkadot/x-bigint": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-11.1.3.tgz", - "integrity": "sha512-fRUUHfW9VFsXT7sLUUY7gSu8v+PvzNLRwvjnp+Ly8vFx9LTLuVGFCi+mpysuRTaPpqZZJlzBJ3fST7xTGh67Pg==", - "dependencies": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util-crypto/node_modules/@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util/node_modules/@polkadot/x-bigint": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-11.1.3.tgz", - "integrity": "sha512-fRUUHfW9VFsXT7sLUUY7gSu8v+PvzNLRwvjnp+Ly8vFx9LTLuVGFCi+mpysuRTaPpqZZJlzBJ3fST7xTGh67Pg==", - "dependencies": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/util/node_modules/@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-bridge": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz", - "integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==", - "dependencies": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz", - "integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==", - "dependencies": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-init": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz", - "integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-init": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz", - "integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==", - "dependencies": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz", - "integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==", - "dependencies": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/wasm-util": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz", - "integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-bigint": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", - "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-fetch": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", - "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "node-fetch": "^3.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-global": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", - "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-randomvalues": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-11.1.3.tgz", - "integrity": "sha512-kZjbRgxokMR9UTodZQKs6s3C/Q2YgeizcxpDCghM/VdvQUE8OVBGNzduF7SvBvQyg2Qbg8jMcSxXOY7UgcOWSg==", - "dependencies": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-randomvalues/node_modules/@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textdecoder": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-11.1.3.tgz", - "integrity": "sha512-NhOjuXVfYRMw9l0VhCtZOtcWefZth58p5KpVOrFyJZd12fTsoMO5/746K7QoAjWRrLQTJ/LHCEKCtWww0LwVPw==", - "dependencies": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textdecoder/node_modules/@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textencoder": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-11.1.3.tgz", - "integrity": "sha512-7DmqjlPN8aQexLUKwoHeadihpUnW8hjpXEru+aEDxjgq9XIxPvb++NeBK+Mra9RzzZRuiT/K5z16HlwKN//ewg==", - "dependencies": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-textencoder/node_modules/@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dkg-evm-module/node_modules/@polkadot/x-ws": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", - "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2", - "ws": "^8.15.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dkg-evm-module/node_modules/@substrate/connect": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.35.tgz", - "integrity": "sha512-Io8vkalbwaye+7yXfG1Nj52tOOoJln2bMlc7Q9Yy3vEWqZEVkgKmcPVzbwV0CWL3QD+KMPDA2Dnw/X7EdwgoLw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@substrate/connect-extension-protocol": "^1.0.1", - "smoldot": "2.0.7" + "hardhat-deploy-ethers": "^0.3.0-beta.13" } }, "node_modules/dkg.js": { @@ -15476,7 +14044,9 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true }, "node_modules/match-all": { "version": "1.2.6", @@ -18902,15 +17472,6 @@ "node": ">=8.0.0" } }, - "node_modules/smoldot": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.7.tgz", - "integrity": "sha512-VAOBqEen6vises36/zgrmAT1GWk2qE3X8AGnO7lmQFdskbKx8EovnwS22rtPAG+Y1Rk23/S22kDJUdPANyPkBA==", - "optional": true, - "dependencies": { - "ws": "^8.8.1" - } - }, "node_modules/solc": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", @@ -19773,6 +18334,8 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "optional": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -19815,6 +18378,8 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "optional": true, + "peer": true, "engines": { "node": ">=0.4.0" } @@ -20004,6 +18569,8 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "optional": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -20302,7 +18869,9 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "optional": true, + "peer": true }, "node_modules/validate-iri": { "version": "1.0.1", @@ -21084,6 +19653,7 @@ "node_modules/ws": { "version": "8.16.0", "license": "MIT", + "optional": true, "engines": { "node": ">=10.0.0" }, @@ -21292,6 +19862,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true, "engines": { "node": ">=6" } @@ -23491,6 +22063,8 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "optional": true, + "peer": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -23499,6 +22073,8 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "optional": true, + "peer": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -24299,14 +22875,16 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.1" + "version": "3.1.1", + "devOptional": true }, "@jridgewell/set-array": { "version": "1.1.2", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.15" + "version": "1.4.15", + "devOptional": true }, "@jridgewell/trace-mapping": { "version": "0.3.22", @@ -25575,22 +24153,30 @@ "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "optional": true, + "peer": true }, "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "optional": true, + "peer": true }, "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "optional": true, + "peer": true }, "@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "optional": true, + "peer": true }, "@types/argparse": { "version": "1.0.38" @@ -25931,7 +24517,9 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true }, "argparse": { "version": "2.0.1" @@ -26898,7 +25486,9 @@ "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true, + "peer": true }, "cross-fetch": { "version": "4.0.0", @@ -27586,1124 +26176,19 @@ "dev": true }, "diff": { - "version": "4.0.2" + "version": "4.0.2", + "devOptional": true }, "dkg-evm-module": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-4.2.3.tgz", - "integrity": "sha512-2BlIDHHle+Z0CuVinoejzVOAp+CO6gGENYDxRDiRfMEuexmPokqm3YJQPfqCmmmPZG6GO7mryJl7HLF6qNgt8w==", + "version": "git+ssh://git@github.com/OriginTrail/dkg-evm-module.git#030a97416dd66e05a7a43145c05e7b9f43fac2a5", + "from": "dkg-evm-module@github:OriginTrail/dkg-evm-module#feature/paranets", "requires": { "@openzeppelin/contracts": "^4.9.3", - "@polkadot/api": "^10.1.4", - "@polkadot/keyring": "^11.1.1", - "@polkadot/util": "^11.1.1", - "@polkadot/util-crypto": "^11.1.1", "@prb/math": "^2.5.0", "dotenv": "^16.0.3", "hardhat": "^2.19.1", "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.3.0-beta.13", - "ts-node": "^10.9.1", - "typescript": "^4.9.4" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", - "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" - }, - "@polkadot/api": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.11.2.tgz", - "integrity": "sha512-AorCZxCWCoTtdbl4DPUZh+ACe/pbLIS1BkdQY0AFJuZllm0x/yWzjgampcPd5jQAA/O3iKShRBkZqj6Mk9yG/A==", - "requires": { - "@polkadot/api-augment": "10.11.2", - "@polkadot/api-base": "10.11.2", - "@polkadot/api-derive": "10.11.2", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/rpc-core": "10.11.2", - "@polkadot/rpc-provider": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/types-known": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" - }, - "@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "requires": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "requires": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" - } - } - }, - "@polkadot/api-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.11.2.tgz", - "integrity": "sha512-PTpnqpezc75qBqUtgrc0GYB8h9UHjfbHSRZamAbecIVAJ2/zc6CqtnldeaBlIu1IKTgBzi3FFtTyYu+ZGbNT2Q==", - "requires": { - "@polkadot/api-base": "10.11.2", - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/api-base": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.11.2.tgz", - "integrity": "sha512-4LIjaUfO9nOzilxo7XqzYKCNMtmUypdk8oHPdrRnSjKEsnK7vDsNi+979z2KXNXd2KFSCFHENmI523fYnMnReg==", - "requires": { - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/api-derive": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.11.2.tgz", - "integrity": "sha512-m3BQbPionkd1iSlknddxnL2hDtolPIsT+aRyrtn4zgMRPoLjHFmTmovvg8RaUyYofJtZeYrnjMw0mdxiSXx7eA==", - "requires": { - "@polkadot/api": "10.11.2", - "@polkadot/api-augment": "10.11.2", - "@polkadot/api-base": "10.11.2", - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" - }, - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "requires": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" - } - } - }, - "@polkadot/keyring": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-11.1.3.tgz", - "integrity": "sha512-bzGz1cWDYK7MWhp0630W6KOwTC/wsvKKHBvWxReMT7iQwFHeLn5AemUOveqIPxF+esd/UfdN5aFDHApjYcyZsg==", - "requires": { - "@polkadot/util": "11.1.3", - "@polkadot/util-crypto": "11.1.3", - "tslib": "^2.5.0" - } - }, - "@polkadot/networks": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", - "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", - "requires": { - "@polkadot/util": "12.6.2", - "@substrate/ss58-registry": "^1.44.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/rpc-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.11.2.tgz", - "integrity": "sha512-9AhT0WW81/8jYbRcAC6PRmuxXqNhJje8OYiulBQHbG1DTCcjAfz+6VQBke9BwTStzPq7d526+yyBKD17O3zlAA==", - "requires": { - "@polkadot/rpc-core": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/rpc-core": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.11.2.tgz", - "integrity": "sha512-Ot0CFLWx8sZhLZog20WDuniPA01Bk2StNDsdAQgcFKPwZw6ShPaZQCHuKLQK6I6DodOrem9FXX7c1hvoKJP5Ww==", - "requires": { - "@polkadot/rpc-augment": "10.11.2", - "@polkadot/rpc-provider": "10.11.2", - "@polkadot/types": "10.11.2", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/rpc-provider": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.11.2.tgz", - "integrity": "sha512-he5jWMpDJp7e+vUzTZDzpkB7ps3H8psRally+/ZvZZScPvFEjfczT7I1WWY9h58s8+ImeVP/lkXjL9h/gUOt3Q==", - "requires": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-support": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "@polkadot/x-fetch": "^12.6.2", - "@polkadot/x-global": "^12.6.2", - "@polkadot/x-ws": "^12.6.2", - "@substrate/connect": "0.7.35", - "eventemitter3": "^5.0.1", - "mock-socket": "^9.3.1", - "nock": "^13.4.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" - }, - "@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "requires": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "requires": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" - } - } - }, - "@polkadot/types": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-10.11.2.tgz", - "integrity": "sha512-d52j3xXni+C8GdYZVTSfu8ROAnzXFMlyRvXtor0PudUc8UQHOaC4+mYAkTBGA2gKdmL8MHSfRSbhcxHhsikY6Q==", - "requires": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types-augment": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" - }, - "@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "requires": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "requires": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" - } - } - }, - "@polkadot/types-augment": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.11.2.tgz", - "integrity": "sha512-8eB8ew04wZiE5GnmFvEFW1euJWmF62SGxb1O+8wL3zoUtB9Xgo1vB6w6xbTrd+HLV6jNSeXXnbbF1BEUvi9cNg==", - "requires": { - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/types-codec": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.11.2.tgz", - "integrity": "sha512-3xjOQL+LOOMzYqlgP9ROL0FQnzU8lGflgYewzau7AsDlFziSEtb49a9BpYo6zil4koC+QB8zQ9OHGFumG08T8w==", - "requires": { - "@polkadot/util": "^12.6.2", - "@polkadot/x-bigint": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/types-create": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.11.2.tgz", - "integrity": "sha512-SJt23NxYvefRxVZZm6mT9ed1pR6FDoIGQ3xUpbjhTLfU2wuhpKjekMVorYQ6z/gK2JLMu2kV92Ardsz+6GX5XQ==", - "requires": { - "@polkadot/types-codec": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/types-known": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.11.2.tgz", - "integrity": "sha512-kbEIX7NUQFxpDB0FFGNyXX/odY7jbp56RGD+Z4A731fW2xh/DgAQrI994xTzuh0c0EqPE26oQm3kATSpseqo9w==", - "requires": { - "@polkadot/networks": "^12.6.2", - "@polkadot/types": "10.11.2", - "@polkadot/types-codec": "10.11.2", - "@polkadot/types-create": "10.11.2", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/types-support": { - "version": "10.11.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.11.2.tgz", - "integrity": "sha512-X11hoykFYv/3efg4coZy2hUOUc97JhjQMJLzDhHniFwGLlYU8MeLnPdCVGkXx0xDDjTo4/ptS1XpZ5HYcg+gRw==", - "requires": { - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "dependencies": { - "@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "requires": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - } - } - }, - "@polkadot/util": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-11.1.3.tgz", - "integrity": "sha512-Gsqzv1/fSoypS5tnJkM+NJQeT7O4iYlSniubUJnaZVOKsIbueTS1bMQ1y3/h8ISxbKBtICW5cZ6zCej6Q/jC3w==", - "requires": { - "@polkadot/x-bigint": "11.1.3", - "@polkadot/x-global": "11.1.3", - "@polkadot/x-textdecoder": "11.1.3", - "@polkadot/x-textencoder": "11.1.3", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1", - "tslib": "^2.5.0" - }, - "dependencies": { - "@polkadot/x-bigint": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-11.1.3.tgz", - "integrity": "sha512-fRUUHfW9VFsXT7sLUUY7gSu8v+PvzNLRwvjnp+Ly8vFx9LTLuVGFCi+mpysuRTaPpqZZJlzBJ3fST7xTGh67Pg==", - "requires": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - } - }, - "@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "requires": { - "tslib": "^2.5.0" - } - } - } - }, - "@polkadot/util-crypto": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-11.1.3.tgz", - "integrity": "sha512-hjH1y6jXQuceJ2NWx7+ei0sR4A7t844XwlNquPxZX3kQbQS+1t6tO4Eo3/95JhPsEaJOXduus02cYEF6gteEYQ==", - "requires": { - "@noble/hashes": "1.3.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "11.1.3", - "@polkadot/util": "11.1.3", - "@polkadot/wasm-crypto": "^7.0.3", - "@polkadot/x-bigint": "11.1.3", - "@polkadot/x-randomvalues": "11.1.3", - "@scure/base": "1.1.1", - "tslib": "^2.5.0", - "tweetnacl": "^1.0.3" - }, - "dependencies": { - "@polkadot/networks": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-11.1.3.tgz", - "integrity": "sha512-goLpX9SswAGGeh1jXB79wHEfWOF5rLIItMHYalujBmhQVxyAqbxP2tzQqPQXDLcnkWbgwkyYGLXaDD72GBqHZw==", - "requires": { - "@polkadot/util": "11.1.3", - "@substrate/ss58-registry": "^1.39.0", - "tslib": "^2.5.0" - } - }, - "@polkadot/x-bigint": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-11.1.3.tgz", - "integrity": "sha512-fRUUHfW9VFsXT7sLUUY7gSu8v+PvzNLRwvjnp+Ly8vFx9LTLuVGFCi+mpysuRTaPpqZZJlzBJ3fST7xTGh67Pg==", - "requires": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - } - }, - "@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "requires": { - "tslib": "^2.5.0" - } - } - } - }, - "@polkadot/wasm-bridge": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz", - "integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==", - "requires": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/wasm-crypto": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz", - "integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==", - "requires": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-init": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz", - "integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@polkadot/wasm-crypto-init": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz", - "integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==", - "requires": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz", - "integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==", - "requires": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/wasm-util": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz", - "integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@polkadot/x-bigint": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", - "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-fetch": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", - "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "node-fetch": "^3.3.2", - "tslib": "^2.6.2" - } - }, - "@polkadot/x-global": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", - "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-11.1.3.tgz", - "integrity": "sha512-kZjbRgxokMR9UTodZQKs6s3C/Q2YgeizcxpDCghM/VdvQUE8OVBGNzduF7SvBvQyg2Qbg8jMcSxXOY7UgcOWSg==", - "requires": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "requires": { - "tslib": "^2.5.0" - } - } - } - }, - "@polkadot/x-textdecoder": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-11.1.3.tgz", - "integrity": "sha512-NhOjuXVfYRMw9l0VhCtZOtcWefZth58p5KpVOrFyJZd12fTsoMO5/746K7QoAjWRrLQTJ/LHCEKCtWww0LwVPw==", - "requires": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "requires": { - "tslib": "^2.5.0" - } - } - } - }, - "@polkadot/x-textencoder": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-11.1.3.tgz", - "integrity": "sha512-7DmqjlPN8aQexLUKwoHeadihpUnW8hjpXEru+aEDxjgq9XIxPvb++NeBK+Mra9RzzZRuiT/K5z16HlwKN//ewg==", - "requires": { - "@polkadot/x-global": "11.1.3", - "tslib": "^2.5.0" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-11.1.3.tgz", - "integrity": "sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg==", - "requires": { - "tslib": "^2.5.0" - } - } - } - }, - "@polkadot/x-ws": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", - "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", - "requires": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2", - "ws": "^8.15.1" - } - }, - "@substrate/connect": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.35.tgz", - "integrity": "sha512-Io8vkalbwaye+7yXfG1Nj52tOOoJln2bMlc7Q9Yy3vEWqZEVkgKmcPVzbwV0CWL3QD+KMPDA2Dnw/X7EdwgoLw==", - "optional": true, - "requires": { - "@substrate/connect-extension-protocol": "^1.0.1", - "smoldot": "2.0.7" - } - } + "hardhat-deploy-ethers": "^0.3.0-beta.13" } }, "dkg.js": { @@ -32375,7 +29860,9 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true }, "match-all": { "version": "1.2.6", @@ -34622,15 +32109,6 @@ "version": "1.6.6", "dev": true }, - "smoldot": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.7.tgz", - "integrity": "sha512-VAOBqEen6vises36/zgrmAT1GWk2qE3X8AGnO7lmQFdskbKx8EovnwS22rtPAG+Y1Rk23/S22kDJUdPANyPkBA==", - "optional": true, - "requires": { - "ws": "^8.8.1" - } - }, "solc": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", @@ -35226,6 +32704,8 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "optional": true, + "peer": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -35245,7 +32725,9 @@ "acorn-walk": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==" + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "optional": true, + "peer": true } } }, @@ -35374,7 +32856,9 @@ "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "optional": true, + "peer": true }, "uint8arrays": { "version": "3.1.1", @@ -35574,7 +33058,9 @@ "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "optional": true, + "peer": true }, "validate-iri": { "version": "1.0.1" @@ -36143,6 +33629,7 @@ }, "ws": { "version": "8.16.0", + "optional": true, "requires": {} }, "xhr": { @@ -36277,7 +33764,9 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true }, "yocto-queue": { "version": "0.1.0" diff --git a/package.json b/package.json index 57fad629e8..6df62272d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "origintrail_node", - "version": "6.3.0", + "version": "6.4.0", "description": "OTNode V6", "main": "index.js", "type": "module", @@ -80,7 +80,7 @@ "axios": "^1.6.0", "cors": "^2.8.5", "deep-extend": "^0.6.0", - "dkg-evm-module": "^4.2.3", + "dkg-evm-module": "github:OriginTrail/dkg-evm-module#feature/paranets", "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 new file mode 100644 index 0000000000..a95b2ebb38 --- /dev/null +++ b/src/commands/paranet/paranet-sync-command.js @@ -0,0 +1,417 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-await-in-loop */ +import { setTimeout } from 'timers/promises'; +import Command from '../command.js'; +import { + ERROR_TYPE, + PARANET_SYNC_FREQUENCY_MILLS, + OPERATION_ID_STATUS, + CONTENT_ASSET_HASH_FUNCTION_ID, + SIMPLE_ASSET_SYNC_PARAMETERS, + TRIPLE_STORE_REPOSITORIES, + PARANET_SYNC_KA_COUNT, + OPERATION_STATUS, +} from '../../constants/constants.js'; + +class ParanetSyncCommand extends Command { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.tripleStoreService = ctx.tripleStoreService; + this.ualService = ctx.ualService; + this.paranetService = ctx.paranetService; + this.getService = ctx.getService; + this.repositoryModuleManager = ctx.repositoryModuleManager; + + this.errorType = ERROR_TYPE.PARANET.PARANET_SYNC_ERROR; + } + + async execute(command) { + const { operationId, paranetUAL } = command.data; + + const { blockchain, contract, tokenId } = this.ualService.resolveUAL(paranetUAL); + const paranetId = this.paranetService.constructParanetId(blockchain, contract, tokenId); + + this.logger.info( + `Paranet sync: Starting paranet sync for paranetId: ${paranetId}, operation ID: ${operationId}`, + ); + + let contractKaCount = await this.blockchainModuleManager.getParanetKnowledgeAssetsCount( + blockchain, + paranetId, + ); + contractKaCount = contractKaCount.toNumber(); + + const cachedKaCount = ( + await this.repositoryModuleManager.getParanetKnowledgeAssetsCount(paranetId, blockchain) + )[0].dataValues.ka_count; + + const cachedMissedKaCount = + await this.repositoryModuleManager.getCountOfMissedAssetsOfParanet(paranetUAL); + + 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}!`, + ); + if (cachedMissedKaCount > 0) { + this.logger.info( + `Paranet sync: Missed KA count is ${cachedMissedKaCount} syncing ${ + cachedKaCount > PARANET_SYNC_KA_COUNT + ? PARANET_SYNC_KA_COUNT + : cachedKaCount + } assets, for paranetId: ${paranetId}, operation ID: ${operationId}!`, + ); + const missedPararnetAssets = + await this.repositoryModuleManager.getMissedParanetAssetsRecords( + paranetUAL, + PARANET_SYNC_KA_COUNT, + ); + + const promises = []; + // It's array of keywords not tokenId + // .map((ka) => ka.tokenId) + missedPararnetAssets.forEach((missedParanetAsset) => { + promises.push( + (async () => { + const { knowledgeAssetId } = missedParanetAsset; + this.logger.info( + `Paranet sync: Syncing missed token id: ${knowledgeAssetId} for ${paranetId} with operation id: ${operationId}`, + ); + + const { knowledgeAssetStorageContract, tokenId: kaTokenId } = + await this.blockchainModuleManager.getParanetKnowledgeAssetLocator( + blockchain, + knowledgeAssetId, + ); + + const assertionIds = await this.blockchainModuleManager.getAssertionIds( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + ); + + for ( + let stateIndex = assertionIds.length - 2; + stateIndex >= 0; + stateIndex -= 1 + ) { + await this.syncAsset( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + assertionIds, + stateIndex, + paranetId, + tokenId, + TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, + false, + // It should never delete as it never was in storage + // But maybe will becouse this is unfainalized + stateIndex === assertionIds.length - 2, + paranetUAL, + ); + } + + // Then sync the last one, but put it in the current repo + await this.syncAsset( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + assertionIds, + assertionIds.length - 1, + paranetId, + tokenId, + TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, + true, + false, + paranetUAL, + ); + + return true; + })(), + ); // Immediately invoke the async function + }); + + const promisesResolution = await Promise.all(promises); + + const successfulCount = promisesResolution.reduce((count, value) => { + if (value) { + return count + 1; + } + return count; + }, 0); + + await this.repositoryModuleManager.updateParanetKaCount( + paranetId, + blockchain, + cachedKaCount + successfulCount, + ); + return Command.repeat(); + } + return Command.repeat(); + } + + this.logger.info( + `Paranet sync: Syncing ${ + contractKaCount + cachedMissedKaCount - cachedKaCount + } new assets for paranetId: ${paranetId}, operation ID: ${operationId}`, + ); + // TODO: Rename i, should it be cachedKaCount + 1 as cachedKaCount is already in, but count is index + const kaToUpdate = []; + for ( + let i = cachedKaCount + cachedMissedKaCount; + i <= contractKaCount; + i += PARANET_SYNC_KA_COUNT + ) { + const nextKaArray = + await this.blockchainModuleManager.getParanetKnowledgeAssetsWithPagination( + blockchain, + paranetId, + i, + PARANET_SYNC_KA_COUNT, + ); + if (!nextKaArray.length) break; + kaToUpdate.push(...nextKaArray); + } + + const promises = []; + // It's array of keywords not tokenId + // .map((ka) => ka.tokenId) + kaToUpdate.forEach((knowledgeAssetId) => { + promises.push( + (async () => { + this.logger.info( + `Paranet sync: Syncing token id: ${knowledgeAssetId} for ${paranetId} with operation id: ${operationId}`, + ); + + const { knowledgeAssetStorageContract, tokenId: kaTokenId } = + await this.blockchainModuleManager.getParanetKnowledgeAssetLocator( + blockchain, + knowledgeAssetId, + ); + + const assertionIds = await this.blockchainModuleManager.getAssertionIds( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + ); + + for ( + let stateIndex = assertionIds.length - 2; + stateIndex >= 0; + stateIndex -= 1 + ) { + await this.syncAsset( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + assertionIds, + stateIndex, + paranetId, + tokenId, + TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, + false, + // It should never delete as it never was in storage + // But maybe will because this is not finalized + stateIndex === assertionIds.length - 2, + paranetUAL, + knowledgeAssetId, + ); + } + + // Then sync the last one, but put it in the current repo + await this.syncAsset( + blockchain, + knowledgeAssetStorageContract, + kaTokenId, + assertionIds, + assertionIds.length - 1, + paranetId, + tokenId, + TRIPLE_STORE_REPOSITORIES.PUBLIC_CURRENT, + true, + false, + paranetUAL, + knowledgeAssetId, + ); + + return true; + })(), + ); // Immediately invoke the async function + }); + + const promisesResolution = await Promise.all(promises); + + const successfulCount = promisesResolution.reduce((count, value) => { + if (value) { + return count + 1; + } + return count; + }, 0); + + await this.repositoryModuleManager.updateParanetKaCount( + paranetId, + blockchain, + cachedKaCount + successfulCount, + ); + return Command.repeat(); + } + + async syncAsset( + blockchain, + contract, + tokenId, + assertionIds, + stateIndex, + paranetId, + paranetTokenId, + paranetRepository, + latestAsset, + deleteFromEarlier, + paranetUAL, + knowledgeAssetId, + ) { + const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + try { + const statePresentInParanetRepository = + await this.tripleStoreService.paranetAssetExists( + blockchain, + contract, + tokenId, + contract, + paranetTokenId, + ); + + if (statePresentInParanetRepository) { + this.logger.trace( + `Paranet sync: StateIndex: ${stateIndex} for tokenId: ${tokenId} found in triple store blockchain: ${blockchain}`, + ); + return; + } + + this.logger.debug( + `Paranet sync: Fetching state index: ${stateIndex + 1} of ${ + assertionIds.length + } for asset with ual: ${ual}. blockchain: ${blockchain}`, + ); + const assertionId = assertionIds[stateIndex]; + + const operationId = await this.operationIdService.generateOperationId( + OPERATION_ID_STATUS.GET.GET_START, + ); + + await Promise.all([ + this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_INIT_START, + ), + this.repositoryModuleManager.createOperationRecord( + this.getService.getOperationName(), + operationId, + OPERATION_STATUS.IN_PROGRESS, + ), + ]); + + const hashFunctionId = CONTENT_ASSET_HASH_FUNCTION_ID; + + this.logger.debug( + `Paranet sync: Get for ${ual} with operation id ${operationId} initiated. blockchain: ${blockchain}`, + ); + + await this.commandExecutor.add({ + name: 'networkGetCommand', + sequence: [], + delay: 0, + data: { + operationId, + id: ual, + blockchain, + contract, + tokenId, + state: assertionId, + hashFunctionId, + assertionId, + assetSync: true, + stateIndex, + paranetSync: true, + paranetTokenId, + paranetLatestAsset: latestAsset, + }, + transactional: false, + }); + + await this.operationIdService.updateOperationIdStatus( + operationId, + blockchain, + OPERATION_ID_STATUS.GET.GET_INIT_END, + ); + + let attempt = 0; + let getResult; + do { + await setTimeout(SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_INTERVAL_MILLIS); + getResult = await this.operationIdService.getOperationIdRecord(operationId); + attempt += 1; + } while ( + attempt < SIMPLE_ASSET_SYNC_PARAMETERS.GET_RESULT_POLLING_MAX_ATTEMPTS && + getResult?.status !== OPERATION_ID_STATUS.FAILED && + getResult?.status !== OPERATION_ID_STATUS.COMPLETED + ); + + if (getResult.status === OPERATION_ID_STATUS.FAILED) { + await this.repositoryModuleManager.createMissedParanetAssetRecord({ + blockchainId: blockchain, + ual, + paranetUal: paranetUAL, + knowledgeAssetId, + }); + return false; + } + } catch (error) { + this.logger.warn( + `Paranet sync: Unable to sync tokenId: ${tokenId}, for contract: ${contract} state index: ${stateIndex} blockchain: ${blockchain}, error: ${error}`, + ); + await this.repositoryModuleManager.createMissedParanetAssetRecord({ + blockchainId: blockchain, + ual, + paranetUal: paranetUAL, + knowledgeAssetId, + }); + + return false; + } + + return true; + } + + /** + * Recover system from failure + * @param command + * @param error + */ + async recover(command) { + this.logger.warn(`Failed to execute ${command.name}. Error: ${command.message}`); + + return Command.repeat(); + } + + /** + * Builds default paranetSyncCommands + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'paranetSyncCommands', + data: {}, + transactional: false, + period: PARANET_SYNC_FREQUENCY_MILLS, + }; + Object.assign(command, map); + return command; + } +} + +export default ParanetSyncCommand; diff --git a/src/commands/paranet/start-paranet-sync-commands.js b/src/commands/paranet/start-paranet-sync-commands.js new file mode 100644 index 0000000000..4a5ba78321 --- /dev/null +++ b/src/commands/paranet/start-paranet-sync-commands.js @@ -0,0 +1,72 @@ +import Command from '../command.js'; +import { ERROR_TYPE, PARANET_SYNC_FREQUENCY_MILLS } from '../../constants/constants.js'; + +class StartParanetSyncCommands extends Command { + constructor(ctx) { + super(ctx); + this.commandExecutor = ctx.commandExecutor; + this.ualService = ctx.ualService; + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + + this.errorType = ERROR_TYPE.PARANET.START_PARANET_SYNC_ERROR; + } + + async execute() { + const operationId = this.operationIdService.generateId(); + + this.logger.info( + `Paranet sync: Starting Paranet sync command for operation id: ${operationId}`, + ); + + await this.commandExecutor.delete('paranetSyncCommand'); + + const promises = []; + this.config.assetSync?.syncParanets.forEach(async (paranetUAL) => { + const commandData = { + paranetUAL, + operationId, + }; + + promises.push( + this.commandExecutor.add({ + name: 'paranetSyncCommand', + data: commandData, + period: PARANET_SYNC_FREQUENCY_MILLS, + }), + ); + }); + + await Promise.all(promises); + + return Command.empty(); + } + + /** + * Recover system from failure + * @param command + * @param error + */ + async recover(command) { + this.logger.warn(`Failed to execute ${command.name}. Error: ${command.message}`); + + return Command.repeat(); + } + + /** + * Builds default startParanetSyncCommands + * @param map + * @returns {{add, data: *, delay: *, deadline: *}} + */ + default(map) { + const command = { + name: 'startParanetSyncCommands', + data: {}, + transactional: false, + }; + Object.assign(command, map); + return command; + } +} + +export default StartParanetSyncCommands; diff --git a/src/commands/protocols/get/sender/get-schedule-messages-command.js b/src/commands/protocols/get/sender/get-schedule-messages-command.js index fdcaa750be..704bae3b56 100644 --- a/src/commands/protocols/get/sender/get-schedule-messages-command.js +++ b/src/commands/protocols/get/sender/get-schedule-messages-command.js @@ -15,6 +15,9 @@ class GetScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { ...super.getNextCommandData(command), state: command.data.state, assetSync: command.data.assetSync, + paranetSync: command.data.paranetSync, + paranetTokenId: command.data.paranetTokenId, + paranetLatestAsset: command.data.paranetLatestAsset, }; } diff --git a/src/commands/query/query-command.js b/src/commands/query/query-command.js index d75acf8dc0..b078558e35 100644 --- a/src/commands/query/query-command.js +++ b/src/commands/query/query-command.js @@ -11,18 +11,20 @@ class QueryCommand extends Command { super(ctx); this.dataService = ctx.dataService; this.tripleStoreService = ctx.tripleStoreService; + this.paranetService = ctx.paranetService; this.errorType = ERROR_TYPE.QUERY.LOCAL_QUERY_ERROR; } async execute(command) { const { - query, queryType, operationId, repository = TRIPLE_STORE_REPOSITORIES.PRIVATE_CURRENT, } = command.data; + let { query } = command.data; + let data; await this.operationIdService.updateOperationIdStatus( @@ -30,6 +32,20 @@ class QueryCommand extends Command { null, OPERATION_ID_STATUS.QUERY.QUERY_START, ); + this.validateRepositoryName(repository); + // check if it's federated query + const pattern = /SERVICE\s+<[^>]+>/g; + const matches = query.match(pattern); + if (matches) { + for (const repositoryInOriginalQuery in matches) { + const federatedQueryRepositoryName = + this.paranetService.getParanetRepositoryByParanetName( + repositoryInOriginalQuery, + ); + this.validateRepositoryName(federatedQueryRepositoryName); + query = query.replace(repositoryInOriginalQuery, federatedQueryRepositoryName); + } + } try { switch (queryType) { case QUERY_TYPES.CONSTRUCT: { @@ -66,6 +82,17 @@ class QueryCommand extends Command { return Command.empty(); } + validateRepositoryName(repository) { + if ( + this.config.assetSync?.syncParanets.indexOf( + this.paranetService.getParanetRepositoryByParanetName(repository), + ) === -1 && + TRIPLE_STORE_REPOSITORIES.indexOf(repository) === -1 + ) { + throw Error(`Query failed! Repository with name: ${repository} doesn't exist`); + } + } + /** * Builds default getInitCommand * @param map diff --git a/src/constants/constants.js b/src/constants/constants.js index be2b6d2da2..112a8a3767 100644 --- a/src/constants/constants.js +++ b/src/constants/constants.js @@ -89,6 +89,8 @@ export const PEER_OFFLINE_LIMIT = 24 * 60 * 60 * 1000; export const CONTENT_ASSET_HASH_FUNCTION_ID = 1; +export const PARANET_SYNC_KA_COUNT = 50; + export const TRIPLE_STORE_REPOSITORIES = { PUBLIC_CURRENT: 'publicCurrent', PUBLIC_HISTORY: 'publicHistory', @@ -150,6 +152,8 @@ export const HIGH_TRAFFIC_OPERATIONS_NUMBER_PER_HOUR = 16000; export const SHARDING_TABLE_CHECK_COMMAND_FREQUENCY_MINUTES = 30; +export const PARANET_SYNC_FREQUENCY_MILLS = 5 * 60 * 1000; + export const SEND_TELEMETRY_COMMAND_FREQUENCY_MINUTES = 15; export const PEER_RECORD_UPDATE_DELAY = 30 * 60 * 1000; // 30 minutes @@ -184,6 +188,7 @@ export const PERMANENT_COMMANDS = [ 'publishResponseCleanerCommand', 'updateCleanerCommand', 'updateResponseCleanerCommand', + 'startParanetSyncCommands', ]; export const MAX_COMMAND_DELAY_IN_MILLS = 14400 * 60 * 1000; // 10 days @@ -352,6 +357,10 @@ export const ERROR_TYPE = { GET_BID_SUGGESTION: { UNSUPPORTED_BID_SUGGESTION_RANGE_ERROR: 'UnsupportedBidSuggestionRangeError', }, + PARANET: { + START_PARANET_SYNC_ERROR: 'StartParanetSyncError', + PARANET_SYNC_ERROR: 'ParanetSyncError', + }, }; export const OPERATION_ID_STATUS = { PENDING: 'PENDING', @@ -666,6 +675,7 @@ export const CONTRACTS = { IDENTITY_STORAGE_CONTRACT: 'IdentityStorageContract', LOG2PLDSF_CONTRACT: 'Log2PLDSFContract', LINEAR_SUM_CONTRACT: 'LinearSumContract', + PARANETS_REGISTRY_CONTRACT: 'ParanetsRegistry', }; export const CONTRACT_EVENTS = { diff --git a/src/controllers/http-api/v0/request-schema/query-schema-v0.js b/src/controllers/http-api/v0/request-schema/query-schema-v0.js index e245d7d87f..41f70f84f2 100644 --- a/src/controllers/http-api/v0/request-schema/query-schema-v0.js +++ b/src/controllers/http-api/v0/request-schema/query-schema-v0.js @@ -1,4 +1,4 @@ -import { QUERY_TYPES, TRIPLE_STORE_REPOSITORIES } from '../../../../constants/constants.js'; +import { QUERY_TYPES } from '../../../../constants/constants.js'; export default () => ({ type: 'object', @@ -11,7 +11,7 @@ export default () => ({ type: 'string', }, repository: { - enum: Object.values(TRIPLE_STORE_REPOSITORIES), + type: 'string', }, }, }); diff --git a/src/modules/blockchain/blockchain-module-manager.js b/src/modules/blockchain/blockchain-module-manager.js index eccb49a396..bfb87ab068 100644 --- a/src/modules/blockchain/blockchain-module-manager.js +++ b/src/modules/blockchain/blockchain-module-manager.js @@ -261,6 +261,20 @@ class BlockchainModuleManager extends BaseModuleManager { ]); } + async getParanetKnowledgeAssetsCount(blockchain, paranetId) { + return this.callImplementationFunction(blockchain, 'getParanetKnowledgeAssetsCount', [ + paranetId, + ]); + } + + async getParanetKnowledgeAssetsWithPagination(blockchain, paranetId, offset, limit) { + return this.callImplementationFunction( + blockchain, + 'getParanetKnowledgeAssetsWithPagination', + [paranetId, offset, limit], + ); + } + async getAssertionData(blockchain, assertionid) { return this.callImplementationFunction(blockchain, 'getAssertionData', [assertionid]); } @@ -453,9 +467,41 @@ class BlockchainModuleManager extends BaseModuleManager { return this.callImplementationFunction(blockchain, 'convertUint8ArrayToHex', [uint8Array]); } - getLinearSumParams(blockchain) { + async getLinearSumParams(blockchain) { return this.callImplementationFunction(blockchain, 'getLinearSumParams'); } + + async getParanetMetadata(blockchain, paranetId) { + return this.callImplementationFunction(blockchain, 'getParanetMetadata', [paranetId]); + } + + async getParanetKnowledgeAssetLocator(blockchain, knowledgeAssetId) { + return this.callImplementationFunction(blockchain, 'getParanetKnowledgeAssetLocator', [ + knowledgeAssetId, + ]); + } + + async getKnowledgeAssetLocatorFromParanetId(blockchain, paranetId) { + return this.callImplementationFunction( + blockchain, + 'getKnowledgeAssetLocatorFromParanetId', + [paranetId], + ); + } + + async paranetExists(blockchain, paranetId) { + return this.callImplementationFunction(blockchain, 'paranetExists', [paranetId]); + } + + async isParanetKnowledgeAsset(blockchain, knowledgeAssetId) { + return this.callImplementationFunction(blockchain, 'isParanetKnowledgeAsset', [ + knowledgeAssetId, + ]); + } + + async getParanetId(blockchain, knowledgeAssetId) { + return this.callImplementationFunction(blockchain, 'getParanetId', [knowledgeAssetId]); + } } export default BlockchainModuleManager; diff --git a/src/modules/blockchain/implementation/web3-service.js b/src/modules/blockchain/implementation/web3-service.js index 265fb44a78..242827db6e 100644 --- a/src/modules/blockchain/implementation/web3-service.js +++ b/src/modules/blockchain/implementation/web3-service.js @@ -56,6 +56,8 @@ const ABIs = { ServiceAgreementStorageProxy: require('dkg-evm-module/abi/ServiceAgreementStorageProxy.json'), UnfinalizedStateStorage: require('dkg-evm-module/abi/UnfinalizedStateStorage.json'), LinearSum: require('dkg-evm-module/abi/LinearSum.json'), + ParanetsRegistry: require('dkg-evm-module/abi/ParanetsRegistry.json'), + ParanetKnowledgeAssetsRegistry: require('dkg-evm-module/abi/ParanetKnowledgeAssetsRegistry.json'), }; const SCORING_FUNCTIONS = { @@ -1431,7 +1433,7 @@ class Web3Service { } keccak256(bytesLikeData) { - return ethers.keccak256(bytesLikeData); + return ethers.utils.keccak256(bytesLikeData); } sha256(bytesLikeData) { @@ -1598,6 +1600,80 @@ class Web3Service { w2: Number(linearSumParams[3]), }; } + + async getParanetKnowledgeAssetsCount(paranetId) { + return this.callContractFunction( + this.ParanetsRegistryContract, + 'getKnowledgeAssetsCount', + [paranetId], + CONTRACTS.PARANETS_REGISTRY_CONTRACT, + ); + } + + async getParanetKnowledgeAssetsWithPagination(paranetId, offset, limit) { + return this.callContractFunction( + this.ParanetsRegistryContract, + 'getKnowledgeAssetsWithPagination', + [paranetId, offset, limit], + CONTRACTS.PARANETS_REGISTRY_CONTRACT, + ); + } + + async getParanetMetadata(paranetId) { + return this.callContractFunction( + this.ParanetsRegistryContract, + 'getParanetMetadata', + [paranetId], + CONTRACTS.PARANETS_REGISTRY_CONTRACT, + ); + } + + async getParanetKnowledgeAssetLocator(knowledgeAssetId) { + const [knowledgeAssetStorageContract, kaTokenId] = await this.callContractFunction( + this.ParanetKnowledgeAssetsRegistryContract, + 'getKnowledgeAssetLocator', + [knowledgeAssetId], + ); + const tokenId = kaTokenId.toNumber(); + const knowledgeAssetLocator = { knowledgeAssetStorageContract, tokenId }; + return knowledgeAssetLocator; + } + + async getKnowledgeAssetLocatorFromParanetId(paranetId) { + const [paranetKAStorageContract, paranetKATokenId] = await this.callContractFunction( + this.ParanetRegistryContract, + 'getKnowledgeAssetLocator', + [paranetId], + ); + const tokenId = paranetKATokenId.toNumber(); + const knowledgeAssetLocator = { paranetKAStorageContract, tokenId }; + return knowledgeAssetLocator; + } + + async paranetExists(paranetId) { + return this.callContractFunction( + this.ParanetsRegistryContract, + 'paranetExists', + [paranetId], + CONTRACTS.PARANETS_REGISTRY_CONTRACT, + ); + } + + async getParanetId(knowledgeAssetId) { + return this.callContractFunction( + this.ParanetKnowledgeAssetsRegistryContract, + 'getParanetId', + [knowledgeAssetId], + ); + } + + async isParanetKnowledgeAsset(knowledgeAssetId) { + return this.callContractFunction( + this.ParanetKnowledgeAssetsRegistryContract, + 'isParanetKnowledgeAsset', + [knowledgeAssetId], + ); + } } export default Web3Service; diff --git a/src/modules/repository/implementation/sequelize/migrations/20240429083058-create-paranet.js b/src/modules/repository/implementation/sequelize/migrations/20240429083058-create-paranet.js new file mode 100644 index 0000000000..186fd5ed88 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240429083058-create-paranet.js @@ -0,0 +1,40 @@ +export const up = async ({ context: { queryInterface, Sequelize } }) => { + await queryInterface.createTable('paranet', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER, + }, + name: { + type: Sequelize.STRING, + }, + blockchain_id: { + type: Sequelize.STRING, + primaryKey: true, + }, + description: { + type: Sequelize.STRING, + }, + paranet_id: { + type: Sequelize.STRING, + }, + ka_count: { + type: Sequelize.INTEGER, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +}; + +export const down = async ({ context: { queryInterface } }) => { + await queryInterface.dropTable('Paranet'); +}; diff --git a/src/modules/repository/implementation/sequelize/migrations/20240529070000-create-missed-paranet-asset.js b/src/modules/repository/implementation/sequelize/migrations/20240529070000-create-missed-paranet-asset.js new file mode 100644 index 0000000000..938bfa739e --- /dev/null +++ b/src/modules/repository/implementation/sequelize/migrations/20240529070000-create-missed-paranet-asset.js @@ -0,0 +1,39 @@ +export const up = async ({ context: { queryInterface, Sequelize } }) => { + await queryInterface.createTable('missed_paranet_asset', { + id: { + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER, + }, + blockchain_id: { + allowNull: false, + type: Sequelize.STRING, + }, + ual: { + allowNull: false, + type: Sequelize.STRING, + }, + paranet_ual: { + allowNull: false, + type: Sequelize.STRING, + }, + knowledge_asset_id: { + allowNull: false, + type: Sequelize.STRING, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()'), + }, + }); +}; + +export const down = async ({ context: { queryInterface } }) => { + await queryInterface.dropTable('missed_paranet_asset'); +}; diff --git a/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js b/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js new file mode 100644 index 0000000000..0fb068266b --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/missed-paranet-asset.js @@ -0,0 +1,39 @@ +export default (sequelize, DataTypes) => { + const blockchain = sequelize.define( + 'missed_paranet_asset', + { + id: { + autoIncrement: true, + primaryKey: true, + type: DataTypes.INTEGER, + }, + blockchainId: { + allowNull: false, + type: DataTypes.STRING, + }, + ual: { + allowNull: false, + type: DataTypes.STRING, + }, + paranetUal: { + allowNull: false, + type: DataTypes.STRING, + }, + knowledgeAssetId: { + allowNull: false, + type: DataTypes.STRING, + }, + createdAt: { + type: DataTypes.DATE, + }, + updatedAt: { + type: DataTypes.DATE, + }, + }, + { underscored: true }, + ); + blockchain.associate = () => { + // associations can be defined here + }; + return blockchain; +}; diff --git a/src/modules/repository/implementation/sequelize/models/paranet.js b/src/modules/repository/implementation/sequelize/models/paranet.js new file mode 100644 index 0000000000..1b01180145 --- /dev/null +++ b/src/modules/repository/implementation/sequelize/models/paranet.js @@ -0,0 +1,38 @@ +export default (sequelize, DataTypes) => { + const paranet = sequelize.define( + 'paranet', + { + id: { + autoIncrement: true, + primaryKey: true, + type: DataTypes.INTEGER, + }, + name: { + type: DataTypes.STRING, + }, + description: { + type: DataTypes.STRING, + }, + paranetId: { + type: DataTypes.STRING, + }, + kaCount: { + type: DataTypes.INTEGER, + }, + blockchainId: { + type: DataTypes.STRING, + }, + createdAt: { + type: DataTypes.DATE, + }, + updatedAt: { + type: DataTypes.DATE, + }, + }, + { underscored: true }, + ); + paranet.associate = () => { + // associations can be defined here + }; + return paranet; +}; diff --git a/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js b/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js new file mode 100644 index 0000000000..30484391ec --- /dev/null +++ b/src/modules/repository/implementation/sequelize/repositories/missed-paranet-asset-repository.js @@ -0,0 +1,42 @@ +class MissedParanetAssetRepository { + constructor(models) { + this.sequelize = models.sequelize; + this.model = models.missed_paranet_asset; + } + + async createMissedParanetAssetRecord(missedParanetAsset) { + return this.model.create(missedParanetAsset); + } + + async getMissedParanetAssetsRecords(paranetUal, count = null) { + const queryOptions = { + where: { + paranetUal, + }, + }; + + if (count !== null) { + queryOptions.limit = count; + } + + return this.model.findAll(queryOptions); + } + + async removeMissedParanetAssetRecord(ual) { + await this.model.destroy({ + where: { + ual, + }, + }); + } + + async getCountOfMissedAssetsOfParanet(paranetUal) { + return this.model.count({ + where: { + paranetUal, + }, + }); + } +} + +export default MissedParanetAssetRepository; diff --git a/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js new file mode 100644 index 0000000000..3f86f5904d --- /dev/null +++ b/src/modules/repository/implementation/sequelize/repositories/paranet-repository.js @@ -0,0 +1,64 @@ +class ParanetRepository { + constructor(models) { + this.sequelize = models.sequelize; + this.model = models.paranet; + } + + async createParanetRecord(name, description, paranetId, blockchainId) { + return this.model.create( + { + name, + description, + paranetId, + kaCount: 0, + blockchainId, + }, + { + ignoreDuplicates: true, + }, + ); + } + + async getParanet(paranetId, blockchainId) { + return this.model.findOne({ + where: { + paranetId, + blockchainId, + }, + }); + } + + async updateParanetKaCount(paranetId, blockchainId, kaCount) { + return this.model.update( + { kaCount }, + { + where: { + paranetId, + blockchainId, + }, + }, + ); + } + + async paranetExists(paranetId, blockchainId) { + const paranetRecord = await this.model.findOne({ + where: { + paranetId, + blockchainId, + }, + }); + return !!paranetRecord; + } + + async getParanetKnowledgeAssetsCount(paranetId, blockchainId) { + return this.model.findAll({ + attributes: ['ka_count'], + where: { + paranetId, + blockchainId, + }, + }); + } +} + +export default ParanetRepository; diff --git a/src/modules/repository/implementation/sequelize/sequelize-repository.js b/src/modules/repository/implementation/sequelize/sequelize-repository.js index aae1f1c648..90ab1c7f54 100644 --- a/src/modules/repository/implementation/sequelize/sequelize-repository.js +++ b/src/modules/repository/implementation/sequelize/sequelize-repository.js @@ -8,6 +8,7 @@ import BlockchainEventRepository from './repositories/blockchain-event-repositor import BlockchainRepository from './repositories/blockchain-repository.js'; import CommandRepository from './repositories/command-repository.js'; import EventRepository from './repositories/event-repository.js'; +import ParanetRepository from './repositories/paranet-repository.js'; import OperationIdRepository from './repositories/operation-id-repository.js'; import OperationRepository from './repositories/operation-repository.js'; import OperationResponseRepository from './repositories/operation-response.js'; @@ -15,6 +16,7 @@ import ServiceAgreementRepository from './repositories/service-agreement-reposit import ShardRepository from './repositories/shard-repository.js'; import TokenRepository from './repositories/token-repository.js'; import UserRepository from './repositories/user-repository.js'; +import MissedParanetAssetRepository from './repositories/missed-paranet-asset-repository.js'; const __dirname = fileURLToPath(new URL('.', import.meta.url)); @@ -34,6 +36,8 @@ class SequelizeRepository { blockchain: new BlockchainRepository(this.models), command: new CommandRepository(this.models), event: new EventRepository(this.models), + paranet: new ParanetRepository(this.models), + missed_paranet_asset: new MissedParanetAssetRepository(this.models), operation_id: new OperationIdRepository(this.models), operation: new OperationRepository(this.models), operation_response: new OperationResponseRepository(this.models), diff --git a/src/modules/repository/repository-module-manager.js b/src/modules/repository/repository-module-manager.js index 9aefcb5535..c6330d8f44 100644 --- a/src/modules/repository/repository-module-manager.js +++ b/src/modules/repository/repository-module-manager.js @@ -292,6 +292,14 @@ class RepositoryModuleManager extends BaseModuleManager { ); } + async getOrCreateParanetById(paranetId) { + return this.getRepository('paranet').getOrCreateParanet(paranetId); + } + + async updateParanetKaCount(paranetId, blockchainId, kaCount) { + return this.getRepository('paranet').updateParanetKaCount(paranetId, blockchainId, kaCount); + } + async updateServiceAgreementRecord( blockchainId, contract, @@ -464,6 +472,57 @@ class RepositoryModuleManager extends BaseModuleManager { blockchainId, ); } + + async createParanetRecord(name, description, paranetId, blockchainId) { + this.getRepository('paranet').createParanetRecord( + name, + description, + paranetId, + blockchainId, + ); + } + + async paranetExists(paranetId, blockchainId) { + return this.getRepository('paranet').paranetExists(paranetId, blockchainId); + } + + async getParanet(paranetId, blockchainId) { + return this.getRepository('paranet').getParanet(paranetId, blockchainId); + } + + async getParanetKnowledgeAssetsCount(paranetId, blockchainId) { + return this.getRepository('paranet').getParanetKnowledgeAssetsCount( + paranetId, + blockchainId, + ); + } + + async createMissedParanetAssetRecord(missedParanetAssset) { + return this.getRepository('missed_paranet_asset').createMissedParanetAssetRecord( + missedParanetAssset, + ); + } + + async getMissedParanetAssetRecords(blockchainId) { + return this.getRepository('missed_paranet_asset').getMissedParanetAssetRecords( + blockchainId, + ); + } + + async removeMissedParanetAssetRecord(ual) { + return this.getRepository('missed_paranet_asset').removeMissedParanetAssetRecord(ual); + } + + async getMissedParanetAssetsRecords(paranetUal, count) { + return this.getRepository('missed_paranet_asset').getMissedParanetAssetsRecords( + paranetUal, + count, + ); + } + + async getCountOfMissedAssetsOfParanet(ual) { + return this.getRepository('missed_paranet_asset').getCountOfMissedAssetsOfParanet(ual); + } } export default RepositoryModuleManager; diff --git a/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js b/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js index c89ab90af5..bf770bdede 100644 --- a/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js +++ b/src/modules/triple-store/implementation/ot-blazegraph/ot-blazegraph.js @@ -9,23 +9,26 @@ class OtBlazegraph extends OtTripleStore { await Promise.all( Object.keys(this.repositories).map(async (repository) => { - const { url, name } = this.repositories[repository]; - - if (!(await this.repositoryExists(repository))) { - await axios.post( - `${url}/blazegraph/namespace`, - `com.bigdata.rdf.sail.truthMaintenance=false\ncom.bigdata.namespace.${name}.lex.com.bigdata.btree.BTree.branchingFactor=400\ncom.bigdata.rdf.store.AbstractTripleStore.textIndex=false\ncom.bigdata.rdf.store.AbstractTripleStore.justify=false\ncom.bigdata.namespace.${name}.spo.com.bigdata.btree.BTree.branchingFactor=1024\ncom.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false\ncom.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms\ncom.bigdata.rdf.sail.namespace=${name}\ncom.bigdata.rdf.store.AbstractTripleStore.quads=true\ncom.bigdata.rdf.store.AbstractTripleStore.geoSpatial=false\ncom.bigdata.journal.Journal.groupCommit=false\ncom.bigdata.rdf.sail.isolatableIndices=false\n`, - { - headers: { - 'Content-Type': 'text/plain', - }, - }, - ); - } + await this.createRepository(repository); }), ); } + async createRepository(repository) { + const { url, name } = this.repositories[repository]; + if (!(await this.repositoryExists(repository))) { + await axios.post( + `${url}/blazegraph/namespace`, + `com.bigdata.rdf.sail.truthMaintenance=false\ncom.bigdata.namespace.${name}.lex.com.bigdata.btree.BTree.branchingFactor=400\ncom.bigdata.rdf.store.AbstractTripleStore.textIndex=false\ncom.bigdata.rdf.store.AbstractTripleStore.justify=false\ncom.bigdata.namespace.${name}.spo.com.bigdata.btree.BTree.branchingFactor=1024\ncom.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false\ncom.bigdata.rdf.store.AbstractTripleStore.axiomsClass=com.bigdata.rdf.axioms.NoAxioms\ncom.bigdata.rdf.sail.namespace=${name}\ncom.bigdata.rdf.store.AbstractTripleStore.quads=true\ncom.bigdata.rdf.store.AbstractTripleStore.geoSpatial=false\ncom.bigdata.journal.Journal.groupCommit=false\ncom.bigdata.rdf.sail.isolatableIndices=false\n`, + { + headers: { + 'Content-Type': 'text/plain', + }, + }, + ); + } + } + initializeSparqlEndpoints(repository) { const { url, name } = this.repositories[repository]; this.repositories[repository].sparqlEndpoint = `${url}/blazegraph/namespace/${name}/sparql`; diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index 5e0866f182..f15649d437 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -23,6 +23,24 @@ class OtTripleStore { } } + async initializeParanetRepository(repository) { + const publicCurrent = 'publicCurrent'; + this.repositories[repository] = { + url: this.repositories[publicCurrent].url, + name: repository, + username: this.repositories[publicCurrent].username, + password: this.repositories[publicCurrent].password, + }; + this.initializeSparqlEndpoints(repository); + this.initializeContexts(); + await this.ensureConnections(); + await this.createRepository(repository); + } + + async createRepository() { + throw Error('CreateRepository not implemented'); + } + initializeSparqlEndpoints() { throw Error('initializeSparqlEndpoints not implemented'); } diff --git a/src/modules/triple-store/triple-store-module-manager.js b/src/modules/triple-store/triple-store-module-manager.js index 11c46f1d6d..75a0d44ad8 100644 --- a/src/modules/triple-store/triple-store-module-manager.js +++ b/src/modules/triple-store/triple-store-module-manager.js @@ -1,6 +1,10 @@ import BaseModuleManager from '../base-module-manager.js'; class TripleStoreModuleManager extends BaseModuleManager { + initializeParanetRepository(repository) { + return this.getImplementation().module.initializeParanetRepository(repository); + } + async insertAssetAssertionMetadata(implementationName, repository, assetNquads) { if (this.getImplementation(implementationName)) { return this.getImplementation(implementationName).module.insertAssetAssertionMetadata( diff --git a/src/service/blockchain-event-listener-service.js b/src/service/blockchain-event-listener-service.js index 62c230bd5d..85261852a5 100644 --- a/src/service/blockchain-event-listener-service.js +++ b/src/service/blockchain-event-listener-service.js @@ -28,6 +28,7 @@ class BlockchainEventListenerService { this.hashingService = ctx.hashingService; this.serviceAgreementService = ctx.serviceAgreementService; this.shardingTableService = ctx.shardingTableService; + this.paranetService = ctx.paranetService; this.eventGroupsBuffer = {}; } @@ -575,6 +576,53 @@ class BlockchainEventListenerService { stateIndex, ), ]); + + // eslint-disable-next-line no-await-in-loop + const knowledgeAssetId = await this.paranetService.constructKnowledgeAssetId( + blockchain, + contract, + tokenId, + ); + + // 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( + blockchain, + paranetKasContract, + paranetTokenId, + ); + + // eslint-disable-next-line no-await-in-loop + const paranetAssetExists = await this.tripleStoreService.paranetAssetExists( + blockchain, + contract, + tokenId, + paranetKasContract, + paranetTokenId, + ); + + 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, + }); + } + } } } } diff --git a/src/service/get-service.js b/src/service/get-service.js index d9106d2d03..442692b43b 100644 --- a/src/service/get-service.js +++ b/src/service/get-service.js @@ -24,6 +24,7 @@ class GetService extends OperationService { this.ualService = ctx.ualService; this.tripleStoreService = ctx.tripleStoreService; this.blockchainModuleManager = ctx.blockchainModuleManager; + this.paranetService = ctx.paranetService; this.operationMutex = new Mutex(); } @@ -41,6 +42,9 @@ class GetService extends OperationService { assertionId, assetSync, stateIndex, + paranetSync, + paranetTokenId, + paranetLatestAsset, } = command.data; const keywordsStatuses = await this.getResponsesStatuses( @@ -80,11 +84,25 @@ class GetService extends OperationService { ); this.logResponsesSummary(completedNumber, failedNumber); - if (assetSync) { - const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); + // Fetched old state - store it in public history repo + if (paranetSync && !paranetLatestAsset) { this.logger.debug( - `ASSET_SYNC: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, + `Paranet sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, + ); + await this.tripleStoreService.localStoreAsset( + TRIPLE_STORE_REPOSITORIES.PUBLIC_HISTORY, + assertionId, + responseData.nquads, + blockchain, + contract, + tokenId, + keyword, + ); + } else if (assetSync) { + this.logger.debug( + `Asset sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, ); await this.tripleStoreService.localStoreAsset( @@ -96,6 +114,29 @@ class GetService extends OperationService { tokenId, keyword, ); + + // Paranet sync for latest state + if (paranetSync) { + this.logger.debug( + `Paranet sync: ${responseData.nquads.length} nquads found for asset with ual: ${ual}, state index: ${stateIndex}, assertionId: ${assertionId}`, + ); + const paranetUAL = this.ualService.deriveUAL( + blockchain, + contract, + paranetTokenId, + ); + const paranetRepository = + this.paranetService.getParanetRepositoryName(paranetUAL); + await this.tripleStoreService.localStoreAsset( + paranetRepository, + assertionId, + responseData.nquads, + blockchain, + contract, + tokenId, + keyword, + ); + } } } diff --git a/src/service/paranet-service.js b/src/service/paranet-service.js new file mode 100644 index 0000000000..2313b61f46 --- /dev/null +++ b/src/service/paranet-service.js @@ -0,0 +1,54 @@ +class ParanetService { + constructor(ctx) { + this.blockchainModuleManager = ctx.blockchainModuleManager; + this.repositoryModuleManager = ctx.repositoryModuleManager; + this.ualService = ctx.ualService; + } + + async initializeParanetRecord(blockchain, paranetId) { + const paranetMetadata = await this.blockchainModuleManager.getParanetMetadata( + blockchain, + paranetId, + ); + if (!(await this.repositoryModuleManager.paranetExists(paranetId, blockchain))) { + await this.repositoryModuleManager.createParanetRecord( + paranetMetadata.name, + paranetMetadata.description, + paranetId, + blockchain, + ); + } + } + + constructParanetId(blockchain, contract, tokenId) { + const keyword = this.blockchainModuleManager.encodePacked( + blockchain, + ['address', 'uint256'], + [contract, tokenId], + ); + + return this.blockchainModuleManager.keccak256(blockchain, keyword); + } + + constructKnowledgeAssetId(blockchain, contract, tokenId) { + const keyword = this.blockchainModuleManager.encodePacked( + blockchain, + ['address', 'uint256'], + [contract, tokenId], + ); + + return this.blockchainModuleManager.keccak256(blockchain, keyword); + } + + getParanetRepositoryName(paranetId) { + if (this.ualService.isUAL(paranetId)) { + // Replace : and / with - + return paranetId.replace(/[/:]/g, '-'); + } + throw new Error( + `Unable to get Paranet repository name. Paranet id doesn't have UAL format: ${paranetId}`, + ); + } +} + +export default ParanetService; diff --git a/src/service/sharding-table-service.js b/src/service/sharding-table-service.js index aabec9b799..203417a3ab 100644 --- a/src/service/sharding-table-service.js +++ b/src/service/sharding-table-service.js @@ -128,7 +128,7 @@ class ShardingTableService { peers = peers.map((peer, index) => ({ ...peer.dataValues, index })); const keyHash = await this.hashingService.callHashFunction(hashFunctionId, key); - const soretedPeers = this.sortPeers( + const sortedPeers = this.sortPeers( blockchainId, keyHash, peers, @@ -136,7 +136,7 @@ class ShardingTableService { hashFunctionId, proximityScoreFunctionsPairId, ); - return soretedPeers; + return sortedPeers; } async sortPeers( diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 787476ede5..920d0ab7a3 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -10,7 +10,10 @@ class TripleStoreService { this.tripleStoreModuleManager = ctx.tripleStoreModuleManager; this.ualService = ctx.ualService; this.dataService = ctx.dataService; + this.paranetService = ctx.paranetService; + } + initializeRepositories() { this.repositoryImplementations = {}; for (const implementationName of this.tripleStoreModuleManager.getImplementationNames()) { for (const repository in this.tripleStoreModuleManager.getImplementation( @@ -118,6 +121,36 @@ class TripleStoreService { } } + async moveAssetWithoutDelete( + fromRepository, + toRepository, + assertionId, + blockchain, + contract, + tokenId, + keyword, + ) { + let assertion; + // Try-catch to prevent infinite processing loop when unexpected error is thrown while getting KA + try { + assertion = await this.getAssertion(fromRepository, assertionId); + } catch (e) { + this.logger.error(`Error while getting assertion for moving asset: ${e.message}`); + return; + } + + // copy metadata and assertion + await this.localStoreAsset( + toRepository, + assertionId, + assertion, + blockchain, + contract, + tokenId, + keyword, + ); + } + async insertAssetAssertionMetadata( repository, blockchain, @@ -278,6 +311,12 @@ class TripleStoreService { ); } + async paranetAssetExists(blockchain, kaContract, kaTokenId, paranetContract, paranetTokenId) { + const paranetUAL = this.ualService.deriveUAL(blockchain, paranetContract, paranetTokenId); + const repository = this.paranetService.getParanetRepositoryName(paranetUAL); + return this.assetExists(repository, blockchain, kaContract, kaTokenId); + } + async insertAssetAssertionLink(repository, blockchain, contract, tokenId, assertionId) { const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); this.logger.info(