1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00

integration tests publish all methods (#1197)

* added pool fixed rate and dispenser publish

* add validate method update publish tests

* update tests asset metadata

* update validate method

* fix lint

* update validate ussage

* send metadata to validate as object and removed some console logs

* fixed validate method update publish all tests

* fix validate aqua method

* update provider url

* update service timeout and add doc for validate method

* add MetadataProofs

Co-authored-by: alexcos20 <alex.coseru@gmail.com>
This commit is contained in:
Bogdan Fazakas 2022-01-07 11:17:04 +02:00 committed by GitHub
parent 4dc8898bad
commit 04d850b6d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 459 additions and 180 deletions

219
package-lock.json generated
View File

@ -3038,7 +3038,7 @@
"node_modules/@oceanprotocol/contracts": {
"name": "hardhat-project",
"version": "v1.0.0-alpha.1",
"resolved": "git+ssh://git@github.com/oceanprotocol/contracts.git#25ca73bbe44bf6d1782e971b75a42e5ba65f197b",
"resolved": "git+ssh://git@github.com/oceanprotocol/contracts.git#36e8bf296163690a23cfe012c4468caba4504709",
"dependencies": {
"@openzeppelin/contracts": "^4.3.3",
"@openzeppelin/test-helpers": "^0.5.15",
@ -3638,14 +3638,14 @@
}
},
"node_modules/@truffle/contract": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.1.tgz",
"integrity": "sha512-KVpG9alKxdNzWOcRN97crZXXmmnnShq1SkM9hQN2fOckszzrmy6ctOhnZKNAb8tzfHBgODDCmiGQbTqaYizcrA==",
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.2.tgz",
"integrity": "sha512-w/iyB5dZ3KnIuvX1dqD1Z1SWFahT9/nvA1VAsK+eIy+zvtI1phx365uV75LdIoyeBtR1GmbqAO4F7ZLSfjkP+w==",
"dependencies": {
"@ensdomains/ensjs": "^2.0.1",
"@truffle/blockchain-utils": "^0.0.31",
"@truffle/contract-schema": "^3.4.4",
"@truffle/debug-utils": "^6.0.2",
"@truffle/debug-utils": "^6.0.3",
"@truffle/error": "^0.0.14",
"@truffle/interface-adapter": "^0.5.8",
"bignumber.js": "^7.2.1",
@ -3695,9 +3695,9 @@
}
},
"node_modules/@truffle/contract/node_modules/@types/node": {
"version": "12.20.38",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.38.tgz",
"integrity": "sha512-NxmtBRGipjx1B225OeMdI+CQmLbYqvvmYbukDTJGDgzIDgPQ1EcjGmYxGhOk5hTBqeB558S6RgHSpq2iiqifAQ=="
"version": "12.20.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz",
"integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q=="
},
"node_modules/@truffle/contract/node_modules/cacheable-request": {
"version": "6.1.0",
@ -4133,16 +4133,16 @@
}
},
"node_modules/@truffle/debug-utils": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.2.tgz",
"integrity": "sha512-gMZ2IHPS9cvWGinUwVMoZedOYJz4sSekUXGC5FQkBnR0XDVriPmuja4rdgXhkA9EFSqZdXu4JAL8IiEHp/1YIw==",
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.3.tgz",
"integrity": "sha512-wxvZqvHIBw9wJHtSpUMJTku8sHpC0VbP0gLyV5+NVa/rn6CvVGtf0MyoDZGS4FDyhO1hui+bzzoQftoRy7jWyA==",
"dependencies": {
"@truffle/codec": "^0.11.21",
"@trufflesuite/chromafi": "^2.2.2",
"bn.js": "^5.1.3",
"chalk": "^2.4.2",
"debug": "^4.3.1",
"highlightjs-solidity": "^2.0.2"
"highlightjs-solidity": "^2.0.3"
}
},
"node_modules/@truffle/debug-utils/node_modules/bn.js": {
@ -4230,9 +4230,9 @@
}
},
"node_modules/@truffle/interface-adapter/node_modules/@types/node": {
"version": "12.20.38",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.38.tgz",
"integrity": "sha512-NxmtBRGipjx1B225OeMdI+CQmLbYqvvmYbukDTJGDgzIDgPQ1EcjGmYxGhOk5hTBqeB558S6RgHSpq2iiqifAQ=="
"version": "12.20.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz",
"integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q=="
},
"node_modules/@truffle/interface-adapter/node_modules/bignumber.js": {
"version": "9.0.2",
@ -7131,7 +7131,6 @@
"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",
@ -7142,7 +7141,6 @@
"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"
}
@ -7151,7 +7149,6 @@
"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"
},
@ -7422,9 +7419,9 @@
}
},
"node_modules/core-js-pure": {
"version": "3.20.0",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.0.tgz",
"integrity": "sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==",
"version": "3.20.2",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz",
"integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==",
"hasInstallScript": true,
"peer": true,
"funding": {
@ -11231,104 +11228,7 @@
"bundleDependencies": [
"source-map-support",
"yargs",
"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"
"ethereumjs-util"
],
"dependencies": {
"ethereumjs-util": "6.2.1",
@ -12660,9 +12560,9 @@
}
},
"node_modules/hardhat-contract-sizer": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.2.0.tgz",
"integrity": "sha512-H9YS935e9FE/gdiZN++/Eet34fkBHSLB4JpeOx7LMRZFneMM5WOrcIYE392hzG45FvA2Bfgw1jhoFi5/Ybr50w==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.3.0.tgz",
"integrity": "sha512-hRUwn5PhNWPO1t0ehtlDhEtP8YzzwCB+NNEdt6p+ZQ2bnq9rSgAjMsybSeOYt/ohen3kH31Pqm0hK0ies5/1tA==",
"dependencies": {
"cli-table3": "^0.6.0",
"colors": "^1.4.0"
@ -25465,7 +25365,6 @@
"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",
@ -25482,7 +25381,6 @@
"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"
}
@ -25491,7 +25389,6 @@
"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"
},
@ -25506,7 +25403,6 @@
"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"
},
@ -25517,14 +25413,12 @@
"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==",
"dev": true
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"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"
},
@ -25670,7 +25564,6 @@
"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"
}
@ -25701,7 +25594,6 @@
"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",
@ -25719,7 +25611,6 @@
"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"
}
@ -27854,7 +27745,7 @@
}
},
"@oceanprotocol/contracts": {
"version": "git+ssh://git@github.com/oceanprotocol/contracts.git#25ca73bbe44bf6d1782e971b75a42e5ba65f197b",
"version": "git+ssh://git@github.com/oceanprotocol/contracts.git#36e8bf296163690a23cfe012c4468caba4504709",
"from": "@oceanprotocol/contracts@github:oceanprotocol/contracts#v4main_postaudit",
"requires": {
"@openzeppelin/contracts": "^4.3.3",
@ -28384,14 +28275,14 @@
}
},
"@truffle/contract": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.1.tgz",
"integrity": "sha512-KVpG9alKxdNzWOcRN97crZXXmmnnShq1SkM9hQN2fOckszzrmy6ctOhnZKNAb8tzfHBgODDCmiGQbTqaYizcrA==",
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.2.tgz",
"integrity": "sha512-w/iyB5dZ3KnIuvX1dqD1Z1SWFahT9/nvA1VAsK+eIy+zvtI1phx365uV75LdIoyeBtR1GmbqAO4F7ZLSfjkP+w==",
"requires": {
"@ensdomains/ensjs": "^2.0.1",
"@truffle/blockchain-utils": "^0.0.31",
"@truffle/contract-schema": "^3.4.4",
"@truffle/debug-utils": "^6.0.2",
"@truffle/debug-utils": "^6.0.3",
"@truffle/error": "^0.0.14",
"@truffle/interface-adapter": "^0.5.8",
"bignumber.js": "^7.2.1",
@ -28426,9 +28317,9 @@
}
},
"@types/node": {
"version": "12.20.38",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.38.tgz",
"integrity": "sha512-NxmtBRGipjx1B225OeMdI+CQmLbYqvvmYbukDTJGDgzIDgPQ1EcjGmYxGhOk5hTBqeB558S6RgHSpq2iiqifAQ=="
"version": "12.20.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz",
"integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q=="
},
"cacheable-request": {
"version": "6.1.0",
@ -28792,16 +28683,16 @@
}
},
"@truffle/debug-utils": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.2.tgz",
"integrity": "sha512-gMZ2IHPS9cvWGinUwVMoZedOYJz4sSekUXGC5FQkBnR0XDVriPmuja4rdgXhkA9EFSqZdXu4JAL8IiEHp/1YIw==",
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.3.tgz",
"integrity": "sha512-wxvZqvHIBw9wJHtSpUMJTku8sHpC0VbP0gLyV5+NVa/rn6CvVGtf0MyoDZGS4FDyhO1hui+bzzoQftoRy7jWyA==",
"requires": {
"@truffle/codec": "^0.11.21",
"@trufflesuite/chromafi": "^2.2.2",
"bn.js": "^5.1.3",
"chalk": "^2.4.2",
"debug": "^4.3.1",
"highlightjs-solidity": "^2.0.2"
"highlightjs-solidity": "^2.0.3"
},
"dependencies": {
"bn.js": {
@ -28887,9 +28778,9 @@
}
},
"@types/node": {
"version": "12.20.38",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.38.tgz",
"integrity": "sha512-NxmtBRGipjx1B225OeMdI+CQmLbYqvvmYbukDTJGDgzIDgPQ1EcjGmYxGhOk5hTBqeB558S6RgHSpq2iiqifAQ=="
"version": "12.20.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz",
"integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q=="
},
"bignumber.js": {
"version": "9.0.2",
@ -31219,7 +31110,6 @@
"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",
@ -31229,14 +31119,12 @@
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"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"
}
@ -31464,9 +31352,9 @@
}
},
"core-js-pure": {
"version": "3.20.0",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.0.tgz",
"integrity": "sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==",
"version": "3.20.2",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz",
"integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==",
"peer": true
},
"core-util-is": {
@ -36087,9 +35975,9 @@
}
},
"hardhat-contract-sizer": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.2.0.tgz",
"integrity": "sha512-H9YS935e9FE/gdiZN++/Eet34fkBHSLB4JpeOx7LMRZFneMM5WOrcIYE392hzG45FvA2Bfgw1jhoFi5/Ybr50w==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.3.0.tgz",
"integrity": "sha512-hRUwn5PhNWPO1t0ehtlDhEtP8YzzwCB+NNEdt6p+ZQ2bnq9rSgAjMsybSeOYt/ohen3kH31Pqm0hK0ies5/1tA==",
"requires": {
"cli-table3": "^0.6.0",
"colors": "^1.4.0"
@ -45447,7 +45335,6 @@
"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",
@ -45457,14 +45344,12 @@
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"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"
}
@ -45473,7 +45358,6 @@
"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"
}
@ -45481,14 +45365,12 @@
"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==",
"dev": true
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"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"
}
@ -45615,8 +45497,7 @@
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yaeti": {
"version": "0.0.6",
@ -45638,7 +45519,6 @@
"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",
@ -45652,8 +45532,7 @@
"yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
},
"yargs-unparser": {
"version": "2.0.0",

View File

@ -32,6 +32,7 @@
"test:nftDt": "mocha --config=test/unit/.mocharc.json --node-env=test --exit 'test/unit/Nft.test.ts'",
"test:factory": "mocha --config=test/unit/.mocharc.json --node-env=test --exit 'test/unit/NftFactory.test.ts'",
"test:router": "mocha --config=test/unit/.mocharc.json --node-env=test --exit 'test/unit/pools/Router.test.ts'",
"test:publishAll": "mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/PublishFlows.test.ts'",
"test:unit": "mocha --config=test/unit/.mocharc.json --node-env=test --exit 'test/unit/**/*.test.ts'",
"test:unit:cover": "nyc --report-dir coverage/unit npm run test:unit",
"test:integration": "mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/**/*.test.ts'",

View File

@ -131,3 +131,16 @@ export interface Metadata {
*/
additionalInformation?: any
}
export interface MetadataProof {
validatorAddress?: string
r?: string
s?: string
v?: number
}
export interface ValidateMetadata {
valid: Boolean
errors?: Object
hash?: string
proof?: MetadataProof
}

View File

@ -121,9 +121,9 @@ export interface Service {
/**
* Describing how long the service can be used after consumption is initiated.
* @type {string}
* @type {number}
*/
timeout: string
timeout: number
/**
* Service friendly name

View File

@ -1,5 +1,6 @@
import { LoggerInstance } from '../utils'
import { Asset, DDO } from '../@types/'
import { Asset, DDO, Metadata, ValidateMetadata } from '../@types/'
import { json } from 'stream/consumers'
export class Aquarius {
public aquariusURL
@ -43,9 +44,9 @@ export class Aquarius {
/**
* Blocks until Aqua will cache the did (or the update for that did) or timeouts
* @param {string} fetchMethod fetch client instance
* @param {string} did DID of the asset.
* @param {string} txid used when the did exists and we expect an update with that txid.
* @param {string} fetchMethod fetch client instance
* @return {Promise<DDO>} DDO of the asset.
*/
public async waitForAqua(fetchMethod: any, did: string, txid?: string): Promise<Asset> {
@ -69,6 +70,42 @@ export class Aquarius {
} while (tries < 100)
return null
}
/**
* Validate DDO content
* @param {string} fetchMethod fetch client instance
* @param {DDO} ddo DID Descriptor Object content.
* @return {Promise<ValidateMetadata>}.
*/
public async validate(fetchMethod: any, ddo: DDO): Promise<ValidateMetadata> {
const status: ValidateMetadata = {
valid: false
}
let jsonResponse
try {
const path = this.aquariusURL + '/api/aquarius/assets/ddo/validate'
const response = await fetchMethod('POST', path, JSON.stringify(ddo), {
'Content-Type': 'application/octet-stream'
})
jsonResponse = await response.json()
if (response.status === 200) {
status.valid = true
status.hash = jsonResponse.hash
status.proof = {
validatorAddress: jsonResponse.publicKey,
r: jsonResponse.r[0],
s: jsonResponse.s[0],
v: jsonResponse.v
}
} else {
status.errors = jsonResponse
LoggerInstance.error('validate Metadata failed:', response.status, status.errors)
}
} catch (error) {
LoggerInstance.error('Error validating metadata: ', error)
}
return status
}
}
export default Aquarius

View File

@ -4,6 +4,7 @@ import { TransactionReceipt } from 'web3-eth'
import defaultNftAbi from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json'
import { LoggerInstance, getFairGasPrice, generateDtName } from '../utils'
import { Contract } from 'web3-eth-contract'
import { MetadataProof } from '../../src/@types'
/**
* ERC721 ROLES
@ -912,6 +913,7 @@ export class Nft {
flags: string,
data: string,
metadataHash: string,
metadataProofs?: MetadataProof[],
contractInstance?: Contract
): Promise<any> {
const nftContract =
@ -928,7 +930,7 @@ export class Nft {
flags,
data,
metadataHash,
[]
metadataProofs
)
.estimateGas({ from: metadataUpdater }, (err, estGas) =>
err ? gasLimitDefault : estGas
@ -955,14 +957,14 @@ export class Nft {
metaDataDecryptorAddress: string,
flags: string,
data: string,
metadataHash: string
metadataHash: string,
metadataProofs?: MetadataProof[]
): Promise<TransactionReceipt> {
const nftContract = new this.web3.eth.Contract(this.nftAbi, nftAddress)
if (!metadataProofs) metadataProofs = []
if (!(await this.getNftPermissions(nftAddress, address)).updateMetadata) {
throw new Error(`Caller is not Metadata updater`)
}
const estGas = await this.estGasSetMetadata(
nftAddress,
address,
@ -972,6 +974,7 @@ export class Nft {
flags,
data,
metadataHash,
metadataProofs,
nftContract
)
const trxReceipt = await nftContract.methods
@ -982,7 +985,7 @@ export class Nft {
flags,
data,
metadataHash,
[]
metadataProofs
)
.send({
from: address,

View File

@ -0,0 +1,346 @@
import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json'
import ProviderInstance from '../../src/provider/Provider'
import Aquarius from '../../src/aquarius/Aquarius'
import { assert } from 'chai'
import { NftFactory, NftCreateData } from '../../src/factories/index'
import {
Erc20CreateParams,
PoolCreationParams,
FreCreationParams,
DispenserCreationParams
} from '../../src/interfaces'
import { getHash, crossFetchGeneric, ZERO_ADDRESS } from '../../src/utils'
import { Nft } from '../../src/tokens/NFT'
import Web3 from 'web3'
import { SHA256 } from 'crypto-js'
import { homedir } from 'os'
import fs from 'fs'
import { AbiItem } from 'web3-utils'
import { ValidateMetadata, DDO } from '../../src/@types'
const data = JSON.parse(
fs.readFileSync(
process.env.ADDRESS_FILE ||
`${homedir}/.ocean/ocean-contracts/artifacts/address.json`,
'utf8'
)
)
const addresses = data.development
console.log(addresses)
const aquarius = new Aquarius('http://127.0.0.1:5000')
const web3 = new Web3('http://127.0.0.1:8545')
const providerUrl = 'http://172.15.0.4:8030'
let nft: Nft
let factory: NftFactory
let accounts: string[]
const files = [
{
type: 'url',
url: 'https://raw.githubusercontent.com/oceanprotocol/testdatasets/main/shs_dataset_test.txt',
method: 'GET'
}
]
const genericAsset: DDO = {
'@context': ['https://w3id.org/did/v1'],
id: 'testFakeDid',
version: '4.0.0',
chainId: 4,
nftAddress: '0x0',
metadata: {
created: '2021-12-20T14:35:20Z',
updated: '2021-12-20T14:35:20Z',
name: 'dataset-name',
type: 'dataset',
description: 'Ocean protocol test dataset description',
author: 'oceanprotocol-team',
license: 'MIT',
tags: ['white-papers'],
additionalInformation: { 'test-key': 'test-value' },
links: ['http://data.ceda.ac.uk/badc/ukcp09/']
},
services: [
{
id: 'testFakeId',
type: 'access',
description: 'Download service',
files: '',
datatokenAddress: '0xa15024b732A8f2146423D14209eFd074e61964F3',
serviceEndpoint: 'https://providerv4.rinkeby.oceanprotocol.com',
timeout: 0
}
]
}
describe('Publish tests', async () => {
it('initialise testes classes', async () => {
nft = new Nft(web3)
factory = new NftFactory(addresses.ERC721Factory, web3)
accounts = await web3.eth.getAccounts()
const daiContract = new web3.eth.Contract(
MockERC20.abi as AbiItem[],
addresses.MockDAI
)
await daiContract.methods
.approve(addresses.ERC721Factory, web3.utils.toWei('100000'))
.send({ from: accounts[0] })
})
it('should publish a dataset with pool (create NFT + ERC20 + pool) and with Metdata proof', async () => {
const poolDdo: DDO = { ...genericAsset }
const nftParams: NftCreateData = {
name: 'testNftPool',
symbol: 'TSTP',
templateIndex: 1,
tokenURI: ''
}
const erc20Params: Erc20CreateParams = {
templateIndex: 1,
cap: '100000',
feeAmount: '0',
feeManager: ZERO_ADDRESS,
feeToken: ZERO_ADDRESS,
minter: accounts[0],
mpFeeAddress: ZERO_ADDRESS
}
const poolParams: PoolCreationParams = {
ssContract: addresses.Staking,
basetokenAddress: addresses.MockDAI,
basetokenSender: addresses.ERC721Factory,
publisherAddress: accounts[0],
marketFeeCollector: accounts[0],
poolTemplateAddress: addresses.poolTemplate,
rate: '1',
basetokenDecimals: 18,
vestingAmount: '10000',
vestedBlocks: 2500000,
initialBasetokenLiquidity: '2000',
swapFeeLiquidityProvider: 1e15,
swapFeeMarketRunner: 1e15
}
const bundleNFT = await factory.createNftErcWithPool(
accounts[0],
nftParams,
erc20Params,
poolParams
)
const nftAddress = bundleNFT.events.NFTCreated.returnValues[0]
const datatokenAddress = bundleNFT.events.TokenCreated.returnValues[0]
const poolAdress = bundleNFT.events.NewPool.returnValues[0]
const encryptedFiles = await ProviderInstance.encrypt(
files,
providerUrl,
crossFetchGeneric
)
poolDdo.metadata.name = 'test-dataset-pool'
poolDdo.services[0].files = await encryptedFiles.text()
poolDdo.services[0].datatokenAddress = datatokenAddress
poolDdo.nftAddress = nftAddress
const chain = await web3.eth.getChainId()
poolDdo.chainId = chain
poolDdo.id =
'did:op:' + SHA256(web3.utils.toChecksumAddress(nftAddress) + chain.toString(10))
const AssetValidation: ValidateMetadata = await aquarius.validate(
crossFetchGeneric,
poolDdo
)
assert(AssetValidation.valid === true, 'Published asset is not valid')
const encryptedDdo = await ProviderInstance.encrypt(
poolDdo,
providerUrl,
crossFetchGeneric
)
const encryptedResponse = await encryptedDdo.text()
const metadataHash = getHash(JSON.stringify(poolDdo))
// just to make sure that our hash matches one computed by aquarius
assert(AssetValidation.hash === '0x' + metadataHash, 'Metadata hash is a missmatch')
const tx = await nft.setMetadata(
nftAddress,
accounts[0],
0,
providerUrl,
'',
'0x2',
encryptedResponse,
'0x' + metadataHash,
[AssetValidation.proof]
)
const resolvedDDO = await aquarius.waitForAqua(crossFetchGeneric, poolDdo.id)
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
})
it('should publish a dataset with fixed price (create NFT + ERC20 + fixed price) with an explicit empty Metadata Proof', async () => {
const fixedPriceDdo: DDO = { ...genericAsset }
const nftParams: NftCreateData = {
name: 'testNftFre',
symbol: 'TSTF',
templateIndex: 1,
tokenURI: ''
}
const erc20Params: Erc20CreateParams = {
templateIndex: 1,
cap: '100000',
feeAmount: '0',
feeManager: ZERO_ADDRESS,
feeToken: ZERO_ADDRESS,
minter: accounts[0],
mpFeeAddress: ZERO_ADDRESS
}
const fixedPriceParams: FreCreationParams = {
fixedRateAddress: addresses.FixedPrice,
baseTokenAddress: addresses.MockDAI,
owner: accounts[0],
marketFeeCollector: accounts[0],
baseTokenDecimals: 18,
dataTokenDecimals: 18,
fixedRate: '1',
marketFee: 1e15,
allowedConsumer: accounts[0],
withMint: false
}
const bundleNFT = await factory.createNftErcWithFixedRate(
accounts[0],
nftParams,
erc20Params,
fixedPriceParams
)
const nftAddress = bundleNFT.events.NFTCreated.returnValues[0]
const datatokenAddress = bundleNFT.events.TokenCreated.returnValues[0]
const fixedPrice = bundleNFT.events.NewFixedRate.returnValues[0]
const encryptedFiles = await ProviderInstance.encrypt(
files,
providerUrl,
crossFetchGeneric
)
fixedPriceDdo.metadata.name = 'test-dataset-fixedPrice'
fixedPriceDdo.services[0].files = await encryptedFiles.text()
fixedPriceDdo.services[0].datatokenAddress = datatokenAddress
fixedPriceDdo.nftAddress = nftAddress
const chain = await web3.eth.getChainId()
fixedPriceDdo.chainId = chain
fixedPriceDdo.id =
'did:op:' + SHA256(web3.utils.toChecksumAddress(nftAddress) + chain.toString(10))
const isAssetValid: ValidateMetadata = await aquarius.validate(
crossFetchGeneric,
fixedPriceDdo
)
assert(isAssetValid.valid === true, 'Published asset is not valid')
const encryptedDdo = await ProviderInstance.encrypt(
fixedPriceDdo,
providerUrl,
crossFetchGeneric
)
const encryptedResponse = await encryptedDdo.text()
const metadataHash = getHash(JSON.stringify(fixedPriceDdo))
// this is publishing with an explicit empty metadataProofs
const res = await nft.setMetadata(
nftAddress,
accounts[0],
0,
providerUrl,
'',
'0x2',
encryptedResponse,
'0x' + metadataHash,
[]
)
const resolvedDDO = await aquarius.waitForAqua(crossFetchGeneric, fixedPriceDdo.id)
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
})
it('should publish a dataset with dispenser (create NFT + ERC20 + dispenser) with no defined MetadataProof', async () => {
const dispenserDdo: DDO = { ...genericAsset }
const nftParams: NftCreateData = {
name: 'testNftDispenser',
symbol: 'TSTD',
templateIndex: 1,
tokenURI: ''
}
const erc20Params: Erc20CreateParams = {
templateIndex: 1,
cap: '100000',
feeAmount: '0',
feeManager: ZERO_ADDRESS,
feeToken: ZERO_ADDRESS,
minter: accounts[0],
mpFeeAddress: ZERO_ADDRESS
}
const dispenserParams: DispenserCreationParams = {
dispenserAddress: addresses.Dispenser,
maxTokens: web3.utils.toWei('1'),
maxBalance: web3.utils.toWei('1'),
withMint: true,
allowedSwapper: ZERO_ADDRESS
}
const bundleNFT = await factory.createNftErcWithDispenser(
accounts[0],
nftParams,
erc20Params,
dispenserParams
)
const nftAddress = bundleNFT.events.NFTCreated.returnValues[0]
const datatokenAddress = bundleNFT.events.TokenCreated.returnValues[0]
const dispenserAddress = bundleNFT.events.DispenserCreated.returnValues[0]
const encryptedFiles = await ProviderInstance.encrypt(
files,
providerUrl,
crossFetchGeneric
)
dispenserDdo.metadata.name = 'test-dataset-dispenser'
dispenserDdo.services[0].files = await encryptedFiles.text()
dispenserDdo.services[0].datatokenAddress = datatokenAddress
dispenserDdo.nftAddress = nftAddress
const chain = await web3.eth.getChainId()
dispenserDdo.chainId = chain
dispenserDdo.id =
'did:op:' + SHA256(web3.utils.toChecksumAddress(nftAddress) + chain.toString(10))
const isAssetValid: ValidateMetadata = await aquarius.validate(
crossFetchGeneric,
dispenserDdo
)
assert(isAssetValid.valid === true, 'Published asset is not valid')
const encryptedDdo = await ProviderInstance.encrypt(
dispenserDdo,
providerUrl,
crossFetchGeneric
)
const encryptedResponse = await encryptedDdo.text()
const metadataHash = getHash(JSON.stringify(dispenserDdo))
// this is publishing with any explicit metadataProofs
const res = await nft.setMetadata(
nftAddress,
accounts[0],
0,
providerUrl,
'',
'0x2',
encryptedResponse,
'0x' + metadataHash
)
const resolvedDDO = await aquarius.waitForAqua(crossFetchGeneric, dispenserDdo.id)
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
})
})

View File

@ -65,7 +65,7 @@ const ddo = {
]
}
describe('Publish tests', async () => {
describe('Simple Publish & consume test', async () => {
it('should publish a dataset (create NFT + ERC20)', async () => {
const nft = new Nft(web3)
const datatoken = new Datatoken(web3)