From 60fc9530ae94a5b16b4b885f24fa0f1d2f63b447 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Fri, 11 Sep 2020 02:41:20 -0700 Subject: [PATCH 1/6] add startOrder --- src/datatokens/Datatokens.ts | 69 +++++++++++++- src/ocean/Assets.ts | 113 +++++++++++++++++++++-- src/ocean/Compute.ts | 11 ++- test/integration/ComputeFlow.test.ts | 30 ++---- test/integration/Marketplaceflow.test.ts | 30 ++---- 5 files changed, 197 insertions(+), 56 deletions(-) diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index 224caf0d..0f4cd537 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -5,7 +5,7 @@ import defaultFactoryABI from '@oceanprotocol/contracts/artifacts/DTFactory.json import defaultDatatokensABI from '@oceanprotocol/contracts/artifacts/DataTokenTemplate.json' import wordListDefault from '../data/words.json' - +import { TransactionReceipt } from 'web3-core' /** * Provides a interface to DataTokens */ @@ -350,4 +350,71 @@ export class DataTokens { public fromWei(amount: string): string { return this.web3.utils.fromWei(amount) } + + /** Calculate total fee + * @param {String} dataTokenAddress + * @param {String} amount + * @param {String} mpFeePercentage + * @param {String} address + * @return {Promise} string + */ + public async calculateTotalFee( + dataTokenAddress: string, + amount: string, + mpFeePercentage: string, + address: string + ): Promise { + const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { + from: address + }) + const totalFee = await datatoken.methods + .calculateTotalFee( + this.web3.utils.toWei(amount), + this.web3.utils.toWei(mpFeePercentage) + ) + .call() + return this.web3.utils.fromWei(totalFee) + } + + /** Start Order + * @param {String} dataTokenAddress + * @param {String} providerAddress + * @param {String} amount + * @param {String} did + * @param {Number} serviceId + * @param {String} mpFeeAddress + * @param {String} mpFeePercentage + * @param {String} address + * @return {Promise} string + */ + public async startOrder( + dataTokenAddress: string, + providerAddress: string, + amount: string, + did: string, + serviceId: number, + mpFeeAddress: string, + mpFeePercentage: string, + address: string + ): Promise { + const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { + from: address + }) + try { + const trxReceipt = await datatoken.methods + .startOrder( + providerAddress, + this.web3.utils.toWei(amount), + String(did), + String(serviceId), + mpFeeAddress, + this.web3.utils.toWei(mpFeePercentage) + ) + .send({ from: address }) + return trxReceipt + } catch (e) { + console.error(e) + return null + } + } } diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index 8181c7b0..3a9cedc7 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -11,9 +11,11 @@ import { import { EditableMetadata } from '../ddo/interfaces/EditableMetadata' import Account from './Account' import DID from './DID' -import { SubscribablePromise } from '../utils' +import { SubscribablePromise, didZeroX } from '../utils' import { Instantiable, InstantiableConfig } from '../Instantiable.abstract' import { WebServiceConnector } from './utils/WebServiceConnector' +import { DataTokens } from '../lib' +import BigNumber from 'bignumber.js' export enum CreateProgressStep { CreatingDataToken, @@ -396,11 +398,65 @@ export class Assets extends Instantiable { } } + /** + * Initialize a service + * Can be used to compute totalCost for ordering a service + * @param {String} did + * @param {String} serviceType + * @param {String} consumerAddress + * @param {Number} serviceIndex + * @param {String} mpFeePercent will be converted to Wei + * @param {String} mpAddress mp fee collector address + * @return {Promise} Order details + */ + public async initialize( + did: string, + serviceType: string, + consumerAddress: string, + serviceIndex = -1, + mpFeePercent?: string + ): Promise { + const res = await this.ocean.provider.initialize( + did, + serviceIndex, + serviceType, + consumerAddress + ) + if (res === null) return null + const providerData = JSON.parse(res) + const { datatokens } = this.ocean + const dtCost = new BigNumber(this.web3.utils.fromWei(String(providerData.numTokens))) + const totalFee = new BigNumber( + await datatokens.calculateTotalFee( + providerData.dataToken, + this.web3.utils.fromWei(String(providerData.numTokens)), + mpFeePercent, + consumerAddress + ) + ) + providerData.totalFee = totalFee.toString() + providerData.dtCost = dtCost.toString() + providerData.totalCost = dtCost.plus(totalFee).toString() + return providerData + } + + /** + * Orders & pays for a service + * @param {String} did + * @param {String} serviceType + * @param {String} consumerAddress + * @param {Number} serviceIndex + * @param {String} mpFeePercent will be converted to Wei + * @param {String} mpAddress mp fee collector address + * @return {Promise} transactionHash of the payment + */ public async order( did: string, serviceType: string, consumerAddress: string, - serviceIndex = -1 + serviceIndex = -1, + mpFeePercent?: string, + mpAddress?: string ): Promise { if (serviceIndex === -1) { const service = await this.getServiceByType(did, serviceType) @@ -409,12 +465,53 @@ export class Assets extends Instantiable { const service = await this.getServiceByIndex(did, serviceIndex) serviceType = service.type } - return await this.ocean.provider.initialize( - did, - serviceIndex, - serviceType, - consumerAddress - ) + if (!mpFeePercent) mpFeePercent = '0' + if (!mpAddress) mpAddress = '0x000000000000000000000000000000000000dEaD' + const { datatokens } = this.ocean + try { + const providerData = await this.initialize( + did, + serviceType, + consumerAddress, + serviceIndex, + mpFeePercent + ) + if (!providerData) return null + const balance = new BigNumber( + await datatokens.balance(providerData.dataToken, consumerAddress) + ) + const totalCost = new BigNumber(providerData.totalCost) + if (balance.isLessThanOrEqualTo(totalCost)) { + console.error('Not enough funds') + + return null + } + console.log( + 'Balance:' + + balance.toString() + + '| dtCost:' + + providerData.dtCost.toString() + + '|Fees:' + + providerData.totalFee.toString() + + '|Total:' + + providerData.totalCost.toString() + ) + const txid = await datatokens.startOrder( + providerData.dataToken, + providerData.to, + String(providerData.numTokens), + didZeroX(did), + serviceIndex, + mpAddress, + mpFeePercent, + consumerAddress + ) + if (txid) return txid.transactionHash + else return null + } catch (e) { + console.error(e) + return null + } } // marketplace flow diff --git a/src/ocean/Compute.ts b/src/ocean/Compute.ts index 658e6aec..f580e3de 100644 --- a/src/ocean/Compute.ts +++ b/src/ocean/Compute.ts @@ -87,7 +87,7 @@ export class Compute extends Instantiable { algorithmDataToken?: string ): Promise { output = this.checkOutput(consumerAccount, output) - if (did) { + if (did && txId) { const computeJobsList = await this.ocean.provider.compute( 'post', did, @@ -349,7 +349,9 @@ export class Compute extends Instantiable { datasetDid: string, serviceIndex: number, algorithmDid?: string, - algorithmMeta?: MetadataAlgorithm + algorithmMeta?: MetadataAlgorithm, + mpFeePercent?: string, + mpAddress?: string ): SubscribablePromise { return new SubscribablePromise(async (observer) => { const ddo: DDO = await this.ocean.assets.resolve(datasetDid) @@ -380,7 +382,10 @@ export class Compute extends Instantiable { const order = await this.ocean.assets.order( datasetDid, service.type, - consumerAccount + consumerAccount, + -1, + mpFeePercent, + mpAddress ) return order }) diff --git a/test/integration/ComputeFlow.test.ts b/test/integration/ComputeFlow.test.ts index 1e390f10..533a500c 100644 --- a/test/integration/ComputeFlow.test.ts +++ b/test/integration/ComputeFlow.test.ts @@ -270,16 +270,9 @@ describe('Compute flow', () => { algorithmMeta ) assert(order != null) - const computeOrder = JSON.parse(order) - const tx = await datatoken.transferWei( - computeOrder.dataToken, - computeOrder.to, - String(computeOrder.numTokens), - computeOrder.from - ) const response = await ocean.compute.start( ddo.id, - tx.transactionHash, + order, tokenAddress, bob, undefined, @@ -293,6 +286,7 @@ describe('Compute flow', () => { }) it('Bob should get status of a compute job', async () => { + assert(jobId != null) const response = await ocean.compute.status(bob, ddo.id, jobId) assert(response[0].jobId === jobId) }) @@ -302,6 +296,7 @@ describe('Compute flow', () => { assert(response.length > 0) }) it('Bob should stop compute job', async () => { + assert(jobId != null) await ocean.compute.stop(bob, ddo.id, jobId) const response = await ocean.compute.status(bob, ddo.id, jobId) assert(response[0].stopreq === 1) @@ -338,13 +333,7 @@ describe('Compute flow', () => { serviceAlgo.type, bob.getId() ) - const algoOrder = JSON.parse(orderalgo) - const algoTx = await datatoken.transferWei( - algoOrder.dataToken, - algoOrder.to, - String(algoOrder.numTokens), - algoOrder.from - ) + assert(orderalgo != null) const order = await ocean.compute.order( bob.getId(), ddo.id, @@ -353,16 +342,9 @@ describe('Compute flow', () => { undefined ) assert(order != null) - const computeOrder = JSON.parse(order) - const tx = await datatoken.transferWei( - computeOrder.dataToken, - computeOrder.to, - String(computeOrder.numTokens), - computeOrder.from - ) const response = await ocean.compute.start( ddo.id, - tx.transactionHash, + order, tokenAddress, bob, algorithmAsset.id, @@ -370,7 +352,7 @@ describe('Compute flow', () => { output, computeService.index, computeService.type, - algoTx.transactionHash, + orderalgo, algorithmAsset.dataToken ) jobId = response.jobId diff --git a/test/integration/Marketplaceflow.test.ts b/test/integration/Marketplaceflow.test.ts index 0c50351f..c0ad435e 100644 --- a/test/integration/Marketplaceflow.test.ts +++ b/test/integration/Marketplaceflow.test.ts @@ -159,26 +159,16 @@ describe('Marketplace flow', () => { }) it('Bob consumes asset 1', async () => { - await ocean.assets - .order(ddo.id, accessService.type, bob.getId()) - .then(async (res: any) => { - res = JSON.parse(res) - return await datatoken.transferWei( - res.dataToken, - res.to, - String(res.numTokens), - res.from - ) - }) - .then(async (tx) => { - await ocean.assets.download( - ddo.id, - tx.transactionHash, - tokenAddress, - bob, - './node_modules/my-datasets' - ) - }) + await ocean.assets.order(ddo.id, accessService.type, bob.getId()).then(async (tx) => { + assert(tx != null) + await ocean.assets.download( + ddo.id, + tx, + tokenAddress, + bob, + './node_modules/my-datasets' + ) + }) }) it('owner can list there assets', async () => { const assets = await ocean.assets.ownerAssets(alice.getId()) From 550db481be06a9e18c7164e78b54b44b904f1092 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Fri, 11 Sep 2020 02:50:58 -0700 Subject: [PATCH 2/6] fix conversion --- src/ocean/Assets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index 3a9cedc7..623796d0 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -499,7 +499,7 @@ export class Assets extends Instantiable { const txid = await datatokens.startOrder( providerData.dataToken, providerData.to, - String(providerData.numTokens), + this.web3.utils.fromWei(String(providerData.numTokens)), didZeroX(did), serviceIndex, mpAddress, From bedd07ed2a35ff79a92a8292c84969c58dc39ab9 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Fri, 11 Sep 2020 05:58:42 -0700 Subject: [PATCH 3/6] search for previous valid orders --- src/datatokens/Datatokens.ts | 54 ++++++++++++++++++++++-- src/ocean/Assets.ts | 29 +++++++------ src/utils/ConversionTypeHelpers.ts | 1 + test/integration/Marketplaceflow.test.ts | 16 +++++++ 4 files changed, 85 insertions(+), 15 deletions(-) diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index 0f4cd537..312760bd 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -6,6 +6,8 @@ import defaultDatatokensABI from '@oceanprotocol/contracts/artifacts/DataTokenTe import wordListDefault from '../data/words.json' import { TransactionReceipt } from 'web3-core' +import { time } from 'console' +import BigNumber from 'bignumber.js' /** * Provides a interface to DataTokens */ @@ -384,7 +386,7 @@ export class DataTokens { * @param {Number} serviceId * @param {String} mpFeeAddress * @param {String} mpFeePercentage - * @param {String} address + * @param {String} address consumer Address * @return {Promise} string */ public async startOrder( @@ -405,16 +407,62 @@ export class DataTokens { .startOrder( providerAddress, this.web3.utils.toWei(amount), - String(did), + did, String(serviceId), mpFeeAddress, this.web3.utils.toWei(mpFeePercentage) ) - .send({ from: address }) + .send({ from: address, gas: 600000 }) return trxReceipt } catch (e) { console.error(e) return null } } + + /** Search and return txid for a previous valid order with the same params + * @param {String} dataTokenAddress + * @param {String} providerAddress + * @param {String} amount + * @param {String} did + * @param {Number} serviceId + * @param {Number} timeout service timeout + * @param {String} address consumer Address + * @return {Promise} string + */ + public async getPreviousValidOrders( + dataTokenAddress: string, + providerAddress: string, + amount: string, + did: string, + serviceId: number, + timeout: number, + address: string + ): Promise { + const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { + from: address + }) + const events = await datatoken.getPastEvents('OrderStarted', { + fromBlock: 0, + toBlock: 'latest' + }) + for (let i = 0; i < events.length; i++) { + if ( + events[i].returnValues.did === did && + String(events[i].returnValues.amount) === String(amount) && + events[i].returnValues.receiver === providerAddress && + String(events[i].returnValues.serviceId) === String(serviceId) + ) { + const transaction = await this.web3.eth.getTransaction(events[i].transactionHash) + if (transaction.from === address) { + if (timeout === 0) return events[i].transactionHash + const blockDetails = await this.web3.eth.getBlock(events[i].blockHash) + const expiry = new BigNumber(blockDetails.timestamp).plus(timeout) + const unixTime = new BigNumber(Math.floor(Date.now() / 1000)) + if (unixTime.isLessThan(expiry)) return events[i].transactionHash + } + } + } + return null + } } diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index 623796d0..50404c75 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -477,25 +477,30 @@ export class Assets extends Instantiable { mpFeePercent ) if (!providerData) return null + const service = await this.getServiceByIndex(did, serviceIndex) + const previousOrder = await datatokens.getPreviousValidOrders( + providerData.dataToken, + providerData.to, + providerData.numTokens, + didZeroX(did), + serviceIndex, + service.attributes.main.timeout, + consumerAddress + ) + if (previousOrder) return previousOrder const balance = new BigNumber( await datatokens.balance(providerData.dataToken, consumerAddress) ) const totalCost = new BigNumber(providerData.totalCost) if (balance.isLessThanOrEqualTo(totalCost)) { - console.error('Not enough funds') - + console.error( + 'Not enough funds. Needed ' + + totalCost.toString() + + ' but balance is ' + + balance.toString() + ) return null } - console.log( - 'Balance:' + - balance.toString() + - '| dtCost:' + - providerData.dtCost.toString() + - '|Fees:' + - providerData.totalFee.toString() + - '|Total:' + - providerData.totalCost.toString() - ) const txid = await datatokens.startOrder( providerData.dataToken, providerData.to, diff --git a/src/utils/ConversionTypeHelpers.ts b/src/utils/ConversionTypeHelpers.ts index 331578d7..52015021 100644 --- a/src/utils/ConversionTypeHelpers.ts +++ b/src/utils/ConversionTypeHelpers.ts @@ -22,6 +22,7 @@ export function didTransformer(input = '', prefixOutput: boolean): string { // 0x + did:op: transformer export const didZeroX = (input: string): string => zeroX(didTransformer(input, false)) +export const didNoZeroX = (input: string): string => noZeroX(didTransformer(input, false)) // Shared functions function inputMatch( diff --git a/test/integration/Marketplaceflow.test.ts b/test/integration/Marketplaceflow.test.ts index c0ad435e..a998b743 100644 --- a/test/integration/Marketplaceflow.test.ts +++ b/test/integration/Marketplaceflow.test.ts @@ -170,6 +170,22 @@ describe('Marketplace flow', () => { ) }) }) + + it('Bob consumes same asset again, without paying', async () => { + const balanceBefore = await datatoken.balance(tokenAddress, bob.getId()) + await ocean.assets.order(ddo.id, accessService.type, bob.getId()).then(async (tx) => { + assert(tx != null) + await ocean.assets.download( + ddo.id, + tx, + tokenAddress, + bob, + './node_modules/my-datasets' + ) + }) + const balanceAfter = await datatoken.balance(tokenAddress, bob.getId()) + assert(balanceBefore === balanceAfter) + }) it('owner can list there assets', async () => { const assets = await ocean.assets.ownerAssets(alice.getId()) assert(assets.length > 0) From fc6a5156308d6ab82ebc7a53653d583535599830 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Wed, 16 Sep 2020 05:19:15 -0700 Subject: [PATCH 4/6] update contracts & provider --- .travis.yml | 2 +- package-lock.json | 6 +++--- package.json | 2 +- src/datatokens/Datatokens.ts | 16 +--------------- src/ocean/Assets.ts | 28 +++------------------------- src/ocean/Compute.ts | 2 -- 6 files changed, 9 insertions(+), 47 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1db2198d..201312d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ before_script: - git clone https://github.com/oceanprotocol/barge - cd barge - git checkout v3 - - export PROVIDER_VERSION=latest + - export PROVIDER_VERSION=v0.3.0 - bash -x start_ocean.sh --no-dashboard 2>&1 > start_ocean.log & - cd .. - sleep 300 diff --git a/package-lock.json b/package-lock.json index 5af2a978..ceda12b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -939,9 +939,9 @@ } }, "@oceanprotocol/contracts": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.4.1.tgz", - "integrity": "sha512-gc6bCt3pq9cpk1mYDKfsZhLlaM+8yQDFmOjtmT1KGXRmnTBcvmwCQXMrL5VohFaFi7Iqio3FZtuhYyRaEjikCw==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.4.2.tgz", + "integrity": "sha512-IKRUe60pcBcEmQhkpusSc+w2CIEHxmyNzth+VRU5Je6lrP6/XnDaFRHjeYbSy306I/WxLjma88S1xOn86BMCOA==" }, "@octokit/auth-token": { "version": "2.4.2", diff --git a/package.json b/package.json index 97f512f4..edb097e5 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "dependencies": { "@ethereum-navigator/navigator": "^0.5.0", - "@oceanprotocol/contracts": "^0.4.1", + "@oceanprotocol/contracts": "^0.4.2", "decimal.js": "^10.2.0", "fs": "0.0.1-security", "node-fetch": "^2.6.1", diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index 312760bd..e0e55d46 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -380,23 +380,19 @@ export class DataTokens { /** Start Order * @param {String} dataTokenAddress - * @param {String} providerAddress * @param {String} amount * @param {String} did * @param {Number} serviceId * @param {String} mpFeeAddress - * @param {String} mpFeePercentage * @param {String} address consumer Address * @return {Promise} string */ public async startOrder( dataTokenAddress: string, - providerAddress: string, amount: string, did: string, serviceId: number, mpFeeAddress: string, - mpFeePercentage: string, address: string ): Promise { const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { @@ -404,14 +400,7 @@ export class DataTokens { }) try { const trxReceipt = await datatoken.methods - .startOrder( - providerAddress, - this.web3.utils.toWei(amount), - did, - String(serviceId), - mpFeeAddress, - this.web3.utils.toWei(mpFeePercentage) - ) + .startOrder(this.web3.utils.toWei(amount), did, String(serviceId), mpFeeAddress) .send({ from: address, gas: 600000 }) return trxReceipt } catch (e) { @@ -422,7 +411,6 @@ export class DataTokens { /** Search and return txid for a previous valid order with the same params * @param {String} dataTokenAddress - * @param {String} providerAddress * @param {String} amount * @param {String} did * @param {Number} serviceId @@ -432,7 +420,6 @@ export class DataTokens { */ public async getPreviousValidOrders( dataTokenAddress: string, - providerAddress: string, amount: string, did: string, serviceId: number, @@ -450,7 +437,6 @@ export class DataTokens { if ( events[i].returnValues.did === did && String(events[i].returnValues.amount) === String(amount) && - events[i].returnValues.receiver === providerAddress && String(events[i].returnValues.serviceId) === String(serviceId) ) { const transaction = await this.web3.eth.getTransaction(events[i].transactionHash) diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index 50404c75..ebadd745 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -413,8 +413,7 @@ export class Assets extends Instantiable { did: string, serviceType: string, consumerAddress: string, - serviceIndex = -1, - mpFeePercent?: string + serviceIndex = -1 ): Promise { const res = await this.ocean.provider.initialize( did, @@ -424,19 +423,6 @@ export class Assets extends Instantiable { ) if (res === null) return null const providerData = JSON.parse(res) - const { datatokens } = this.ocean - const dtCost = new BigNumber(this.web3.utils.fromWei(String(providerData.numTokens))) - const totalFee = new BigNumber( - await datatokens.calculateTotalFee( - providerData.dataToken, - this.web3.utils.fromWei(String(providerData.numTokens)), - mpFeePercent, - consumerAddress - ) - ) - providerData.totalFee = totalFee.toString() - providerData.dtCost = dtCost.toString() - providerData.totalCost = dtCost.plus(totalFee).toString() return providerData } @@ -446,7 +432,6 @@ export class Assets extends Instantiable { * @param {String} serviceType * @param {String} consumerAddress * @param {Number} serviceIndex - * @param {String} mpFeePercent will be converted to Wei * @param {String} mpAddress mp fee collector address * @return {Promise} transactionHash of the payment */ @@ -455,7 +440,6 @@ export class Assets extends Instantiable { serviceType: string, consumerAddress: string, serviceIndex = -1, - mpFeePercent?: string, mpAddress?: string ): Promise { if (serviceIndex === -1) { @@ -465,22 +449,18 @@ export class Assets extends Instantiable { const service = await this.getServiceByIndex(did, serviceIndex) serviceType = service.type } - if (!mpFeePercent) mpFeePercent = '0' - if (!mpAddress) mpAddress = '0x000000000000000000000000000000000000dEaD' const { datatokens } = this.ocean try { const providerData = await this.initialize( did, serviceType, consumerAddress, - serviceIndex, - mpFeePercent + serviceIndex ) if (!providerData) return null const service = await this.getServiceByIndex(did, serviceIndex) const previousOrder = await datatokens.getPreviousValidOrders( providerData.dataToken, - providerData.to, providerData.numTokens, didZeroX(did), serviceIndex, @@ -491,7 +471,7 @@ export class Assets extends Instantiable { const balance = new BigNumber( await datatokens.balance(providerData.dataToken, consumerAddress) ) - const totalCost = new BigNumber(providerData.totalCost) + const totalCost = new BigNumber(providerData.numTokens) if (balance.isLessThanOrEqualTo(totalCost)) { console.error( 'Not enough funds. Needed ' + @@ -503,12 +483,10 @@ export class Assets extends Instantiable { } const txid = await datatokens.startOrder( providerData.dataToken, - providerData.to, this.web3.utils.fromWei(String(providerData.numTokens)), didZeroX(did), serviceIndex, mpAddress, - mpFeePercent, consumerAddress ) if (txid) return txid.transactionHash diff --git a/src/ocean/Compute.ts b/src/ocean/Compute.ts index f580e3de..597bc454 100644 --- a/src/ocean/Compute.ts +++ b/src/ocean/Compute.ts @@ -350,7 +350,6 @@ export class Compute extends Instantiable { serviceIndex: number, algorithmDid?: string, algorithmMeta?: MetadataAlgorithm, - mpFeePercent?: string, mpAddress?: string ): SubscribablePromise { return new SubscribablePromise(async (observer) => { @@ -384,7 +383,6 @@ export class Compute extends Instantiable { service.type, consumerAccount, -1, - mpFeePercent, mpAddress ) return order From 0b4417d264e59d9c24f56b3ea900a11bae881c1d Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Wed, 16 Sep 2020 05:44:26 -0700 Subject: [PATCH 5/6] fix tests --- src/datatokens/Datatokens.ts | 26 +------------------------- src/ocean/Assets.ts | 4 +++- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index e0e55d46..7843726e 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -353,31 +353,6 @@ export class DataTokens { return this.web3.utils.fromWei(amount) } - /** Calculate total fee - * @param {String} dataTokenAddress - * @param {String} amount - * @param {String} mpFeePercentage - * @param {String} address - * @return {Promise} string - */ - public async calculateTotalFee( - dataTokenAddress: string, - amount: string, - mpFeePercentage: string, - address: string - ): Promise { - const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { - from: address - }) - const totalFee = await datatoken.methods - .calculateTotalFee( - this.web3.utils.toWei(amount), - this.web3.utils.toWei(mpFeePercentage) - ) - .call() - return this.web3.utils.fromWei(totalFee) - } - /** Start Order * @param {String} dataTokenAddress * @param {String} amount @@ -398,6 +373,7 @@ export class DataTokens { const datatoken = new this.web3.eth.Contract(this.datatokensABI, dataTokenAddress, { from: address }) + if (!mpFeeAddress) mpFeeAddress = '0x0000000000000000000000000000000000000000' try { const trxReceipt = await datatoken.methods .startOrder(this.web3.utils.toWei(amount), did, String(serviceId), mpFeeAddress) diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index ebadd745..1036bccf 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -471,7 +471,9 @@ export class Assets extends Instantiable { const balance = new BigNumber( await datatokens.balance(providerData.dataToken, consumerAddress) ) - const totalCost = new BigNumber(providerData.numTokens) + const totalCost = new BigNumber( + this.web3.utils.fromWei(String(providerData.numTokens)) + ) if (balance.isLessThanOrEqualTo(totalCost)) { console.error( 'Not enough funds. Needed ' + From b5c71f31a893b53b6ff2ce3e35beeb539976cf66 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Wed, 16 Sep 2020 05:47:06 -0700 Subject: [PATCH 6/6] codacy fix --- src/ocean/Assets.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index 1036bccf..2b023041 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -492,11 +492,10 @@ export class Assets extends Instantiable { consumerAddress ) if (txid) return txid.transactionHash - else return null } catch (e) { console.error(e) - return null } + return null } // marketplace flow