diff --git a/package-lock.json b/package-lock.json index ac2f4d58..4db3faf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,13 +14,14 @@ "cross-fetch": "^3.1.4", "crypto-js": "^4.0.0", "decimal.js": "^10.2.1", + "ethereumjs-util": "^7.1.3", "fs": "0.0.1-security", "lzma": "^2.3.2", "node-abort-controller": "^2.0.0", "save-file": "^2.3.1", "underscore": "^1.13.1", "uuid": "^8.3.2", - "web3": "^1.6.1", + "web3": ">=1.3.5", "web3-core": "^1.6.1", "web3-eth-contract": "^1.6.1" }, @@ -7130,6 +7131,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -7140,6 +7142,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7148,6 +7151,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11227,7 +11231,104 @@ "bundleDependencies": [ "source-map-support", "yargs", - "ethereumjs-util" + "ethereumjs-util", + "@types/bn.js", + "@types/node", + "@types/pbkdf2", + "@types/secp256k1", + "ansi-regex", + "ansi-styles", + "base-x", + "blakejs", + "bn.js", + "brorand", + "browserify-aes", + "bs58", + "bs58check", + "buffer-from", + "buffer-xor", + "camelcase", + "cipher-base", + "cliui", + "color-convert", + "color-name", + "create-hash", + "create-hmac", + "cross-spawn", + "decamelize", + "elliptic", + "emoji-regex", + "end-of-stream", + "ethereum-cryptography", + "ethjs-util", + "evp_bytestokey", + "execa", + "find-up", + "get-caller-file", + "get-stream", + "hash-base", + "hash.js", + "hmac-drbg", + "inherits", + "invert-kv", + "is-fullwidth-code-point", + "is-hex-prefixed", + "is-stream", + "isexe", + "keccak", + "lcid", + "locate-path", + "map-age-cleaner", + "md5.js", + "mem", + "mimic-fn", + "minimalistic-assert", + "minimalistic-crypto-utils", + "nice-try", + "node-addon-api", + "node-gyp-build", + "npm-run-path", + "once", + "os-locale", + "p-defer", + "p-finally", + "p-is-promise", + "p-limit", + "p-locate", + "p-try", + "path-exists", + "path-key", + "pbkdf2", + "pump", + "randombytes", + "readable-stream", + "require-directory", + "require-main-filename", + "ripemd160", + "rlp", + "safe-buffer", + "scrypt-js", + "secp256k1", + "semver", + "set-blocking", + "setimmediate", + "sha.js", + "shebang-command", + "shebang-regex", + "signal-exit", + "source-map", + "string_decoder", + "string-width", + "strip-ansi", + "strip-eof", + "strip-hex-prefix", + "util-deprecate", + "which", + "which-module", + "wrap-ansi", + "wrappy", + "y18n", + "yargs-parser" ], "dependencies": { "ethereumjs-util": "6.2.1", @@ -25364,6 +25465,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25380,6 +25482,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -25388,6 +25491,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -25402,6 +25506,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -25412,12 +25517,14 @@ "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -25563,6 +25670,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -25593,6 +25701,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -25610,6 +25719,7 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } @@ -31109,6 +31219,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -31118,12 +31229,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -45334,6 +45447,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -45343,12 +45457,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -45357,6 +45473,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -45364,12 +45481,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -45496,7 +45615,8 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yaeti": { "version": "0.0.6", @@ -45518,6 +45638,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -45531,7 +45652,8 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", diff --git a/package.json b/package.json index b6839f49..b139be40 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "cross-fetch": "^3.1.4", "crypto-js": "^4.0.0", "decimal.js": "^10.2.1", + "ethereumjs-util": "^7.1.3", "fs": "0.0.1-security", "lzma": "^2.3.2", "node-abort-controller": "^2.0.0", diff --git a/src/factories/NFTFactory.ts b/src/factories/NFTFactory.ts index a86301b1..e89c4760 100644 --- a/src/factories/NFTFactory.ts +++ b/src/factories/NFTFactory.ts @@ -26,11 +26,14 @@ interface Template { export interface TokenOrder { tokenAddress: string consumer: string - amount: string | number serviceIndex: number providerFeeAddress: string providerFeeToken: string providerFeeAmount: string + v: number // v of provider signed message + r: string // r of provider signed message + s: string // s of provider signed message + providerDatas: string // data encoded by provider } export interface NftCreateData { @@ -553,7 +556,7 @@ export class NftFactory { if (templateIndex === 0) { throw new Error(`Template index cannot be ZERO`) } - if ((await this.getNFTTemplate(templateIndex)).isActive === true) { + if ((await this.getTokenTemplate(templateIndex)).isActive === true) { throw new Error(`Template is already active`) } diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 6e8980d3..c2d6873d 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -18,11 +18,14 @@ interface Roles { export interface OrderParams { consumer: string - amount: string serviceIndex: number providerFeeAddress: string providerFeeToken: string providerFeeAmount: string + v: number // v of provider signed message + r: string // r of provider signed message + s: string // s of provider signed message + providerDatas: string // data encoded by provider } export interface DispenserParams { @@ -833,11 +836,14 @@ export class Datatoken { * @param {String} dtAddress Datatoken address * @param {String} address User address which calls * @param {String} consumer Consumer Address - * @param {String} amount Amount of tokens that is going to be transfered * @param {Number} serviceIndex Service index in the metadata * @param {String} providerFeeAddress Consume marketplace fee address * @param {String} providerFeeToken address of the token marketplace wants to add fee on top * @param {String} providerFeeAmount amount of feeToken to be transferred to mpFeeAddress on top, will be converted to WEI + * @param {String} v // v of provider signed message + * @param {String} r // r of provider signed message + * @param {String} s // s of provider signed message + * @param {String} providerData // data encoded by provider * @param {Contract} contractInstance optional contract instance * @return {Promise} */ @@ -845,11 +851,14 @@ export class Datatoken { dtAddress: string, address: string, consumer: string, - amount: string, serviceIndex: number, providerFeeAddress: string, providerFeeToken: string, providerFeeAmount: string, + v: number, + r: string, + s: string, + providerDatas: string, contractInstance?: Contract ): Promise { const dtContract = @@ -862,11 +871,14 @@ export class Datatoken { estGas = await dtContract.methods .startOrder( consumer, - this.web3.utils.toWei(amount), serviceIndex, providerFeeAddress, providerFeeToken, - this.web3.utils.toWei(providerFeeAmount) + this.web3.utils.toWei(providerFeeAmount), + v, + r, + s, + providerDatas ) .estimateGas({ from: address }, (err, estGas) => (err ? gasLimitDefault : estGas)) } catch (e) { @@ -879,23 +891,28 @@ export class Datatoken { * @param {String} dtAddress Datatoken address * @param {String} address User address which calls * @param {String} consumer Consumer Address - * @param {String} amount Amount of tokens that is going to be transfered * @param {Number} serviceIndex Service index in the metadata * @param {String} providerFeeAddress Consume marketplace fee address * @param {String} providerFeeToken address of the token marketplace wants to add fee on top * @param {String} providerFeeAmount amount of feeToken to be transferred to mpFeeAddress on top, will be converted to WEI - + * @param {String} v // v of provider signed message + * @param {String} r // r of provider signed message + * @param {String} s // s of provider signed message + * @param {String} providerData // data encoded by provider * @return {Promise} string */ public async startOrder( dtAddress: string, address: string, consumer: string, - amount: string, serviceIndex: number, providerFeeAddress: string, providerFeeToken: string, - providerFeeAmount: string + providerFeeAmount: string, + v: number, + r: string, + s: string, + providerDatas: string ): Promise { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, dtAddress) if (!providerFeeAddress) @@ -906,22 +923,28 @@ export class Datatoken { dtAddress, address, consumer, - amount, serviceIndex, providerFeeAddress, providerFeeToken, providerFeeAmount, + v, + r, + s, + providerDatas, dtContract ) const trxReceipt = await dtContract.methods .startOrder( consumer, - this.web3.utils.toWei(amount), serviceIndex, providerFeeAddress, providerFeeToken, - this.web3.utils.toWei(providerFeeAmount) + this.web3.utils.toWei(providerFeeAmount), + v, + r, + s, + providerDatas ) .send({ from: address, diff --git a/test/unit/NftFactory.test.ts b/test/unit/NftFactory.test.ts index b2f3bc2d..6c5fd8e4 100644 --- a/test/unit/NftFactory.test.ts +++ b/test/unit/NftFactory.test.ts @@ -2,6 +2,7 @@ import { assert, expect } from 'chai' import { AbiItem } from 'web3-utils/types' import { TestContractHandler } from '../TestContractHandler' import Web3 from 'web3' +import { ecsign } from 'ethereumjs-util' import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' import SideStaking from '@oceanprotocol/contracts/artifacts/contracts/pools/ssContracts/SideStaking.sol/SideStaking.json' @@ -20,6 +21,13 @@ import { import { ZERO_ADDRESS } from '../../src/utils' const web3 = new Web3('http://127.0.0.1:8545') +function signMessage(message, privateKey) { + const { v, r, s } = ecsign( + Buffer.from(message.slice(2), 'hex'), + Buffer.from(privateKey, 'hex') + ) + return { v, r, s } +} describe('Nft Factory test', () => { let factoryOwner: string @@ -375,24 +383,42 @@ describe('Nft Factory test', () => { expect(await dtContract.methods.balanceOf(user2).call()).to.equal(dtAmount) expect(await dtContract2.methods.balanceOf(user2).call()).to.equal(dtAmount) + const providerData = JSON.stringify({ timeout: 0 }) + const message = web3.utils.soliditySha3( + { t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) }, + { t: 'address', v: user3 }, + { t: 'address', v: '0x0000000000000000000000000000000000000000' }, + { t: 'uint256', v: '1' } + ) + const signedMessage = signMessage( + message, + '7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6' + ) + console.log('signedMessage', signedMessage) const orders: TokenOrder[] = [ { tokenAddress: dtAddress, consumer: consumer, - amount: dtAmount, serviceIndex: serviceIndex, providerFeeAddress: consumeFeeAddress, providerFeeToken: consumeFeeToken, - providerFeeAmount: consumeFeeAmount + providerFeeAmount: consumeFeeAmount, + v: signedMessage.v, + r: signedMessage.r.toString(), + s: signedMessage.s.toString(), + providerDatas: web3.utils.toHex(web3.utils.asciiToHex(providerData)) }, { tokenAddress: dtAddress2, consumer: consumer, - amount: dtAmount, serviceIndex: serviceIndex, providerFeeAddress: consumeFeeAddress, providerFeeToken: consumeFeeToken, - providerFeeAmount: consumeFeeAmount + providerFeeAmount: consumeFeeAmount, + v: signedMessage.v, + r: signedMessage.r.toString(), + s: signedMessage.s.toString(), + providerDatas: web3.utils.toHex(web3.utils.asciiToHex(providerData)) } ] diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 3a0f9503..58b238f5 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -1,5 +1,6 @@ import { assert } from 'chai' import Web3 from 'web3' +import { ecsign } from 'ethereumjs-util' import ERC20TemplateEnterprise from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json' import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' @@ -19,6 +20,14 @@ import { FreCreationParams, FreOrderParams } from '../../../src/interfaces' const web3 = new Web3('http://127.0.0.1:8545') +function signMessage(message, privateKey) { + const { v, r, s } = ecsign( + Buffer.from(message.slice(2), 'hex'), + Buffer.from(privateKey, 'hex') + ) + return { v, r, s } +} + describe('Datatoken', () => { let nftOwner: string let user1: string @@ -340,15 +349,30 @@ describe('Datatoken', () => { 'User2 does not hold 0 datatokens' ) + const providerData = JSON.stringify({ timeout: 0 }) + const message = web3.utils.soliditySha3( + { t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) }, + { t: 'address', v: user3 }, + { t: 'address', v: '0x0000000000000000000000000000000000000000' }, + { t: 'uint256', v: '1' } + ) + const signedMessage = signMessage( + message, + '7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6' + ) + const order = await datatoken.startOrder( datatokenAddress, user1, user2, - '1', 1, user3, '0x0000000000000000000000000000000000000000', - '0' + '0', + signedMessage.v, + signedMessage.r.toString(), + signedMessage.s.toString(), + web3.utils.toHex(web3.utils.asciiToHex(providerData)) ) assert(order !== null) @@ -366,13 +390,28 @@ describe('Datatoken', () => { }) it('#buyFromDispenserAndOrder- Enterprise method', async () => { + const providerData = JSON.stringify({ timeout: 0 }) + const message = web3.utils.soliditySha3( + { t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) }, + { t: 'address', v: user3 }, + { t: 'address', v: '0x0000000000000000000000000000000000000000' }, + { t: 'uint256', v: '1' } + ) + const signedMessage = signMessage( + message, + '7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6' + ) + const order: OrderParams = { consumer: user1, - amount: '1', serviceIndex: 1, providerFeeAddress: user1, providerFeeToken: '0x0000000000000000000000000000000000000000', - providerFeeAmount: '0' + providerFeeAmount: '0', + v: signedMessage.v, + r: signedMessage.r.toString(), + s: signedMessage.s.toString(), + providerDatas: web3.utils.toHex(web3.utils.asciiToHex(providerData)) } const buyFromDispenseTx = await datatoken.buyFromDispenserAndOrder( @@ -385,13 +424,28 @@ describe('Datatoken', () => { }) it('#buyFromFreAndOrder - Enterprise method ', async () => { + const providerData = JSON.stringify({ timeout: 0 }) + const message = web3.utils.soliditySha3( + { t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) }, + { t: 'address', v: user3 }, + { t: 'address', v: '0x0000000000000000000000000000000000000000' }, + { t: 'uint256', v: '1' } + ) + const signedMessage = signMessage( + message, + '7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6' + ) + const order: OrderParams = { consumer: user1, - amount: '1', serviceIndex: 1, providerFeeAddress: user1, providerFeeToken: '0x0000000000000000000000000000000000000000', - providerFeeAmount: '0' + providerFeeAmount: '0', + v: signedMessage.v, + r: signedMessage.r.toString(), + s: signedMessage.s.toString(), + providerDatas: web3.utils.toHex(web3.utils.asciiToHex(providerData)) } const fre: FreOrderParams = { diff --git a/test/unit/tokens/Nft.test.ts b/test/unit/tokens/Nft.test.ts index 4fd52bdc..6c3ea160 100644 --- a/test/unit/tokens/Nft.test.ts +++ b/test/unit/tokens/Nft.test.ts @@ -13,7 +13,6 @@ import { TestContractHandler } from '../../TestContractHandler' import { NftFactory, NftCreateData } from '../../../src/factories/NFTFactory' import { Nft } from '../../../src/tokens/NFT' import { AbiItem } from 'web3-utils' -const constants = require('../../helpers/constants') const web3 = new Web3('http://127.0.0.1:8545') @@ -333,9 +332,9 @@ describe('NFT', () => { const metaDataDecryptorUrl = 'http://myprovider:8030' const metaDataDecryptorAddress = '0x123' const metaDataState = 1 - const data = web3.utils.asciiToHex(constants.blob[0]) - const dataHash = web3.utils.asciiToHex(constants.blob[0]) - const flags = web3.utils.asciiToHex(constants.blob[0]) + const data = web3.utils.asciiToHex(user2) + const dataHash = web3.utils.asciiToHex(user2) + const flags = web3.utils.asciiToHex(user2) assert( (await nftDatatoken.getNftPermissions(nftAddress, user1)).updateMetadata === true ) @@ -359,9 +358,9 @@ describe('NFT', () => { const metaDataDecryptorUrl = 'http://myprovider:8030' const metaDataDecryptorAddress = '0x123' const metaDataState = 1 - const data = web3.utils.asciiToHex(constants.blob[0]) - const dataHash = web3.utils.asciiToHex(constants.blob[0]) - const flags = web3.utils.asciiToHex(constants.blob[0]) + const data = web3.utils.asciiToHex(user2) + const dataHash = web3.utils.asciiToHex(user2) + const flags = web3.utils.asciiToHex(user2) assert( (await nftDatatoken.getNftPermissions(nftAddress, user3)).updateMetadata === false )