From 8a04a81a84c2f464309aaa29e89b29c5558cbc27 Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Wed, 26 Jul 2023 13:30:02 +0200 Subject: [PATCH 1/5] feat: reduce number of calls to chainId - updated to ethers v6.6.5 --- package.json | 4 ++-- src/Instantiable.abstract.ts | 10 +++++----- src/keeper/Web3Provider.ts | 28 +++++++++++++++++++++++++--- src/nevermined/Nevermined.ts | 2 +- test/keeper/ContractEvent.test.ts | 5 ++--- test/keeper/DIDRegistry.test.ts | 2 +- test/keeper/TestContractHandler.ts | 8 ++++---- 7 files changed, 40 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 46763f453..74c957c53 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "test": "mocha --opts test/mocha.opts ./test/**/*.test.ts", "test:watch": "mocha -w --watch-extensions js,ts,json", "test:cover": "nyc --report-dir coverage/unit mocha --opts test/mocha.opts ./test/**/*.test.ts", - "integration": "mocha --opts integration/mocha.opts ", + "integration": "mocha --opts integration/mocha.opts ./integration/nevermined/*.test.ts", "integration:subgraph": "mocha --opts integration/mocha.opts ./integration/**/*.test.subgraph.ts", "integration:production": "export NETWORK_NAME=production; yarn integration", "integration:staging": "export NETWORK_NAME=staging; yarn integration", @@ -66,7 +66,7 @@ "cross-fetch": "^4.0.0", "crypto-browserify": "^3.12.0", "deprecated-decorator": "^0.1.6", - "ethers": "^6.6.4", + "ethers": "^6.6.5", "graphql": "^16.7.1", "https-browserify": "^1.0.0", "jose": "^4.5.1", diff --git a/src/Instantiable.abstract.ts b/src/Instantiable.abstract.ts index bd31e7341..081489615 100644 --- a/src/Instantiable.abstract.ts +++ b/src/Instantiable.abstract.ts @@ -13,9 +13,9 @@ export interface InstantiableConfig { circuitsFolder?: string } -export function generateIntantiableConfigFromConfig( +export async function generateIntantiableConfigFromConfig( config: NeverminedOptions, -): Partial { +): Promise> { const logLevel = typeof config.verbose !== 'number' ? config.verbose @@ -24,7 +24,7 @@ export function generateIntantiableConfigFromConfig( : (config.verbose as LogLevel) return { config, - web3: Web3Provider.getWeb3(config), + web3: await Web3Provider.getWeb3(config), logger: new Logger(logLevel), artifactsFolder: config.artifactsFolder, circuitsFolder: config.circuitsFolder, @@ -41,8 +41,8 @@ export abstract class Instantiable { public get web3() { if (!this._instantiableConfig?.web3) { - this.logger.warn('ethers.Provider instance is not defined. Using default instance.') - return Web3Provider.getWeb3() + this.logger.error('Web3 Provider not initialized') + throw new Error('Web3 Provider not initialized') } return this._instantiableConfig.web3 } diff --git a/src/keeper/Web3Provider.ts b/src/keeper/Web3Provider.ts index 940a161bd..7d47af483 100644 --- a/src/keeper/Web3Provider.ts +++ b/src/keeper/Web3Provider.ts @@ -7,15 +7,37 @@ export class Web3Provider { * * @returns web3 instance */ - public static getWeb3( + public static async getWeb3( config: Partial = {}, - ): ethers.JsonRpcProvider | ethers.BrowserProvider { + ): Promise { if (config.web3Provider) { return new ethers.BrowserProvider(config.web3Provider) } // disabling the cache since this will lead to duplicated nonces on test networks // See https://docs.ethers.org/v6/api/providers/abstract-provider/#AbstractProviderOptions - return new ethers.JsonRpcProvider(config.web3ProviderUri, undefined, { cacheTimeout: -1 }) + let provider = new ethers.JsonRpcProvider(config.web3ProviderUri, undefined, { + cacheTimeout: -1, + }) + + // Adding the static network prevents ethers from calling eth_chainId with every call + const network = await provider.getNetwork() + console.log('network', network.chainId, network.name) + provider = new ethers.JsonRpcProvider(config.web3ProviderUri, undefined, { + cacheTimeout: -1, + staticNetwork: network, + }) + + // provider.addListener('debug', (event) => { + // if (event.payload) { + // if (Array.isArray(event.payload)) { + // console.log(event.payload.map((e) => e.method)) + // } else { + // console.log(event.payload.method) + // } + // } + // }) + + return provider } } diff --git a/src/nevermined/Nevermined.ts b/src/nevermined/Nevermined.ts index bd9c131dc..8ef493cd0 100644 --- a/src/nevermined/Nevermined.ts +++ b/src/nevermined/Nevermined.ts @@ -35,7 +35,7 @@ export class Nevermined extends Instantiable { const instance = new Nevermined() const instanceConfig = { - ...generateIntantiableConfigFromConfig(config), + ...(await generateIntantiableConfigFromConfig(config)), nevermined: instance, } instance.setInstanceConfig(instanceConfig) diff --git a/test/keeper/ContractEvent.test.ts b/test/keeper/ContractEvent.test.ts index fcad599b9..b87da4333 100644 --- a/test/keeper/ContractEvent.test.ts +++ b/test/keeper/ContractEvent.test.ts @@ -7,8 +7,7 @@ import { Account } from '../../src' import { Web3Provider } from '../../src/keeper' import { ethers } from 'ethers' -// Skipping this test until https://github.com/nevermined-io/sdk-js/issues/558 -describe.skip('ContractEvent', () => { +describe('ContractEvent', () => { let nevermined: Nevermined let account1: Account let account2: Account @@ -19,7 +18,7 @@ describe.skip('ContractEvent', () => { before(async () => { await TestContractHandler.prepareContracts() nevermined = await Nevermined.getInstance(config) - web3 = Web3Provider.getWeb3(config) + web3 = await Web3Provider.getWeb3(config) ;[account1, account2, account3, account4] = await nevermined.accounts.list() }) diff --git a/test/keeper/DIDRegistry.test.ts b/test/keeper/DIDRegistry.test.ts index c1b135b28..926b2f23d 100644 --- a/test/keeper/DIDRegistry.test.ts +++ b/test/keeper/DIDRegistry.test.ts @@ -42,7 +42,7 @@ describe('DIDRegistry', () => { const [ownerAccount] = await nevermined.accounts.list() const did = generateId() const data = 'hola hola' - const provider = Web3Provider.getWeb3(config) + const provider = await Web3Provider.getWeb3(config) const txCount = await provider.getTransactionCount(ownerAccount.getId(), 'pending') const txParams: TxParameters = { nonce: txCount } diff --git a/test/keeper/TestContractHandler.ts b/test/keeper/TestContractHandler.ts index 2fda8ab73..ee3df775b 100644 --- a/test/keeper/TestContractHandler.ts +++ b/test/keeper/TestContractHandler.ts @@ -10,7 +10,7 @@ import { NeverminedOptions } from '../../src' export default abstract class TestContractHandler extends ContractHandler { public static async prepareContracts(): Promise { - TestContractHandler.setConfig(config) + await TestContractHandler.setConfig(config) const [deployerAddress] = await TestContractHandler.addresses(TestContractHandler.config) TestContractHandler.networkId = Number((await TestContractHandler.web3.getNetwork()).chainId) @@ -24,11 +24,11 @@ export default abstract class TestContractHandler extends ContractHandler { private static networkId: number private static minter: string private static config = config - private static web3 = Web3Provider.getWeb3(config) + private static web3: ethers.JsonRpcProvider | ethers.BrowserProvider - public static setConfig(config) { + public static async setConfig(config) { TestContractHandler.config = config - TestContractHandler.web3 = Web3Provider.getWeb3(TestContractHandler.config) + TestContractHandler.web3 = await Web3Provider.getWeb3(TestContractHandler.config) } private static async deployContracts(deployerAddress: string) { From 89511f11140398c146246a19438e958938b83376 Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Wed, 26 Jul 2023 15:51:55 +0200 Subject: [PATCH 2/5] feat: make keeper network info static --- MIGRATION_GUIDE.md | 16 +++++ integration/nevermined/Artifacts.test.ts | 6 +- integration/nevermined/Assets.test.ts | 2 +- .../ClaimPaymentAbortedAgreement.test.ts | 2 +- integration/nevermined/NFT1155.test.ts | 2 +- integration/nevermined/NFT1155Api.e2e.test.ts | 4 +- integration/nevermined/NFT721.test.ts | 2 +- integration/nevermined/NFT721Api.e2e.test.ts | 2 +- .../nevermined/NFT721Templates.test.ts | 4 +- .../NFTsWithMultipleServices.test.ts | 2 +- src/events/ContractEvent.ts | 2 +- src/keeper/ContractHandler.ts | 16 ++--- src/keeper/Keeper.ts | 58 ++++++++----------- src/keeper/contracts/ContractBase.ts | 2 +- src/keeper/contracts/Nft1155Contract.ts | 2 +- src/keeper/contracts/Nft721Contract.ts | 2 +- src/keeper/utils.ts | 18 +++--- src/nevermined/Versions.ts | 6 +- src/nevermined/api/RegistryBaseApi.ts | 2 +- src/nevermined/utils/JwtUtils.ts | 2 +- test/keeper/ContractHandler.test.ts | 2 +- test/keeper/Keeper.test.ts | 2 +- .../conditions/NFT721LockCondition.test.ts | 2 +- 23 files changed, 82 insertions(+), 76 deletions(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 4e692acb1..a3d73611f 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -2,6 +2,22 @@ ## Breaking changes +### Keeper Network info + +`Keeper.version`, `Keeper.getNetworkId()`, `Keeper.getNetworkName()` are removed and instead the network information is static and set during Keeper initialization: + +```ts +// v1 +const chainId = await nevermined.keeper.getNetworkId() +const networkName = await nevermined.keeper.getNetworkName() +const version = nevermined.keeper.version + +// v2 +const chainId = nevermined.network.chainId +const networkName = nevermined.keeper.network.name +const version = nevermined.keeper.network.version +``` + ### Defining Asset Price The assetPrice is not part of AssetAttributes anymore and is part of each individual service added to the DDO when registering a service. So for services having a price, this must be added as part of the services array of the AssetAttributes. diff --git a/integration/nevermined/Artifacts.test.ts b/integration/nevermined/Artifacts.test.ts index 45cca7815..f405dca4b 100644 --- a/integration/nevermined/Artifacts.test.ts +++ b/integration/nevermined/Artifacts.test.ts @@ -44,12 +44,12 @@ describe('Artifacts', () => { artifactsFolder: tempDir, } as NeverminedOptions) - assert.equal(networkId[0], await nvm.keeper.getNetworkId()) + assert.equal(networkId[0], nvm.keeper.network.chainId) assert.isDefined(nvm) assert.isDefined(nvm.keeper) assert.isDefined(nvm.keeper.didRegistry) - assert.oneOf((await nvm.keeper.getNetworkName()).toLowerCase(), networkName) - assert.oneOf(await nvm.keeper.getNetworkId(), networkId) + assert.oneOf(nvm.keeper.network.name, networkName) + assert.oneOf(nvm.keeper.network.chainId, networkId) }) } }) diff --git a/integration/nevermined/Assets.test.ts b/integration/nevermined/Assets.test.ts index cd646ad75..a73f0275d 100644 --- a/integration/nevermined/Assets.test.ts +++ b/integration/nevermined/Assets.test.ts @@ -70,7 +70,7 @@ describe('Assets', () => { assert.equal(ddo._nvm.versions[0].immutableBackend, 'ipfs') assert.equal(Object.keys(ddo._nvm.networks).length, 1) - assert.equal(ddo._nvm.networks[await nevermined.keeper.getNetworkId()], true) + assert.equal(ddo._nvm.networks[nevermined.keeper.network.chainId], true) const metadata = ddo.findServiceByType('metadata') assert.equal(metadata.attributes.main.ercType, 721) diff --git a/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts b/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts index 910971e11..9f3214e1b 100644 --- a/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts +++ b/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts @@ -50,7 +50,7 @@ describe('Claim aborted agreements End-to-End', () => { nevermined = await Nevermined.getInstance(config) ;[, publisher, collector1, , other] = await nevermined.accounts.list() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT1155.test.ts b/integration/nevermined/NFT1155.test.ts index 4b6bb69b6..9252d45aa 100644 --- a/integration/nevermined/NFT1155.test.ts +++ b/integration/nevermined/NFT1155.test.ts @@ -68,7 +68,7 @@ describe('NFT1155 End-to-End', () => { describe('As user I can deploy Nevermined ERC-1155 NFT contract instances', () => { it('Using the ABI', async () => { - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT1155Api.e2e.test.ts b/integration/nevermined/NFT1155Api.e2e.test.ts index 8d8f5a164..388255176 100644 --- a/integration/nevermined/NFT1155Api.e2e.test.ts +++ b/integration/nevermined/NFT1155Api.e2e.test.ts @@ -86,7 +86,7 @@ function makeTest(isCustom) { ) if (isCustom) { - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, @@ -468,7 +468,7 @@ function makeTest(isCustom) { describe('Node should not be able to transfer the nft without the operator role', () => { it('should create the subscription NFT without granting Nevermined the operator role', async () => { - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721.test.ts b/integration/nevermined/NFT721.test.ts index 8baeb4a18..f25e8f9a7 100644 --- a/integration/nevermined/NFT721.test.ts +++ b/integration/nevermined/NFT721.test.ts @@ -29,7 +29,7 @@ describe('Nfts721 operations', async () => { // Accounts ;[deployer, artist, collector] = await nevermined.accounts.list() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721Api.e2e.test.ts b/integration/nevermined/NFT721Api.e2e.test.ts index f182f158d..d91254c1e 100644 --- a/integration/nevermined/NFT721Api.e2e.test.ts +++ b/integration/nevermined/NFT721Api.e2e.test.ts @@ -47,7 +47,7 @@ describe('NFTs721 Api End-to-End', () => { nevermined = await Nevermined.getInstance(config) ;[, artist, collector1, , gallery] = await nevermined.accounts.list() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721Templates.test.ts b/integration/nevermined/NFT721Templates.test.ts index 3cdb1fc19..88a442544 100644 --- a/integration/nevermined/NFT721Templates.test.ts +++ b/integration/nevermined/NFT721Templates.test.ts @@ -90,7 +90,7 @@ describe('NFT721Templates E2E', () => { nevermined = await Nevermined.getInstance(config) ;[owner, artist, collector1, collector2, gallery] = await nevermined.accounts.list() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, @@ -609,7 +609,7 @@ describe('NFT721Templates E2E', () => { collector2.getId(), ) - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFTsWithMultipleServices.test.ts b/integration/nevermined/NFTsWithMultipleServices.test.ts index 1bea1305e..da1feb548 100644 --- a/integration/nevermined/NFTsWithMultipleServices.test.ts +++ b/integration/nevermined/NFTsWithMultipleServices.test.ts @@ -45,7 +45,7 @@ describe('E2E Flow for NFTs with multiple services', () => { neverminedNodeAddress = await nevermined.services.node.getProviderAddress() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/src/events/ContractEvent.ts b/src/events/ContractEvent.ts index eea0b2e15..17cff5db1 100644 --- a/src/events/ContractEvent.ts +++ b/src/events/ContractEvent.ts @@ -34,7 +34,7 @@ export class ContractEvent extends NeverminedEvent { public async getPastEvents(options: EventOptions): EventResult { try { - const chainId = await this.nevermined.keeper.getNetworkId() + const chainId = this.nevermined.keeper.network.chainId options.fromBlock = 0 options.toBlock = 'latest' diff --git a/src/keeper/ContractHandler.ts b/src/keeper/ContractHandler.ts index d31ca1932..9b459963a 100644 --- a/src/keeper/ContractHandler.ts +++ b/src/keeper/ContractHandler.ts @@ -55,13 +55,13 @@ export class ContractHandler extends Instantiable { artifactsFolder: string, address?: string, ): Promise { - const networkId = await this.nevermined.keeper.getNetworkId() - const where = (await this.nevermined.keeper.getNetworkName()).toLowerCase() + const chainId = this.nevermined.keeper.network.chainId + const where = this.nevermined.keeper.network.name try { this.logger.debug(`ContractHandler :: get :: ${artifactsFolder} and address ${address}`) return ( - ContractHandler.getContract(what, networkId, address) || - (await this.load(what, where, networkId, artifactsFolder, address)) + ContractHandler.getContract(what, chainId, address) || + (await this.load(what, where, chainId, artifactsFolder, address)) ) } catch (err) { if (!optional) { @@ -98,7 +98,7 @@ export class ContractHandler extends Instantiable { } public async getVersion(contractName: string, artifactsFolder: string): Promise { - const where = (await this.nevermined.keeper.getNetworkName()).toLowerCase() + const where = this.nevermined.keeper.network.name let artifact this.logger.debug( `ContractHandler :: getVersion :: Trying to read ${artifactsFolder}/${contractName}.${where}.json`, @@ -257,9 +257,9 @@ export class ContractHandler extends Instantiable { public async getFeeData(gasPrice?: bigint, maxFeePerGas?: bigint, maxPriorityFeePerGas?: bigint) { // Custom gas fee for polygon networks - const networkId = await this.nevermined.keeper.getNetworkId() - if (networkId === 137 || networkId === 80001) { - return this.getFeeDataPolygon(networkId) + const chainId = this.nevermined.keeper.network.chainId + if (chainId === 137 || chainId === 80001) { + return this.getFeeDataPolygon(chainId) } const feeData = await this.web3.getFeeData() diff --git a/src/keeper/Keeper.ts b/src/keeper/Keeper.ts index 9b50a9576..d601a0b9b 100644 --- a/src/keeper/Keeper.ts +++ b/src/keeper/Keeper.ts @@ -150,7 +150,7 @@ export class Keeper extends Instantiable { } catch (err) { this.connected = false throw new KeeperError( - `Keeper could not connect to ${await this.getNetworkName()} - ${err.message} ${err.stack}`, + `Keeper could not connect to ${this.network.name} - ${err.message} ${err.stack}`, ) } @@ -226,7 +226,13 @@ export class Keeper extends Instantiable { eventHandler: new EventHandler(), } // version - this.version = this.didRegistry.version.replace('v', '') + const chainId = Number((await this.web3.getNetwork()).chainId) + this.network = { + chainId, + version: this.didRegistry.version.replace('v', ''), + name: await KeeperUtils.getNetworkName(chainId), + loading: false, + } } /** @@ -328,16 +334,25 @@ export class Keeper extends Instantiable { eventHandler: EventHandler } - /** - * Version of the artifacts in use - */ - public version: string - /** * Network id loaded from web3 */ - protected network: { - id?: number + public network: { + /** + * chainId of the network + */ + chainId?: number + /** + * Name of the network + */ + name?: string + /** + * Version of the artifacts in use + */ + version?: string + /** + * True if keeper is still connecting + */ loading: boolean } = { loading: true, @@ -381,31 +396,6 @@ export class Keeper extends Instantiable { return Object.values(this.templates).find((template) => template.address === address) } - /** - * Returns the network by name. - * @returns Network name. - */ - public async getNetworkName(): Promise { - return KeeperUtils.getNetworkName(await this.getNetworkId()) - } - - /** - * Returns the id of the network. - * @returns Network ID. - */ - public async getNetworkId(): Promise { - if (this.network.loading) { - this.network.loading = false - this.network.id = Number((await this.web3.getNetwork()).chainId) - } - - while (!this.network.id) { - await new Promise((resolve) => setTimeout(resolve, 1)) - } - - return this.network.id - } - public getAllInstances() { return this.instances } diff --git a/src/keeper/contracts/ContractBase.ts b/src/keeper/contracts/ContractBase.ts index 460095c49..c061d610c 100644 --- a/src/keeper/contracts/ContractBase.ts +++ b/src/keeper/contracts/ContractBase.ts @@ -67,7 +67,7 @@ export abstract class ContractBase extends Instantiable { this, eventEmitter, this.config.graphHttpUri, - await this.nevermined.keeper.getNetworkName(), + this.nevermined.keeper.network.name, ) } else { this.events = ContractEvent.getInstance(this, eventEmitter, config.nevermined, this.web3) diff --git a/src/keeper/contracts/Nft1155Contract.ts b/src/keeper/contracts/Nft1155Contract.ts index e4c24440d..2a3c172a7 100644 --- a/src/keeper/contracts/Nft1155Contract.ts +++ b/src/keeper/contracts/Nft1155Contract.ts @@ -20,7 +20,7 @@ export class Nft1155Contract extends NFTContractsBase { await nft.init(config) if (address) { - const networkName = (await nft.nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nft.nevermined.keeper.network.name const solidityABI = await ContractHandler.getABI(contractName, artifactsFolder, networkName) await new ContractHandler(config).checkExists(address) diff --git a/src/keeper/contracts/Nft721Contract.ts b/src/keeper/contracts/Nft721Contract.ts index 8d7410bf7..0cba341b6 100644 --- a/src/keeper/contracts/Nft721Contract.ts +++ b/src/keeper/contracts/Nft721Contract.ts @@ -16,7 +16,7 @@ export class Nft721Contract extends NFTContractsBase { ): Promise { const nft: Nft721Contract = new Nft721Contract(contractName) nft.setInstanceConfig(config) - const networkName = (await nft.nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nft.nevermined.keeper.network.name // We don't have a subgraph for NFT721 so we can only use ContractEvent const eventEmitter = new EventHandler() diff --git a/src/keeper/utils.ts b/src/keeper/utils.ts index d927e6984..ff33a2ec3 100644 --- a/src/keeper/utils.ts +++ b/src/keeper/utils.ts @@ -4,23 +4,23 @@ import { KeeperError } from '../errors' export async function getNetworkName(networkId: number): Promise { switch (networkId) { case 1: - return 'Mainnet' + return 'mainnet' case 2: - return 'Morden' + return 'morden' case 3: - return 'Ropsten' + return 'ropsten' case 4: - return 'Rinkeby' + return 'rinkeby' case 5: - return 'Goerli' + return 'goerli' case 77: - return 'POA_Sokol' + return 'poa_sokol' case 99: - return 'POA_Core' + return 'poa_core' case 42: - return 'Kovan' + return 'kovan' case 100: - return 'Gnosis' + return 'gnosis' case 137: return 'matic' case 1337: diff --git a/src/nevermined/Versions.ts b/src/nevermined/Versions.ts index ac3c7ab19..c3c19e94a 100644 --- a/src/nevermined/Versions.ts +++ b/src/nevermined/Versions.ts @@ -57,9 +57,9 @@ export class Versions extends Instantiable { version: metadata.version, commit: metadata.commit, status: PlatformTechStatus.Working, - network: (await this.nevermined.keeper.getNetworkName()).toLowerCase(), - keeperVersion: this.nevermined.keeper.version, - contracts: Object.values(await this.nevermined.keeper.getAllInstances()) + network: this.nevermined.keeper.network.name, + keeperVersion: this.nevermined.keeper.network.version, + contracts: Object.values(this.nevermined.keeper.getAllInstances()) .filter((_) => !!_) .reduce( (acc, { contractName, address }) => ({ diff --git a/src/nevermined/api/RegistryBaseApi.ts b/src/nevermined/api/RegistryBaseApi.ts index 6312f486e..bcaaf6329 100644 --- a/src/nevermined/api/RegistryBaseApi.ts +++ b/src/nevermined/api/RegistryBaseApi.ts @@ -203,7 +203,7 @@ export abstract class RegistryBaseApi extends Instantiable { immutableUrl: '', } ddo._nvm.versions.push(ddoVersion) - const networkId = await this.nevermined.keeper.getNetworkId() + const networkId = this.nevermined.keeper.network.chainId ddo._nvm.networks = { [networkId]: true } if (publishMetadata != PublishMetadata.OnlyMetadataAPI) { diff --git a/src/nevermined/utils/JwtUtils.ts b/src/nevermined/utils/JwtUtils.ts index 708da900c..c1cfc2429 100644 --- a/src/nevermined/utils/JwtUtils.ts +++ b/src/nevermined/utils/JwtUtils.ts @@ -145,7 +145,7 @@ export class JwtUtils extends Instantiable { if (message) { eip712Data = { message, - chainId: await this.nevermined.keeper.getNetworkId(), + chainId: this.nevermined.keeper.network.chainId, } } return new EthSignJWT({ diff --git a/test/keeper/ContractHandler.test.ts b/test/keeper/ContractHandler.test.ts index 288cd045d..215cc41b8 100644 --- a/test/keeper/ContractHandler.test.ts +++ b/test/keeper/ContractHandler.test.ts @@ -13,7 +13,7 @@ describe('ContractHandler', () => { nevermined = await Nevermined.getInstance(config) const { instanceConfig } = nevermined as any contractHandler = new ContractHandler(instanceConfig) - networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + networkName = nevermined.keeper.network.name }) describe('ABIs parsing', () => { diff --git a/test/keeper/Keeper.test.ts b/test/keeper/Keeper.test.ts index 5f0dfebb5..990658393 100644 --- a/test/keeper/Keeper.test.ts +++ b/test/keeper/Keeper.test.ts @@ -31,7 +31,7 @@ describe('Keeper', () => { describe('#getNetworkName()', () => { it('should get localnet as default', async () => { - const networkName: string = (await keeper.getNetworkName()).toLowerCase() + const networkName: string = keeper.network.name assert( networkName === 'geth-localnet' || networkName === 'polygon-localnet' || diff --git a/test/keeper/conditions/NFT721LockCondition.test.ts b/test/keeper/conditions/NFT721LockCondition.test.ts index 642084f92..80d5be5f2 100644 --- a/test/keeper/conditions/NFT721LockCondition.test.ts +++ b/test/keeper/conditions/NFT721LockCondition.test.ts @@ -35,7 +35,7 @@ describe('NFT721LockCondition', () => { ;({ conditionStoreManager, didRegistry } = nevermined.keeper) ;[owner, lockAddress] = await nevermined.accounts.list() - const networkName = (await nevermined.keeper.getNetworkName()).toLowerCase() + const networkName = nevermined.keeper.network.name const erc721ABI = await TestContractHandler.getABI( 'NFT721Upgradeable', From 6004a8b513be0abb30f3f40d48b3a35917d0744d Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Wed, 26 Jul 2023 15:58:24 +0200 Subject: [PATCH 3/5] chore: cleanup code --- src/keeper/Web3Provider.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/keeper/Web3Provider.ts b/src/keeper/Web3Provider.ts index 7d47af483..4c6075bb5 100644 --- a/src/keeper/Web3Provider.ts +++ b/src/keeper/Web3Provider.ts @@ -22,22 +22,11 @@ export class Web3Provider { // Adding the static network prevents ethers from calling eth_chainId with every call const network = await provider.getNetwork() - console.log('network', network.chainId, network.name) provider = new ethers.JsonRpcProvider(config.web3ProviderUri, undefined, { cacheTimeout: -1, staticNetwork: network, }) - // provider.addListener('debug', (event) => { - // if (event.payload) { - // if (Array.isArray(event.payload)) { - // console.log(event.payload.map((e) => e.method)) - // } else { - // console.log(event.payload.method) - // } - // } - // }) - return provider } } From 1ef05470e53cbe91fcba5aa6e951bbd10b60decc Mon Sep 17 00:00:00 2001 From: Rodolphe Marques Date: Wed, 26 Jul 2023 17:05:55 +0200 Subject: [PATCH 4/5] fix: bring back network info getters - needed for lazy loading: getNetworkId, getNetworkName, getNetworkVersion --- MIGRATION_GUIDE.md | 16 ------- integration/nevermined/Artifacts.test.ts | 6 +-- integration/nevermined/Assets.test.ts | 2 +- .../ClaimPaymentAbortedAgreement.test.ts | 2 +- integration/nevermined/NFT1155.test.ts | 2 +- integration/nevermined/NFT1155Api.e2e.test.ts | 4 +- integration/nevermined/NFT721.test.ts | 2 +- integration/nevermined/NFT721Api.e2e.test.ts | 2 +- .../nevermined/NFT721Templates.test.ts | 4 +- .../NFTsWithMultipleServices.test.ts | 2 +- src/events/ContractEvent.ts | 2 +- src/keeper/ContractHandler.ts | 8 ++-- src/keeper/Keeper.ts | 43 ++++++++++++++++++- src/keeper/contracts/ContractBase.ts | 2 +- src/keeper/contracts/Nft1155Contract.ts | 2 +- src/keeper/contracts/Nft721Contract.ts | 2 +- src/nevermined/Nevermined.ts | 2 +- src/nevermined/Versions.ts | 4 +- src/nevermined/api/RegistryBaseApi.ts | 2 +- src/nevermined/utils/JwtUtils.ts | 2 +- test/keeper/ContractHandler.test.ts | 2 +- test/keeper/Keeper.test.ts | 2 +- .../conditions/NFT721LockCondition.test.ts | 2 +- 23 files changed, 70 insertions(+), 47 deletions(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index a3d73611f..4e692acb1 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -2,22 +2,6 @@ ## Breaking changes -### Keeper Network info - -`Keeper.version`, `Keeper.getNetworkId()`, `Keeper.getNetworkName()` are removed and instead the network information is static and set during Keeper initialization: - -```ts -// v1 -const chainId = await nevermined.keeper.getNetworkId() -const networkName = await nevermined.keeper.getNetworkName() -const version = nevermined.keeper.version - -// v2 -const chainId = nevermined.network.chainId -const networkName = nevermined.keeper.network.name -const version = nevermined.keeper.network.version -``` - ### Defining Asset Price The assetPrice is not part of AssetAttributes anymore and is part of each individual service added to the DDO when registering a service. So for services having a price, this must be added as part of the services array of the AssetAttributes. diff --git a/integration/nevermined/Artifacts.test.ts b/integration/nevermined/Artifacts.test.ts index f405dca4b..671dbfab8 100644 --- a/integration/nevermined/Artifacts.test.ts +++ b/integration/nevermined/Artifacts.test.ts @@ -44,12 +44,12 @@ describe('Artifacts', () => { artifactsFolder: tempDir, } as NeverminedOptions) - assert.equal(networkId[0], nvm.keeper.network.chainId) + assert.equal(networkId[0], await nvm.keeper.getNetworkId()) assert.isDefined(nvm) assert.isDefined(nvm.keeper) assert.isDefined(nvm.keeper.didRegistry) - assert.oneOf(nvm.keeper.network.name, networkName) - assert.oneOf(nvm.keeper.network.chainId, networkId) + assert.oneOf(await nvm.keeper.getNetworkName(), networkName) + assert.oneOf(await nvm.keeper.getNetworkId(), networkId) }) } }) diff --git a/integration/nevermined/Assets.test.ts b/integration/nevermined/Assets.test.ts index a73f0275d..cd646ad75 100644 --- a/integration/nevermined/Assets.test.ts +++ b/integration/nevermined/Assets.test.ts @@ -70,7 +70,7 @@ describe('Assets', () => { assert.equal(ddo._nvm.versions[0].immutableBackend, 'ipfs') assert.equal(Object.keys(ddo._nvm.networks).length, 1) - assert.equal(ddo._nvm.networks[nevermined.keeper.network.chainId], true) + assert.equal(ddo._nvm.networks[await nevermined.keeper.getNetworkId()], true) const metadata = ddo.findServiceByType('metadata') assert.equal(metadata.attributes.main.ercType, 721) diff --git a/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts b/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts index 9f3214e1b..5da5c8baa 100644 --- a/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts +++ b/integration/nevermined/ClaimPaymentAbortedAgreement.test.ts @@ -50,7 +50,7 @@ describe('Claim aborted agreements End-to-End', () => { nevermined = await Nevermined.getInstance(config) ;[, publisher, collector1, , other] = await nevermined.accounts.list() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT1155.test.ts b/integration/nevermined/NFT1155.test.ts index 9252d45aa..ef7171f75 100644 --- a/integration/nevermined/NFT1155.test.ts +++ b/integration/nevermined/NFT1155.test.ts @@ -68,7 +68,7 @@ describe('NFT1155 End-to-End', () => { describe('As user I can deploy Nevermined ERC-1155 NFT contract instances', () => { it('Using the ABI', async () => { - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT1155Api.e2e.test.ts b/integration/nevermined/NFT1155Api.e2e.test.ts index 388255176..bd9d8764c 100644 --- a/integration/nevermined/NFT1155Api.e2e.test.ts +++ b/integration/nevermined/NFT1155Api.e2e.test.ts @@ -86,7 +86,7 @@ function makeTest(isCustom) { ) if (isCustom) { - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, @@ -468,7 +468,7 @@ function makeTest(isCustom) { describe('Node should not be able to transfer the nft without the operator role', () => { it('should create the subscription NFT without granting Nevermined the operator role', async () => { - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc1155ABI = await ContractHandler.getABI( 'NFT1155Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721.test.ts b/integration/nevermined/NFT721.test.ts index f25e8f9a7..ca20e079d 100644 --- a/integration/nevermined/NFT721.test.ts +++ b/integration/nevermined/NFT721.test.ts @@ -29,7 +29,7 @@ describe('Nfts721 operations', async () => { // Accounts ;[deployer, artist, collector] = await nevermined.accounts.list() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721Api.e2e.test.ts b/integration/nevermined/NFT721Api.e2e.test.ts index d91254c1e..64543c7c4 100644 --- a/integration/nevermined/NFT721Api.e2e.test.ts +++ b/integration/nevermined/NFT721Api.e2e.test.ts @@ -47,7 +47,7 @@ describe('NFTs721 Api End-to-End', () => { nevermined = await Nevermined.getInstance(config) ;[, artist, collector1, , gallery] = await nevermined.accounts.list() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFT721Templates.test.ts b/integration/nevermined/NFT721Templates.test.ts index 88a442544..313560fe8 100644 --- a/integration/nevermined/NFT721Templates.test.ts +++ b/integration/nevermined/NFT721Templates.test.ts @@ -90,7 +90,7 @@ describe('NFT721Templates E2E', () => { nevermined = await Nevermined.getInstance(config) ;[owner, artist, collector1, collector2, gallery] = await nevermined.accounts.list() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, @@ -609,7 +609,7 @@ describe('NFT721Templates E2E', () => { collector2.getId(), ) - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/integration/nevermined/NFTsWithMultipleServices.test.ts b/integration/nevermined/NFTsWithMultipleServices.test.ts index da1feb548..a63aa6736 100644 --- a/integration/nevermined/NFTsWithMultipleServices.test.ts +++ b/integration/nevermined/NFTsWithMultipleServices.test.ts @@ -45,7 +45,7 @@ describe('E2E Flow for NFTs with multiple services', () => { neverminedNodeAddress = await nevermined.services.node.getProviderAddress() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await ContractHandler.getABI( 'NFT721Upgradeable', config.artifactsFolder, diff --git a/src/events/ContractEvent.ts b/src/events/ContractEvent.ts index 17cff5db1..eea0b2e15 100644 --- a/src/events/ContractEvent.ts +++ b/src/events/ContractEvent.ts @@ -34,7 +34,7 @@ export class ContractEvent extends NeverminedEvent { public async getPastEvents(options: EventOptions): EventResult { try { - const chainId = this.nevermined.keeper.network.chainId + const chainId = await this.nevermined.keeper.getNetworkId() options.fromBlock = 0 options.toBlock = 'latest' diff --git a/src/keeper/ContractHandler.ts b/src/keeper/ContractHandler.ts index 9b459963a..e4502e793 100644 --- a/src/keeper/ContractHandler.ts +++ b/src/keeper/ContractHandler.ts @@ -55,8 +55,8 @@ export class ContractHandler extends Instantiable { artifactsFolder: string, address?: string, ): Promise { - const chainId = this.nevermined.keeper.network.chainId - const where = this.nevermined.keeper.network.name + const chainId = await this.nevermined.keeper.getNetworkId() + const where = await this.nevermined.keeper.getNetworkName() try { this.logger.debug(`ContractHandler :: get :: ${artifactsFolder} and address ${address}`) return ( @@ -98,7 +98,7 @@ export class ContractHandler extends Instantiable { } public async getVersion(contractName: string, artifactsFolder: string): Promise { - const where = this.nevermined.keeper.network.name + const where = await this.nevermined.keeper.getNetworkName() let artifact this.logger.debug( `ContractHandler :: getVersion :: Trying to read ${artifactsFolder}/${contractName}.${where}.json`, @@ -257,7 +257,7 @@ export class ContractHandler extends Instantiable { public async getFeeData(gasPrice?: bigint, maxFeePerGas?: bigint, maxPriorityFeePerGas?: bigint) { // Custom gas fee for polygon networks - const chainId = this.nevermined.keeper.network.chainId + const chainId = await this.nevermined.keeper.getNetworkId() if (chainId === 137 || chainId === 80001) { return this.getFeeDataPolygon(chainId) } diff --git a/src/keeper/Keeper.ts b/src/keeper/Keeper.ts index d601a0b9b..3cc5f3422 100644 --- a/src/keeper/Keeper.ts +++ b/src/keeper/Keeper.ts @@ -150,7 +150,7 @@ export class Keeper extends Instantiable { } catch (err) { this.connected = false throw new KeeperError( - `Keeper could not connect to ${this.network.name} - ${err.message} ${err.stack}`, + `Keeper could not connect to ${await this.getNetworkName()} - ${err.message} ${err.stack}`, ) } @@ -337,7 +337,7 @@ export class Keeper extends Instantiable { /** * Network id loaded from web3 */ - public network: { + protected network: { /** * chainId of the network */ @@ -378,6 +378,45 @@ export class Keeper extends Instantiable { return Object.values(this.templates).find((template) => template.contractName === name) } + /** + * Returns the network by name. + * @returns Network name. + */ + public async getNetworkName(): Promise { + if (!this.network.name) { + this.network.name = await KeeperUtils.getNetworkName(await this.getNetworkId()) + } + return this.network.name + } + + /** + * Returns the id of the network. + * @returns Network ID. + */ + public async getNetworkId(): Promise { + if (!this.network.chainId) { + this.network.loading = false + this.network.chainId = Number((await this.web3.getNetwork()).chainId) + } + + while (!this.network.chainId) { + await new Promise((resolve) => setTimeout(resolve, 1)) + } + + return this.network.chainId + } + + /** + * Returns the network version. + * @returns Network version. + */ + public getNetworkVersion(): string { + if (!this.network.version) { + this.network.version = this.didRegistry.version.replace('v', '') + } + return this.network.version + } + /** * Returns a Access template by name. * @param name - Template name. diff --git a/src/keeper/contracts/ContractBase.ts b/src/keeper/contracts/ContractBase.ts index c061d610c..460095c49 100644 --- a/src/keeper/contracts/ContractBase.ts +++ b/src/keeper/contracts/ContractBase.ts @@ -67,7 +67,7 @@ export abstract class ContractBase extends Instantiable { this, eventEmitter, this.config.graphHttpUri, - this.nevermined.keeper.network.name, + await this.nevermined.keeper.getNetworkName(), ) } else { this.events = ContractEvent.getInstance(this, eventEmitter, config.nevermined, this.web3) diff --git a/src/keeper/contracts/Nft1155Contract.ts b/src/keeper/contracts/Nft1155Contract.ts index 2a3c172a7..c3278e84a 100644 --- a/src/keeper/contracts/Nft1155Contract.ts +++ b/src/keeper/contracts/Nft1155Contract.ts @@ -20,7 +20,7 @@ export class Nft1155Contract extends NFTContractsBase { await nft.init(config) if (address) { - const networkName = nft.nevermined.keeper.network.name + const networkName = await nft.nevermined.keeper.getNetworkName() const solidityABI = await ContractHandler.getABI(contractName, artifactsFolder, networkName) await new ContractHandler(config).checkExists(address) diff --git a/src/keeper/contracts/Nft721Contract.ts b/src/keeper/contracts/Nft721Contract.ts index 0cba341b6..4a6871b3a 100644 --- a/src/keeper/contracts/Nft721Contract.ts +++ b/src/keeper/contracts/Nft721Contract.ts @@ -16,7 +16,7 @@ export class Nft721Contract extends NFTContractsBase { ): Promise { const nft: Nft721Contract = new Nft721Contract(contractName) nft.setInstanceConfig(config) - const networkName = nft.nevermined.keeper.network.name + const networkName = await nft.nevermined.keeper.getNetworkName() // We don't have a subgraph for NFT721 so we can only use ContractEvent const eventEmitter = new EventHandler() diff --git a/src/nevermined/Nevermined.ts b/src/nevermined/Nevermined.ts index 8ef493cd0..e14fe3ec8 100644 --- a/src/nevermined/Nevermined.ts +++ b/src/nevermined/Nevermined.ts @@ -22,7 +22,7 @@ export class Nevermined extends Instantiable { * * @example * ```ts - * import { Nevermined, Config } from '@nevermined-io/nevermied-sdk-js' + * import { Nevermined, Config } from '@nevermined-io/sdk' * * const config: Config = {...} * const nevermined = await Nevermined.getInstance(config) diff --git a/src/nevermined/Versions.ts b/src/nevermined/Versions.ts index c3c19e94a..02ef09afa 100644 --- a/src/nevermined/Versions.ts +++ b/src/nevermined/Versions.ts @@ -57,8 +57,8 @@ export class Versions extends Instantiable { version: metadata.version, commit: metadata.commit, status: PlatformTechStatus.Working, - network: this.nevermined.keeper.network.name, - keeperVersion: this.nevermined.keeper.network.version, + network: await this.nevermined.keeper.getNetworkName(), + keeperVersion: this.nevermined.keeper.getNetworkVersion(), contracts: Object.values(this.nevermined.keeper.getAllInstances()) .filter((_) => !!_) .reduce( diff --git a/src/nevermined/api/RegistryBaseApi.ts b/src/nevermined/api/RegistryBaseApi.ts index bcaaf6329..6312f486e 100644 --- a/src/nevermined/api/RegistryBaseApi.ts +++ b/src/nevermined/api/RegistryBaseApi.ts @@ -203,7 +203,7 @@ export abstract class RegistryBaseApi extends Instantiable { immutableUrl: '', } ddo._nvm.versions.push(ddoVersion) - const networkId = this.nevermined.keeper.network.chainId + const networkId = await this.nevermined.keeper.getNetworkId() ddo._nvm.networks = { [networkId]: true } if (publishMetadata != PublishMetadata.OnlyMetadataAPI) { diff --git a/src/nevermined/utils/JwtUtils.ts b/src/nevermined/utils/JwtUtils.ts index c1cfc2429..708da900c 100644 --- a/src/nevermined/utils/JwtUtils.ts +++ b/src/nevermined/utils/JwtUtils.ts @@ -145,7 +145,7 @@ export class JwtUtils extends Instantiable { if (message) { eip712Data = { message, - chainId: this.nevermined.keeper.network.chainId, + chainId: await this.nevermined.keeper.getNetworkId(), } } return new EthSignJWT({ diff --git a/test/keeper/ContractHandler.test.ts b/test/keeper/ContractHandler.test.ts index 215cc41b8..8aa0342b6 100644 --- a/test/keeper/ContractHandler.test.ts +++ b/test/keeper/ContractHandler.test.ts @@ -13,7 +13,7 @@ describe('ContractHandler', () => { nevermined = await Nevermined.getInstance(config) const { instanceConfig } = nevermined as any contractHandler = new ContractHandler(instanceConfig) - networkName = nevermined.keeper.network.name + networkName = await nevermined.keeper.getNetworkName() }) describe('ABIs parsing', () => { diff --git a/test/keeper/Keeper.test.ts b/test/keeper/Keeper.test.ts index 990658393..e7620ca83 100644 --- a/test/keeper/Keeper.test.ts +++ b/test/keeper/Keeper.test.ts @@ -31,7 +31,7 @@ describe('Keeper', () => { describe('#getNetworkName()', () => { it('should get localnet as default', async () => { - const networkName: string = keeper.network.name + const networkName: string = await keeper.getNetworkName() assert( networkName === 'geth-localnet' || networkName === 'polygon-localnet' || diff --git a/test/keeper/conditions/NFT721LockCondition.test.ts b/test/keeper/conditions/NFT721LockCondition.test.ts index 80d5be5f2..767289cf6 100644 --- a/test/keeper/conditions/NFT721LockCondition.test.ts +++ b/test/keeper/conditions/NFT721LockCondition.test.ts @@ -35,7 +35,7 @@ describe('NFT721LockCondition', () => { ;({ conditionStoreManager, didRegistry } = nevermined.keeper) ;[owner, lockAddress] = await nevermined.accounts.list() - const networkName = nevermined.keeper.network.name + const networkName = await nevermined.keeper.getNetworkName() const erc721ABI = await TestContractHandler.getABI( 'NFT721Upgradeable', From 81c34f4d205576290c6788c873f905d77c123af3 Mon Sep 17 00:00:00 2001 From: r-marques Date: Wed, 26 Jul 2023 15:56:05 +0000 Subject: [PATCH 5/5] Automated CHANGELOG.md update Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d53cc5b4c..d4669ffe1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v2.0.0-rc2](https://github.com/nevermined-io/sdk-js/compare/v2.0.0-rc1...v2.0.0-rc2) + +> 26 July 2023 + +- Support of assets with multiple services of the same type [`#555`](https://github.com/nevermined-io/sdk-js/pull/555) +- feat: make keeper network info static [`89511f1`](https://github.com/nevermined-io/sdk-js/commit/89511f11140398c146246a19438e958938b83376) +- fix: bring back network info getters [`1ef0547`](https://github.com/nevermined-io/sdk-js/commit/1ef05470e53cbe91fcba5aa6e951bbd10b60decc) +- chore: coming back to original attribute name [`941f96f`](https://github.com/nevermined-io/sdk-js/commit/941f96f485fee18398fe7e1517e8a43e85361754) + #### [v2.0.0-rc1](https://github.com/nevermined-io/sdk-js/compare/v2.0.0-rc0...v2.0.0-rc1) > 25 July 2023 @@ -348,7 +357,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - ci: testing with https services [`bb96077`](https://github.com/nevermined-io/sdk-js/commit/bb96077c9403ea7ae26195a51d8a92e144cea384) - linting [`d2547ed`](https://github.com/nevermined-io/sdk-js/commit/d2547edfbfebb49b488c97c4ce9e6d6f2ee849e4) -#### [v1.0.0](https://github.com/nevermined-io/sdk-js/compare/v1.0.0-rc9...v1.0.0) +### [v1.0.0](https://github.com/nevermined-io/sdk-js/compare/v1.0.0-rc9...v1.0.0) > 14 February 2023 @@ -1087,7 +1096,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). > 2 May 2022 -- add aave service agreement to ddo when creating nft721 asset [`#248`](https://github.com/nevermined-io/sdk-js/pull/248) +- add aave service agreement to ddo when creating nft721 asset [`#248`](https://github.com/nevermined-io/sdk-js/pull/248) - Adding v0.19.21 Changelog updates [`c93cdc5`](https://github.com/nevermined-io/sdk-js/commit/c93cdc55f139a43db4130ccb0f80924d2645a931) #### [v0.19.21](https://github.com/nevermined-io/sdk-js/compare/v0.19.20...v0.19.21) @@ -1350,7 +1359,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). > 18 January 2022 -- Removing not used parameter [`#186`](https://github.com/nevermined-io/sdk-js/pull/186) +- Removing not used parameter [`#186`](https://github.com/nevermined-io/sdk-js/pull/186) - [wip] Create agreement+pay in one transaction [`#183`](https://github.com/nevermined-io/sdk-js/pull/183) - Adapting to contracts `v1.3.3` [`#177`](https://github.com/nevermined-io/sdk-js/pull/177) - Adding v0.17.2 Changelog updates [`5eddda4`](https://github.com/nevermined-io/sdk-js/commit/5eddda43954e013e6e6f7344c9a877d801aacb5c) @@ -1856,7 +1865,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Feature/sync develop [`#268`](https://github.com/nevermined-io/sdk-js/pull/268) - Quick fix for non-eip1559 networks [`#266`](https://github.com/nevermined-io/sdk-js/pull/266) - integrate Permissions and refactor search query [`#264`](https://github.com/nevermined-io/sdk-js/pull/264) -- add aave service agreement to ddo when creating nft721 asset [`#248`](https://github.com/nevermined-io/sdk-js/pull/248) +- add aave service agreement to ddo when creating nft721 asset [`#248`](https://github.com/nevermined-io/sdk-js/pull/248) - Get the keeper version from the artifacts instead of package version [`#244`](https://github.com/nevermined-io/sdk-js/pull/244) - replace `metadata-api` url by `marketplace-api` and sort type [`#243`](https://github.com/nevermined-io/sdk-js/pull/243) - fixing issues with BigNumbers [`#246`](https://github.com/nevermined-io/sdk-js/pull/246) @@ -1895,7 +1904,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Feature/190 add did to sec markets [`#191`](https://github.com/nevermined-io/sdk-js/pull/191) - Adding utility methods for getting nft token uri [`#189`](https://github.com/nevermined-io/sdk-js/pull/189) - Lint ... [`#187`](https://github.com/nevermined-io/sdk-js/pull/187) -- Removing not used parameter [`#186`](https://github.com/nevermined-io/sdk-js/pull/186) +- Removing not used parameter [`#186`](https://github.com/nevermined-io/sdk-js/pull/186) - [wip] Create agreement+pay in one transaction [`#183`](https://github.com/nevermined-io/sdk-js/pull/183) - Adapting to contracts `v1.3.3` [`#177`](https://github.com/nevermined-io/sdk-js/pull/177) - Correct typo in route [`#184`](https://github.com/nevermined-io/sdk-js/pull/184)