diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index bd625424..1fd3ac39 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -47,7 +47,10 @@ export class DataTokens { * Generate new datatoken name & symbol from a word list * @return {<{ name: String; symbol: String }>} datatoken name & symbol. Produces e.g. "Endemic Jellyfish Token" & "ENDJEL-45" */ - public generateDtName(wordList?: { nouns: string[]; adjectives: string[] }): { + public generateDtName(wordList?: { + nouns: string[] + adjectives: string[] + }): { name: string symbol: string } { diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index a2fc55f8..a4e8f209 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -452,11 +452,18 @@ export class Assets extends Instantiable { serviceType: string, consumerAddress: string, serviceIndex = -1, - serviceEndpoint: string + serviceEndpoint: string, + ddo?: DDO ): Promise { const provider = await Provider.getInstance(this.instanceConfig) await provider.setBaseUrl(serviceEndpoint) - const res = await provider.initialize(did, serviceIndex, serviceType, consumerAddress) + const res = await provider.initialize( + did, + serviceIndex, + serviceType, + consumerAddress, + ddo + ) if (res === null) return null const providerData = JSON.parse(res) return providerData @@ -501,7 +508,8 @@ export class Assets extends Instantiable { serviceType, payerAddress, serviceIndex, - service.serviceEndpoint + service.serviceEndpoint, + ddo ) if (!providerData) throw new Error( diff --git a/src/ocean/Compute.ts b/src/ocean/Compute.ts index 4c7c4f9d..6870a68e 100644 --- a/src/ocean/Compute.ts +++ b/src/ocean/Compute.ts @@ -105,6 +105,7 @@ export class Compute extends Instantiable { * @param {string} algorithmDid The DID of the algorithm asset (of type `algorithm`) to run on the asset. * @param {MetaData} algorithmMeta Metadata about the algorithm being run if `algorithm` is being used. This is ignored when `algorithmDid` is specified. * @param {Output} output Define algorithm output publishing. Publishing the result of a compute job is turned off by default. + * @param {DDO} ddo If undefined then the ddo will be fetched by did * @return {Promise} Returns compute job ID under status.jobId */ public async start( @@ -116,10 +117,14 @@ export class Compute extends Instantiable { output?: ComputeOutput, serviceIndex?: string, serviceType?: string, - additionalInputs?: ComputeInput[] + additionalInputs?: ComputeInput[], + ddo?: DDO ): Promise { output = this.checkOutput(consumerAccount, output) - const ddo = await this.ocean.assets.resolve(did) + if (!ddo) { + ddo = await this.ocean.assets.resolve(did) + if (!ddo) throw new Error(`Couldn't resolve the did ${did}`) + } const service = ddo.findServiceByType('compute') const { serviceEndpoint } = service if (did && txId) { @@ -147,14 +152,19 @@ export class Compute extends Instantiable { * @param {Account} consumerAccount The account of the consumer ordering the service. * @param {string} did Decentralized identifier. * @param {string} jobId The ID of the compute job to be stopped + * @param {DDO} ddo If undefined then the ddo will be fetched by did * @return {Promise} Returns the new status of a job */ public async stop( consumerAccount: Account, did: string, - jobId: string + jobId: string, + ddo?: DDO ): Promise { - const ddo = await this.ocean.assets.resolve(did) + if (!ddo) { + ddo = await this.ocean.assets.resolve(did) + if (!ddo) throw new Error(`Couldn't resolve the did ${did}`) + } const service = ddo.findServiceByType('compute') const { serviceEndpoint } = service const provider = await Provider.getInstance(this.instanceConfig) @@ -169,14 +179,19 @@ export class Compute extends Instantiable { * @param {Account} consumerAccount The account of the consumer ordering the service. * @param {string} did Decentralized identifier. * @param {string} jobId The ID of the compute job to be stopped + * @param {DDO} ddo If undefined then the ddo will be fetched by did * @return {Promise} Returns the new status of a job */ public async delete( consumerAccount: Account, did: string, - jobId: string + jobId: string, + ddo?: DDO ): Promise { - const ddo = await this.ocean.assets.resolve(did) + if (!ddo) { + ddo = await this.ocean.assets.resolve(did) + if (!ddo) throw new Error(`Couldn't resolve the did ${did}`) + } const service = ddo.findServiceByType('compute') const { serviceEndpoint } = service const provider = await Provider.getInstance(this.instanceConfig) @@ -243,14 +258,19 @@ export class Compute extends Instantiable { * @param {Account} consumerAccount The account of the consumer ordering the service. * @param {string} did Decentralized identifier. * @param {string} jobId The ID of the compute job to be stopped. + * @param {DDO} ddo If undefined then the ddo will be fetched by did * @return {Promise} Returns the DDO of the result asset. */ public async result( consumerAccount: Account, did: string, - jobId: string + jobId: string, + ddo?: DDO ): Promise { - const ddo = await this.ocean.assets.resolve(did) + if (!ddo) { + ddo = await this.ocean.assets.resolve(did) + if (!ddo) throw new Error(`Couldn't resolve the did ${did}`) + } const service = ddo.findServiceByType('compute') const { serviceEndpoint } = service const provider = await Provider.getInstance(this.instanceConfig) @@ -401,6 +421,8 @@ export class Compute extends Instantiable { * @param {string} serviceIndex The Service index * @param {string} algorithmDid The DID of the algorithm asset (of type `algorithm`) to run on the asset. * @param {MetaData} algorithmMeta Metadata about the algorithm being run if `algorithm` is being used. This is ignored when `algorithmDid` is specified. + * @param {DDO} datasetDdo Dataset DDO object. If undefined then the ddo will be fetched by did + * @param {DDO} algorithmDDO Algorithm DDO object. If undefined then the ddo will be fetched by did * @return {Promise} True is you can order this * * Note: algorithmDid and algorithmMeta are optional, but if they are not passed, @@ -410,10 +432,15 @@ export class Compute extends Instantiable { public async isOrderable( datasetDid: string, serviceIndex: number, - algorithm: ComputeAlgorithm + algorithm: ComputeAlgorithm, + datasetDdo?: DDO, + algorithmDDO?: DDO ): Promise { - const ddo: DDO = await this.ocean.assets.resolve(datasetDid) - const service: Service = ddo.findServiceById(serviceIndex) + if (!datasetDdo) { + datasetDdo = await this.ocean.assets.resolve(datasetDid) + if (!datasetDdo) throw new Error(`Couldn't resolve the did ${datasetDid}`) + } + const service: Service = datasetDdo.findServiceById(serviceIndex) if (!service) return false if (service.type === 'compute') { if (algorithm.meta) { @@ -426,8 +453,14 @@ export class Compute extends Instantiable { if (algorithm.did) { // check if both have compute services and then if they are served by the same provider if (algorithm.serviceIndex) { - const algoDDO: DDO = await this.ocean.assets.resolve(algorithm.did) - const algoService: Service = algoDDO.findServiceById(algorithm.serviceIndex) + if (!algorithmDDO) { + algorithmDDO = await this.ocean.assets.resolve(algorithm.did) + if (!algorithmDDO) + throw new Error(`Couldn't resolve the did ${algorithm.did}`) + } + const algoService: Service = algorithmDDO.findServiceById( + algorithm.serviceIndex + ) if (algoService && algoService.type === 'compute') { // since both dataset & algo services are compute, we need to check if they are served by the same provider const algoProvider = await Provider.getInstance(this.instanceConfig) @@ -511,18 +544,28 @@ export class Compute extends Instantiable { algorithm: ComputeAlgorithm, mpAddress?: string, computeAddress?: string, + datasetDdo?: DDO, searchPreviousOrders = true ): SubscribablePromise { return new SubscribablePromise(async (observer) => { // first check if we can order this - const allowed = await this.isOrderable(datasetDid, serviceIndex, algorithm) + const allowed = await this.isOrderable( + datasetDid, + serviceIndex, + algorithm, + datasetDdo + ) if (!allowed) throw new Error( `Dataset order failed, dataset is not orderable with the specified algorithm` ) - const ddo: DDO = await this.ocean.assets.resolve(datasetDid) + + if (!datasetDdo) { + datasetDdo = await this.ocean.assets.resolve(datasetDid) + if (!datasetDdo) throw new Error(`Couldn't resolve the did ${datasetDid}`) + } // const service: Service = ddo.findServiceByType('compute') - const service: Service = ddo.findServiceById(serviceIndex) + const service: Service = datasetDdo.findServiceById(serviceIndex) if (!service) throw new Error(`Dataset order failed, Could not find service for the DDO`) try { @@ -631,8 +674,9 @@ export class Compute extends Instantiable { } if (typeof ddo.service[serviceIndex] === 'undefined') return null if (ddo.service[serviceIndex].type !== 'compute') return null - ddo.service[serviceIndex].attributes.main.privacy.allowAllPublishedAlgorithms = - newState + ddo.service[ + serviceIndex + ].attributes.main.privacy.allowAllPublishedAlgorithms = newState return ddo } @@ -747,12 +791,13 @@ export class Compute extends Instantiable { if (ddo.service[serviceIndex].type !== 'compute') return ddo if (!ddo.service[serviceIndex].attributes.main.privacy.publisherTrustedAlgorithms) return ddo - ddo.service[serviceIndex].attributes.main.privacy.publisherTrustedAlgorithms = - ddo.service[serviceIndex].attributes.main.privacy.publisherTrustedAlgorithms.filter( - function (el) { - return el.did !== algoDid - } - ) + ddo.service[ + serviceIndex + ].attributes.main.privacy.publisherTrustedAlgorithms = ddo.service[ + serviceIndex + ].attributes.main.privacy.publisherTrustedAlgorithms.filter(function (el) { + return el.did !== algoDid + }) return ddo } } diff --git a/src/provider/Provider.ts b/src/provider/Provider.ts index 00f26ca1..959f9358 100644 --- a/src/provider/Provider.ts +++ b/src/provider/Provider.ts @@ -189,15 +189,12 @@ export class Provider extends Instantiable { did: string, serviceIndex: number, serviceType: string, - consumerAddress: string + consumerAddress: string, + ddo?: DDO ): Promise { - let DDO: DDO - - try { - DDO = await this.ocean.assets.resolve(did) - } catch (e) { - this.logger.error(e) - throw new Error('Failed to resolve DID') + if (!ddo) { + ddo = await this.ocean.assets.resolve(did) + if (!ddo) throw new Error(`Couldn't resolve the did ${did}`) } let initializeUrl = this.getInitializeEndpoint() ? this.getInitializeEndpoint().urlPath @@ -206,7 +203,7 @@ export class Provider extends Instantiable { initializeUrl += `?documentId=${did}` initializeUrl += `&serviceId=${serviceIndex}` initializeUrl += `&serviceType=${serviceType}` - initializeUrl += `&dataToken=${DDO.dataToken}` + initializeUrl += `&dataToken=${ddo.dataToken}` initializeUrl += `&consumerAddress=${consumerAddress}` try { const response = await this.ocean.utils.fetch.get(initializeUrl) diff --git a/src/utils/ConfigHelper.ts b/src/utils/ConfigHelper.ts index c9193c51..05db7929 100644 --- a/src/utils/ConfigHelper.ts +++ b/src/utils/ConfigHelper.ts @@ -150,8 +150,14 @@ export class ConfigHelper { // use the defaults first let configAddresses: Partial if (DefaultContractsAddresses[network]) { - const { DTFactory, BFactory, FixedRateExchange, Dispenser, Metadata, Ocean } = - DefaultContractsAddresses[network] + const { + DTFactory, + BFactory, + FixedRateExchange, + Dispenser, + Metadata, + Ocean + } = DefaultContractsAddresses[network] configAddresses = { factoryAddress: DTFactory, poolFactoryAddress: BFactory, @@ -172,8 +178,14 @@ export class ConfigHelper { 'utf8' ) ) - const { DTFactory, BFactory, FixedRateExchange, Dispenser, Metadata, Ocean } = - data[network] + const { + DTFactory, + BFactory, + FixedRateExchange, + Dispenser, + Metadata, + Ocean + } = data[network] configAddresses = { factoryAddress: DTFactory, poolFactoryAddress: BFactory, diff --git a/src/utils/SubscribablePromise.ts b/src/utils/SubscribablePromise.ts index 5a72e618..3e0c8fe0 100644 --- a/src/utils/SubscribablePromise.ts +++ b/src/utils/SubscribablePromise.ts @@ -17,7 +17,9 @@ export class SubscribablePromise { setTimeout(() => this.init(executor), 1) } - public subscribe(onNext: (next: T) => void): { + public subscribe( + onNext: (next: T) => void + ): { unsubscribe: () => boolean } { return this.observer.subscribe(onNext) diff --git a/test/integration/ComputeFlow.test.ts b/test/integration/ComputeFlow.test.ts index fbdb7589..2db1eef5 100644 --- a/test/integration/ComputeFlow.test.ts +++ b/test/integration/ComputeFlow.test.ts @@ -104,7 +104,8 @@ describe('Compute flow', () => { language: 'js', format: 'docker-image', version: '0.1', - url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + url: + 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', container: { entrypoint: 'node $ALGO', image: 'node', @@ -249,7 +250,8 @@ describe('Compute flow', () => { license: 'CC-BY', files: [ { - url: 'https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos/CoverSongs/shs_dataset_test.txt', + url: + 'https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos/CoverSongs/shs_dataset_test.txt', checksum: 'efb2c764274b745f5fc37f97c6b0e764', contentLength: '4535431', contentType: 'text/csv', @@ -485,7 +487,8 @@ describe('Compute flow', () => { license: 'CC-BY', files: [ { - url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + url: + 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', contentType: 'text/js', encoding: 'UTF-8' } @@ -537,7 +540,8 @@ describe('Compute flow', () => { license: 'CC-BY', files: [ { - url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + url: + 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', contentType: 'text/js', encoding: 'UTF-8' } @@ -598,7 +602,8 @@ describe('Compute flow', () => { license: 'CC-BY', files: [ { - url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + url: + 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', contentType: 'text/js', encoding: 'UTF-8' } @@ -662,7 +667,8 @@ describe('Compute flow', () => { license: 'CC-BY', files: [ { - url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + url: + 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', contentType: 'text/js', encoding: 'UTF-8' } @@ -840,7 +846,8 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo ) assert(allowed === true) computeOrderId = await ocean.compute.orderAsset( @@ -849,7 +856,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(computeOrderId != null, 'computeOrderId === null') const response = await ocean.compute.start( @@ -860,7 +868,9 @@ describe('Compute flow', () => { algoDefinition, output, `${computeService.index}`, - computeService.type + computeService.type, + undefined, + ddo ) assert(response, 'Compute error') jobId = response.jobId @@ -918,7 +928,7 @@ describe('Compute flow', () => { }) it('Bob should stop compute job', async () => { assert(jobId != null, 'Jobid is null') - await ocean.compute.stop(bob, ddo.id, jobId) + await ocean.compute.stop(bob, ddo.id, jobId, ddo) const response = await ocean.compute.status(bob, ddo.id, undefined, undefined, jobId) // TODO: typings say that `stopreq` does not exist assert((response[0] as any).stopreq === 1, 'Response.stopreq is invalid') @@ -941,7 +951,8 @@ describe('Compute flow', () => { service1.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + datasetNoRawAlgo ) assert(order === null, 'Order should be null') } catch (error) { @@ -964,7 +975,8 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( datasetWithTrustedAlgo.id, service1.index, - algoDefinition + algoDefinition, + datasetWithTrustedAlgo ) assert(allowed === false) @@ -976,7 +988,8 @@ describe('Compute flow', () => { service1.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + datasetWithTrustedAlgo ) assert(order === null, 'Order should be null') } catch (error) { @@ -995,7 +1008,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAsset ) assert(allowed === false) @@ -1006,7 +1021,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order === null, 'Order should be null') } catch (error) { @@ -1081,8 +1097,9 @@ describe('Compute flow', () => { algorithmAssetRemoteProviderWithCompute != null, 'algorithmAsset should not be null' ) - const serviceAlgo = - algorithmAssetRemoteProviderWithCompute.findServiceByType('compute') + const serviceAlgo = algorithmAssetRemoteProviderWithCompute.findServiceByType( + 'compute' + ) assert(serviceAlgo != null, 'serviceAlgo should not be null') // get the compute address first computeAddress = await ocean.compute.getComputeAddress(ddo.id, computeService.index) @@ -1094,7 +1111,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAssetRemoteProviderWithCompute ) assert(allowed === false) try { @@ -1104,7 +1123,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order === null, 'Order should be null') } catch (error) { @@ -1127,7 +1147,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAssetwithCompute ) assert(allowed === true) const order = await ocean.compute.orderAsset( @@ -1136,7 +1158,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order != null, 'Order should not be null') // order the algorithm @@ -1159,7 +1182,9 @@ describe('Compute flow', () => { algoDefinition, output, `${computeService.index}`, - computeService.type + computeService.type, + undefined, + ddo ) assert(response, 'Compute error') jobId = response.jobId @@ -1183,7 +1208,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAsset ) assert(allowed === true) const order = await ocean.compute.orderAsset( @@ -1192,7 +1219,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order != null, 'Order should not be null') // order the algorithm @@ -1215,7 +1243,9 @@ describe('Compute flow', () => { algoDefinition, output, `${computeService.index}`, - computeService.type + computeService.type, + undefined, + ddo ) assert(response, 'Compute error') jobId = response.jobId @@ -1242,7 +1272,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAssetRemoteProvider ) assert(allowed === true) const order = await ocean.compute.orderAsset( @@ -1251,7 +1283,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order != null, 'Order should not be null') const orderalgo = await ocean.compute.orderAlgorithm( @@ -1273,7 +1306,9 @@ describe('Compute flow', () => { algoDefinition, output, `${computeService.index}`, - computeService.type + computeService.type, + undefined, + ddo ) assert(response, 'Compute error') assert(response.status >= 1, 'Invalid response status') @@ -1296,7 +1331,9 @@ describe('Compute flow', () => { allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAsset ) assert(allowed === true) const order = await ocean.compute.orderAsset( @@ -1305,7 +1342,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddo ) assert(order != null, 'Order should not be null') // order the algo @@ -1324,7 +1362,8 @@ describe('Compute flow', () => { allowed = await ocean.compute.isOrderable( ddoAdditional1.id, inputOrder1Service.index, - algoDefinition + algoDefinition, + ddoAdditional1 ) assert(allowed === true) const inputOrder1 = await ocean.compute.orderAsset( @@ -1333,7 +1372,8 @@ describe('Compute flow', () => { inputOrder1Service.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddoAdditional1 ) assert(inputOrder1 != null, 'inputOrder1 should not be null') assert(ddoAdditional1 != null, 'ddoAdditional1 should not be null') @@ -1342,7 +1382,8 @@ describe('Compute flow', () => { allowed = await ocean.compute.isOrderable( ddoAdditional2.id, inputOrder2Service.index, - algoDefinition + algoDefinition, + ddoAdditional2 ) assert(allowed === true) const inputOrder2 = await ocean.compute.orderAsset( @@ -1351,7 +1392,8 @@ describe('Compute flow', () => { inputOrder2Service.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + ddoAdditional2 ) assert(inputOrder2 != null, 'inputOrder2 should not be null') const additionalInputs: ComputeInput[] = [ @@ -1377,7 +1419,8 @@ describe('Compute flow', () => { output, `${computeService.index}`, computeService.type, - additionalInputs + additionalInputs, + ddo ) assert(response.status >= 1, 'Invalid response.status') assert(response.jobId, 'Invalid jobId') @@ -1464,7 +1507,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAsset ) assert(allowed === false, 'This should fail, the algo container section was changed!') }) @@ -1500,7 +1545,9 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( ddo.id, computeService.index, - algoDefinition + algoDefinition, + ddo, + algorithmAssetRemoteProvider ) assert(allowed === false, 'This should fail, the algo files section was changed!') }) @@ -1556,7 +1603,8 @@ describe('Compute flow', () => { const allowed = await ocean.compute.isOrderable( datasetWithBogusProvider.id, computeService.index, - algoDefinition + algoDefinition, + datasetWithBogusProvider ) assert(allowed === false) // we know that it is not Orderable, but we are trying to force it @@ -1568,7 +1616,8 @@ describe('Compute flow', () => { computeService.index, algoDefinition, null, // no marketplace fee - computeAddress // CtD is the consumer of the dataset + computeAddress, // CtD is the consumer of the dataset + datasetWithBogusProvider ) assert(order === null, 'Order should be null') } catch (error) { @@ -1585,7 +1634,9 @@ describe('Compute flow', () => { algoDefinition, output, `${computeService.index}`, - computeService.type + computeService.type, + undefined, + ddo ) assert(response === null || response === undefined, 'Compute error') }) @@ -1604,7 +1655,12 @@ describe('Compute flow', () => { }) it('Bob should fail to stop a fake compute job on a bogus provider', async () => { const jobid = '1234' - const response = await ocean.compute.stop(bob, datasetWithBogusProvider.id, jobid) + const response = await ocean.compute.stop( + bob, + datasetWithBogusProvider.id, + jobid, + ddo + ) assert(response === null || response === undefined, 'Invalid response') }) })