diff --git a/package-lock.json b/package-lock.json index 1e8eb2f5..e069e570 100644 --- a/package-lock.json +++ b/package-lock.json @@ -939,9 +939,9 @@ } }, "@oceanprotocol/contracts": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.5.1.tgz", - "integrity": "sha512-bt5uwh79D759H6O4bAv+ycGdZQISFAxi65cqIygzA9hwsu29+GuOLwu1mxrzl2lVNLs6Emxo7TaDv0jAoyqnCg==" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.5.3.tgz", + "integrity": "sha512-gJ8qQACJgxOPIrPE0OFQ09iYXBAisOGg56EmelQlsMUgp0yY0DKgBntDP83S/Ho1yBjGygqfxCjQrPH63hh/PA==" }, "@octokit/auth-token": { "version": "2.4.2", diff --git a/package.json b/package.json index aa18e4d3..ba652d38 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "dependencies": { "@ethereum-navigator/navigator": "^0.5.0", - "@oceanprotocol/contracts": "^0.5.1", + "@oceanprotocol/contracts": "^0.5.3", "decimal.js": "^10.2.0", "fs": "0.0.1-security", "lzma": "^2.3.2", diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index 65b585e5..bfe34f98 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -343,6 +343,7 @@ export class DataTokens { /** Start Order * @param {String} dataTokenAddress + * @param {String} consumer consumer Address * @param {String} amount * @param {Number} serviceId * @param {String} mpFeeAddress @@ -351,6 +352,7 @@ export class DataTokens { */ public async startOrder( dataTokenAddress: string, + consumer: string, amount: string, serviceId: number, mpFeeAddress: string, @@ -362,7 +364,12 @@ export class DataTokens { if (!mpFeeAddress) mpFeeAddress = '0x0000000000000000000000000000000000000000' try { const trxReceipt = await datatoken.methods - .startOrder(this.web3.utils.toWei(amount), String(serviceId), mpFeeAddress) + .startOrder( + consumer, + this.web3.utils.toWei(amount), + String(serviceId), + mpFeeAddress + ) .send({ from: address, gas: 600000 }) return trxReceipt } catch (e) { diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index a0df988e..1d3232a4 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -38,6 +38,8 @@ export interface Order { amount: string timestamp: number transactionHash: string + consumer: string + payer: string did?: string serviceId?: number serviceType?: string @@ -462,19 +464,22 @@ export class Assets extends Instantiable { * Orders & pays for a service * @param {String} did * @param {String} serviceType - * @param {String} consumerAddress + * @param {String} payerAddress * @param {Number} serviceIndex * @param {String} mpAddress mp fee collector address + * @param {String} consumerAddress Optionally, if the consumer is another address than payer * @return {Promise} transactionHash of the payment */ public async order( did: string, serviceType: string, - consumerAddress: string, + payerAddress: string, serviceIndex = -1, - mpAddress?: string + mpAddress?: string, + consumerAddress?: string ): Promise { let service + if (!consumerAddress) consumerAddress = payerAddress if (serviceIndex === -1) { service = await this.getServiceByType(did, serviceType) serviceIndex = service.index @@ -487,7 +492,7 @@ export class Assets extends Instantiable { const providerData = await this.initialize( did, serviceType, - consumerAddress, + payerAddress, serviceIndex, service.serviceEndpoint ) @@ -502,7 +507,7 @@ export class Assets extends Instantiable { ) if (previousOrder) return previousOrder const balance = new BigNumber( - await datatokens.balance(providerData.dataToken, consumerAddress) + await datatokens.balance(providerData.dataToken, payerAddress) ) const totalCost = new BigNumber(String(providerData.numTokens)) if (balance.isLessThan(totalCost)) { @@ -516,10 +521,11 @@ export class Assets extends Instantiable { } const txid = await datatokens.startOrder( providerData.dataToken, + consumerAddress, String(providerData.numTokens), serviceIndex, mpAddress, - consumerAddress + payerAddress ) if (txid) return txid.transactionHash } catch (e) { @@ -605,26 +611,32 @@ export class Assets extends Instantiable { fromBlock?: number ): Promise { const results: Order[] = [] - const address = this.web3.utils.toChecksumAddress(account.getId()) + const address = account.getId().toLowerCase() const events = await this.web3.eth.getPastLogs({ topics: [ - ['0x24c95b9bea47f62df4b9eea32c98c597eccfc5cac47f8477647be875ad925eee', address] + [ + '0xe1c4fa794edfa8f619b8257a077398950357b9c6398528f94480307352f9afcc', + null, + '0x000000000000000000000000' + address.substring(address.length - 40) + ] ], fromBlock: fromBlock || 0 }) for (let i = 0; i < events.length; i++) { - const blockDetails = await this.web3.eth.getBlock(events[i].blockNumber) const order: Order = { dtAddress: events[i].address, - timestamp: parseInt(String(blockDetails.timestamp)), + timestamp: 0, transactionHash: events[i].transactionHash, - amount: null + amount: null, + consumer: '0x' + events[i].topics[1].substring(events[i].topics[1].length - 40), + payer: '0x' + events[i].topics[2].substring(events[i].topics[2].length - 40) } const params = this.web3.eth.abi.decodeParameters( ['uint256', 'uint256', 'uint256', 'uint256'], events[i].data ) order.serviceId = parseInt(params[1]) + order.timestamp = parseInt(params[2]) order.amount = this.web3.utils.fromWei(params[0]) order.did = didPrefixed(didNoZeroX(order.dtAddress)) const service = await this.getServiceByIndex(order.did, order.serviceId) diff --git a/src/utils/ConfigHelper.ts b/src/utils/ConfigHelper.ts index dd85c9b1..fa37fc41 100644 --- a/src/utils/ConfigHelper.ts +++ b/src/utils/ConfigHelper.ts @@ -44,13 +44,13 @@ const configs: ConfigHelperConfig[] = [ networkId: 4, network: 'rinkeby', nodeUri: 'https://rinkeby.infura.io/v3', - factoryAddress: '0x241D0f315d2bfe32b90282e6863AC22A309EbFa0', + factoryAddress: '0x3fd7A00106038Fb5c802c6d63fa7147Fe429E83a', oceanTokenAddress: '0x8967BCF84170c91B0d24D4302C2376283b0B3a07', metadataStoreUri: 'https://aquarius.rinkeby.v3.dev-ocean.com', providerUri: 'https://provider.rinkeby.v3.dev-ocean.com', - poolFactoryAddress: '0xf32E0784F5D127471883aF938c50349A97aF7085', - fixedRateExchangeAddress: '0x223B65841d5BAE99c615D0Da7980b2Fc0aFF1dB2', - metadataContractAddress: '0x0220D0b4FfCC4A14C7601215aA23da06d5b1c921' + poolFactoryAddress: '0x53eDF9289B0898e1652Ce009AACf8D25fA9A42F8', + fixedRateExchangeAddress: '0xeD1DfC5F3a589CfC4E8B91C1fbfC18FC6699Fbde', + metadataContractAddress: '0x2C63bf697f74C72CFB727Fb5eB8e6266cE341e13' }, { networkId: 1,