Move helpers/utils that needs web3 or ocean instance to instantiable classes.
This commit is contained in:
parent
0d7d56d1fe
commit
a931fe5a42
|
@ -5,14 +5,11 @@ import { config } from "../config"
|
|||
|
||||
import { Ocean, Account, DDO } from "../../src" // @oceanprotocol/squid
|
||||
|
||||
import ServiceAgreement from "../../src/ocean/ServiceAgreements/ServiceAgreement"
|
||||
|
||||
// WARN: not integration test. It has been done here because constant values
|
||||
// depends on the first account on spree (only accessible from integration test)
|
||||
describe("Signature", () => {
|
||||
|
||||
let ocean: Ocean
|
||||
let web3: Web3
|
||||
let consumer: Account
|
||||
|
||||
before(async () => {
|
||||
|
@ -21,7 +18,6 @@ describe("Signature", () => {
|
|||
web3Provider: new (Web3 as any).providers
|
||||
.HttpProvider("http://localhost:8545", 0, "0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e", "node0"),
|
||||
})
|
||||
web3 = (ocean as any).web3
|
||||
|
||||
// Accounts
|
||||
consumer = new Account("0x00bd138abd70e2f00903268f3db08f2d25677c9e")
|
||||
|
@ -36,7 +32,7 @@ describe("Signature", () => {
|
|||
const lockId = `0x${"b".repeat(64)}`
|
||||
const escrowId = `0x${"c".repeat(64)}`
|
||||
|
||||
const hash = await ServiceAgreement.hashServiceAgreement(
|
||||
const hash = await ocean.utils.agreements.hashServiceAgreement(
|
||||
templateId,
|
||||
agreementId,
|
||||
[accessId, lockId, escrowId],
|
||||
|
@ -82,8 +78,7 @@ describe("Signature", () => {
|
|||
const agreementConditionIds = await templates.escrowAccessSecretStoreTemplate
|
||||
.getAgreementIdsFromDDO(agreementId, ddo, consumer.getId(), consumer.getId())
|
||||
|
||||
const signature = await ServiceAgreement.signServiceAgreement(
|
||||
web3,
|
||||
const signature = await ocean.utils.agreements.signServiceAgreement(
|
||||
ddo,
|
||||
serviceDefinitionId,
|
||||
agreementId,
|
||||
|
|
|
@ -129,9 +129,9 @@
|
|||
}
|
||||
},
|
||||
"@oceanprotocol/keeper-contracts": {
|
||||
"version": "0.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/keeper-contracts/-/keeper-contracts-0.8.5.tgz",
|
||||
"integrity": "sha512-GRVsKAAX60PikLyeA6SEPm1NKOPCHW5C225H4Cpe+hww+qEbGu7Y2/Y+svWSXzfxElUanRZBdZfiEx4tdudIoQ=="
|
||||
"version": "0.8.6",
|
||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/keeper-contracts/-/keeper-contracts-0.8.6.tgz",
|
||||
"integrity": "sha512-WdIDedXZSS+AG3/K+issOJQ4Jmg0UtdNPpi1Ogo+sFogmYIa21m06pqvuAKK8tGG2o+KBW8nBUMyyA3mR2j+vg=="
|
||||
},
|
||||
"@oceanprotocol/secret-store-client": {
|
||||
"version": "0.0.14",
|
||||
|
@ -1158,12 +1158,6 @@
|
|||
"unset-value": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
|
||||
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
|
||||
"dev": true
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
|
@ -1250,12 +1244,6 @@
|
|||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"circular-json": {
|
||||
"version": "0.5.9",
|
||||
"resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
|
||||
"integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"class-utils": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
|
||||
|
@ -1581,15 +1569,6 @@
|
|||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"decamelize": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
|
||||
"integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"xregexp": "4.0.0"
|
||||
}
|
||||
},
|
||||
"decode-uri-component": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||
|
@ -2122,34 +2101,6 @@
|
|||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"execa": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
|
||||
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cross-spawn": "^5.0.1",
|
||||
"get-stream": "^3.0.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"npm-run-path": "^2.0.0",
|
||||
"p-finally": "^1.0.0",
|
||||
"signal-exit": "^3.0.0",
|
||||
"strip-eof": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"cross-spawn": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
|
||||
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lru-cache": "^4.0.1",
|
||||
"shebang-command": "^1.2.0",
|
||||
"which": "^1.2.9"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"expand-brackets": {
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
||||
|
@ -2626,7 +2577,8 @@
|
|||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
|
@ -2647,12 +2599,14 @@
|
|||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
|
@ -2673,12 +2627,14 @@
|
|||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
|
@ -2795,7 +2751,8 @@
|
|||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
|
@ -2822,6 +2779,7 @@
|
|||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
|
@ -2829,12 +2787,14 @@
|
|||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"minipass": {
|
||||
"version": "2.3.5",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
|
@ -2853,6 +2813,7 @@
|
|||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
|
@ -2946,6 +2907,7 @@
|
|||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
|
@ -3031,7 +2993,8 @@
|
|||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
|
@ -3067,6 +3030,7 @@
|
|||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
|
@ -3086,6 +3050,7 @@
|
|||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
|
@ -3129,12 +3094,14 @@
|
|||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.3",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -3597,12 +3564,6 @@
|
|||
"integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
|
||||
"dev": true
|
||||
},
|
||||
"invert-kv": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
|
||||
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
|
||||
"dev": true
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
|
||||
|
@ -4065,15 +4026,6 @@
|
|||
"readable-stream": "^2.0.5"
|
||||
}
|
||||
},
|
||||
"lcid": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
|
||||
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"invert-kv": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"lcov-result-merger": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz",
|
||||
|
@ -4137,16 +4089,6 @@
|
|||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
||||
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
|
||||
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pseudomap": "^1.0.2",
|
||||
"yallist": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"make-dir": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
|
||||
|
@ -4219,15 +4161,6 @@
|
|||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
||||
},
|
||||
"mem": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
|
||||
"integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mimic-fn": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"memory-fs": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
|
||||
|
@ -4296,12 +4229,6 @@
|
|||
"mime-db": "~1.38.0"
|
||||
}
|
||||
},
|
||||
"mimic-fn": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
|
||||
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
|
||||
"dev": true
|
||||
},
|
||||
"mimic-response": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
|
||||
|
@ -4443,28 +4370,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"mocha-parallel-tests": {
|
||||
"version": "2.0.6-alpha.3",
|
||||
"resolved": "https://registry.npmjs.org/mocha-parallel-tests/-/mocha-parallel-tests-2.0.6-alpha.3.tgz",
|
||||
"integrity": "sha512-yyCObs84loUFbLim3KfeucKeSULudEoDNbOsNuJ/hdwj1vsIVr1bs1Tsk30OAMCpSdi7vUhvU9uIO8nJ3t62FQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"circular-json": "^0.5.4",
|
||||
"debug": "3.1.0",
|
||||
"yargs": "12.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mock-fs": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz",
|
||||
|
@ -5822,17 +5727,6 @@
|
|||
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
|
||||
"dev": true
|
||||
},
|
||||
"os-locale": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
|
||||
"integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"execa": "^0.7.0",
|
||||
"lcid": "^1.0.0",
|
||||
"mem": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"p-cancelable": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
|
||||
|
@ -6086,12 +5980,6 @@
|
|||
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
|
||||
"dev": true
|
||||
},
|
||||
"pseudomap": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
||||
"dev": true
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.31",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
|
||||
|
@ -8207,7 +8095,7 @@
|
|||
"requires": {
|
||||
"underscore": "1.8.3",
|
||||
"web3-core-helpers": "1.0.0-beta.37",
|
||||
"websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2"
|
||||
"websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible"
|
||||
}
|
||||
},
|
||||
"web3-shh": {
|
||||
|
@ -8611,12 +8499,6 @@
|
|||
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
|
||||
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
|
||||
},
|
||||
"xregexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
|
||||
"integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
|
||||
"dev": true
|
||||
},
|
||||
"xtend": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
||||
|
@ -8633,41 +8515,6 @@
|
|||
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
|
||||
"integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
|
||||
},
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
|
||||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||
"dev": true
|
||||
},
|
||||
"yargs": {
|
||||
"version": "12.0.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz",
|
||||
"integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cliui": "^4.0.0",
|
||||
"decamelize": "^2.0.0",
|
||||
"find-up": "^3.0.0",
|
||||
"get-caller-file": "^1.0.1",
|
||||
"os-locale": "^2.0.0",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^1.0.1",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^2.0.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^3.2.1 || ^4.0.0",
|
||||
"yargs-parser": "^10.1.0"
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
|
||||
"integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camelcase": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"yauzl": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/oceanprotocol/squid-js#readme",
|
||||
"dependencies": {
|
||||
"@oceanprotocol/keeper-contracts": "^0.8.5",
|
||||
"@oceanprotocol/keeper-contracts": "^0.8.6",
|
||||
"@oceanprotocol/secret-store-client": "~0.0.14",
|
||||
"bignumber.js": "^8.0.1",
|
||||
"deprecated-decorator": "^0.1.6",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import * as Web3 from "web3"
|
||||
import Web3Provider from "../keeper/Web3Provider"
|
||||
import LoggerInstance from "../utils/Logger"
|
||||
import * as signatureHelpers from "../utils/SignatureHelpers"
|
||||
import { Ocean } from "../ocean/Ocean"
|
||||
import { Authentication } from "./Authentication"
|
||||
import { Proof } from "./Proof"
|
||||
import { PublicKey } from "./PublicKey"
|
||||
|
@ -112,10 +112,10 @@ export class DDO {
|
|||
* @param {string} password Password if it's requirted.
|
||||
* @return {Promise<Proof>} Proof object.
|
||||
*/
|
||||
public async generateProof(web3: Web3, publicKey: string, password?: string): Promise<Proof> {
|
||||
public async generateProof(ocean: Ocean, publicKey: string, password?: string): Promise<Proof> {
|
||||
const checksum = this.getChecksum()
|
||||
|
||||
const signature = await signatureHelpers.signText(web3, checksum, publicKey, password)
|
||||
const signature = await ocean.utils.signature.signText(checksum, publicKey, password)
|
||||
|
||||
return {
|
||||
created: (new Date()).toISOString(),
|
||||
|
|
|
@ -3,6 +3,7 @@ import { OceanAgreements } from "./OceanAgreements"
|
|||
import { OceanAssets } from "./OceanAssets"
|
||||
import { OceanSecretStore } from "./OceanSecretStore"
|
||||
import { OceanTokens } from "./OceanTokens"
|
||||
import { OceanUtils } from "./utils/OceanUtils"
|
||||
|
||||
import { Aquarius } from "../aquarius/Aquarius"
|
||||
import { Brizo } from "../brizo/Brizo"
|
||||
|
@ -43,6 +44,8 @@ export class Ocean extends Instantiable {
|
|||
instance.secretStore = await OceanSecretStore.getInstance(instanceConfig)
|
||||
instance.tokens = await OceanTokens.getInstance(instanceConfig)
|
||||
|
||||
instance.utils = await OceanUtils.getInstance(instanceConfig)
|
||||
|
||||
return instance
|
||||
}
|
||||
|
||||
|
@ -94,6 +97,12 @@ export class Ocean extends Instantiable {
|
|||
*/
|
||||
public tokens: OceanTokens
|
||||
|
||||
/**
|
||||
* Ocean utils submodule
|
||||
* @type {OceanUtils}
|
||||
*/
|
||||
public utils: OceanUtils
|
||||
|
||||
private constructor() {
|
||||
super()
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { generateId } from "../utils/GeneratorHelpers"
|
||||
import Account from "./Account"
|
||||
import DID from "./DID"
|
||||
import ServiceAgreement from "./ServiceAgreements/ServiceAgreement"
|
||||
import { zeroX, didPrefixed } from "../utils"
|
||||
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
|
||||
|
||||
|
@ -57,8 +56,7 @@ export class OceanAgreements extends Instantiable {
|
|||
.getTemplateByName(templateName)
|
||||
.getAgreementIdsFromDDO(agreementId, ddo, consumer.getId(), consumer.getId())
|
||||
|
||||
const signature = await ServiceAgreement.signServiceAgreement(
|
||||
this.web3,
|
||||
const signature = await this.ocean.utils.agreements.signServiceAgreement(
|
||||
ddo,
|
||||
serviceDefinitionId,
|
||||
agreementId,
|
||||
|
|
|
@ -135,7 +135,7 @@ export class OceanAssets extends Instantiable {
|
|||
serviceAgreementTemplate.conditions = conditions
|
||||
|
||||
ddo.addChecksum()
|
||||
await ddo.addProof(this.web3, publisher.getId(), publisher.getPassword())
|
||||
await ddo.addProof(this.ocean, publisher.getId(), publisher.getPassword())
|
||||
|
||||
const storedDdo = await this.ocean.aquarius.storeDDO(ddo)
|
||||
await didRegistry.registerAttribute(
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
|
||||
|
||||
import { ServiceAgreement } from "./ServiceAgreement"
|
||||
import { SignatureUtils } from "./SignatureUtils"
|
||||
|
||||
/**
|
||||
* Utils internal submodule of Ocean Protocol.
|
||||
*/
|
||||
export class OceanUtils extends Instantiable {
|
||||
|
||||
/**
|
||||
* Returns the instance of OceanUtils.
|
||||
* @return {Promise<OceanUtils>}
|
||||
*/
|
||||
public static async getInstance(config: InstantiableConfig): Promise<OceanUtils> {
|
||||
const instance = new OceanUtils()
|
||||
instance.setInstanceConfig(config)
|
||||
|
||||
instance.agreements = new ServiceAgreement(config)
|
||||
instance.signature = new SignatureUtils(config)
|
||||
|
||||
return instance
|
||||
}
|
||||
|
||||
/**
|
||||
* Agreement utils.
|
||||
* @type {ServiceAgreement}
|
||||
*/
|
||||
public agreements: ServiceAgreement
|
||||
|
||||
/**
|
||||
* Signature utils.
|
||||
* @type {SignatureUtils}
|
||||
*/
|
||||
public signature: SignatureUtils
|
||||
}
|
|
@ -2,16 +2,18 @@ import * as Web3 from "web3"
|
|||
import { ServiceAgreementTemplateCondition } from "../../ddo/ServiceAgreementTemplate"
|
||||
import { DDO } from "../../ddo/DDO"
|
||||
import { ServiceAccess } from "../../ddo/Service"
|
||||
import LoggerInstance from "../../utils/Logger"
|
||||
import Web3Provider from "../../keeper/Web3Provider"
|
||||
import Account from "../Account"
|
||||
import { signText, zeroX } from "../../utils"
|
||||
import { zeroX } from "../../utils"
|
||||
import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
|
||||
|
||||
// TODO: move this class to helpers, it only contains pure functions
|
||||
export default class ServiceAgreement {
|
||||
export class ServiceAgreement extends Instantiable {
|
||||
|
||||
public static async signServiceAgreement(
|
||||
web3: Web3,
|
||||
constructor(config: InstantiableConfig) {
|
||||
super()
|
||||
this.setInstanceConfig(config)
|
||||
}
|
||||
|
||||
public async signServiceAgreement(
|
||||
ddo: DDO,
|
||||
serviceDefinitionId: string,
|
||||
serviceAgreementId: string,
|
||||
|
@ -20,15 +22,14 @@ export default class ServiceAgreement {
|
|||
): Promise<string> {
|
||||
|
||||
const service = ddo.findServiceById<"Access">(serviceDefinitionId)
|
||||
const timelockValues: number[] = ServiceAgreement.getTimeValuesFromService(service, "timelock")
|
||||
const timeoutValues: number[] = ServiceAgreement.getTimeValuesFromService(service, "timeout")
|
||||
const timelockValues: number[] = this.getTimeValuesFromService(service, "timelock")
|
||||
const timeoutValues: number[] = this.getTimeValuesFromService(service, "timeout")
|
||||
|
||||
if (!service.templateId) {
|
||||
throw new Error("TemplateId not found in DDO.")
|
||||
}
|
||||
|
||||
const serviceAgreementHashSignature = await ServiceAgreement.createHashSignature(
|
||||
web3,
|
||||
const serviceAgreementHashSignature = await this.createHashSignature(
|
||||
service.templateId,
|
||||
serviceAgreementId,
|
||||
agreementConditionsIds,
|
||||
|
@ -37,13 +38,12 @@ export default class ServiceAgreement {
|
|||
consumer,
|
||||
)
|
||||
|
||||
LoggerInstance.log("SA hash signature:", serviceAgreementHashSignature)
|
||||
this.logger.debug("SA hash signature:", serviceAgreementHashSignature)
|
||||
|
||||
return serviceAgreementHashSignature
|
||||
}
|
||||
|
||||
public static async createHashSignature(
|
||||
web3: Web3,
|
||||
public async createHashSignature(
|
||||
templateId: string,
|
||||
serviceAgreementId: string,
|
||||
valueHashes: string[],
|
||||
|
@ -52,7 +52,7 @@ export default class ServiceAgreement {
|
|||
consumer: Account,
|
||||
): Promise<string> {
|
||||
|
||||
const serviceAgreementHash = ServiceAgreement.hashServiceAgreement(
|
||||
const serviceAgreementHash = this.hashServiceAgreement(
|
||||
templateId,
|
||||
serviceAgreementId,
|
||||
valueHashes,
|
||||
|
@ -60,12 +60,13 @@ export default class ServiceAgreement {
|
|||
timeoutValues,
|
||||
)
|
||||
|
||||
const serviceAgreementHashSignature = await signText(web3, serviceAgreementHash, consumer.getId(), consumer.getPassword())
|
||||
const serviceAgreementHashSignature = await this.ocean.utils.signature
|
||||
.signText(serviceAgreementHash, consumer.getId(), consumer.getPassword())
|
||||
|
||||
return serviceAgreementHashSignature
|
||||
}
|
||||
|
||||
public static hashServiceAgreement(
|
||||
public hashServiceAgreement(
|
||||
serviceAgreementTemplateId: string,
|
||||
serviceAgreementId: string,
|
||||
valueHashes: string[],
|
||||
|
@ -81,10 +82,10 @@ export default class ServiceAgreement {
|
|||
{type: "bytes32", value: zeroX(serviceAgreementId)},
|
||||
]
|
||||
|
||||
return (Web3Provider as any).getWeb3().utils.soliditySha3(...args).toString("hex")
|
||||
return this.web3.utils.soliditySha3(...args).toString("hex")
|
||||
}
|
||||
|
||||
private static getTimeValuesFromService(service: ServiceAccess, type: "timeout" | "timelock"): number[] {
|
||||
private getTimeValuesFromService(service: ServiceAccess, type: "timeout" | "timelock"): number[] {
|
||||
const timeoutValues: number[] = service.serviceAgreementTemplate.conditions
|
||||
.map((condition: ServiceAgreementTemplateCondition) => condition[type])
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
import * as Web3 from "web3"
|
||||
|
||||
import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
|
||||
|
||||
export class SignatureUtils extends Instantiable {
|
||||
|
||||
constructor(config: InstantiableConfig) {
|
||||
super()
|
||||
this.setInstanceConfig(config)
|
||||
}
|
||||
|
||||
public async signText(text: string, publicKey: string, password?: string): Promise<string> {
|
||||
try {
|
||||
return await this.web3.eth.personal.sign(text, publicKey, password)
|
||||
} catch (e) {
|
||||
this.logger.warn("Error on personal sign.")
|
||||
this.logger.warn(e)
|
||||
try {
|
||||
return await this.web3.eth.sign(text, publicKey, password)
|
||||
} catch (e2) {
|
||||
this.logger.error("Error on sign.")
|
||||
this.logger.error(e2)
|
||||
throw new Error("Error executing personal sign")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async verifyText(text: string, signature: string): Promise<string> {
|
||||
return await this.web3.eth.personal.ecRecover(text, signature)
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
import * as Web3 from "web3"
|
||||
import LoggerInstance from "./Logger"
|
||||
|
||||
export async function signText(web3: Web3, text: string, publicKey: string, password?: string): Promise<string> {
|
||||
try {
|
||||
return await web3.eth.personal.sign(text, publicKey, password)
|
||||
} catch (e) {
|
||||
LoggerInstance.error("Error on personal sign.")
|
||||
LoggerInstance.error(e)
|
||||
try {
|
||||
return await web3.eth.sign(text, publicKey, password)
|
||||
} catch (e2) {
|
||||
LoggerInstance.error("Error on sign.")
|
||||
LoggerInstance.error(e2)
|
||||
throw new Error("Error executing personal sign")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function verifyText(web3: Web3, text: string, signature: string): Promise<string> {
|
||||
return await web3.eth.personal.ecRecover(text, signature)
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
export * from "./Logger"
|
||||
export * from "./SignatureHelpers"
|
||||
export * from "./ConversionTypeHelpers"
|
||||
export * from "./GeneratorHelpers"
|
||||
export * from "./DDOHelpers"
|
||||
|
|
|
@ -4,7 +4,6 @@ import * as Web3 from "web3"
|
|||
|
||||
import { DDO } from "../../src/ddo/DDO"
|
||||
import { Service } from "../../src/ddo/Service"
|
||||
import * as signatureHelpers from "../../src/utils/SignatureHelpers"
|
||||
import { Ocean } from "../../src/ocean/Ocean"
|
||||
import config from "../config"
|
||||
import TestContractHandler from "../keeper/TestContractHandler"
|
||||
|
@ -165,10 +164,12 @@ describe("DDO", () => {
|
|||
})
|
||||
|
||||
let web3: Web3
|
||||
let ocean: Ocean
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestContractHandler.prepareContracts()
|
||||
web3 = (await Ocean.getInstance(config) as any).web3
|
||||
ocean = await Ocean.getInstance(config)
|
||||
web3 = (ocean as any).web3
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
|
@ -256,10 +257,10 @@ describe("DDO", () => {
|
|||
const signature = `0x${"a".repeat(130)}`
|
||||
|
||||
it("should properly generate the proof", async () => {
|
||||
const signTextSpy = spy.on(signatureHelpers, "signText", () => signature)
|
||||
const signTextSpy = spy.on(ocean.utils.signature, "signText", () => signature)
|
||||
const ddo = new DDO(testDDO)
|
||||
const checksum = ddo.getChecksum()
|
||||
const proof = await ddo.generateProof(web3, publicKey)
|
||||
const proof = await ddo.generateProof(ocean, publicKey)
|
||||
|
||||
assert.include(proof as any, {
|
||||
creator: publicKey,
|
||||
|
|
|
@ -2,37 +2,27 @@ import { assert, spy, use } from "chai"
|
|||
import * as spies from "chai-spies"
|
||||
|
||||
import { SearchQuery } from "../../src/aquarius/query/SearchQuery"
|
||||
import { DDO } from "../../src/ddo/DDO"
|
||||
import Account from "../../src/ocean/Account"
|
||||
import { Ocean } from "../../src/ocean/Ocean"
|
||||
import * as signatureHelpers from "../../src/utils/SignatureHelpers"
|
||||
import config from "../config"
|
||||
import TestContractHandler from "../keeper/TestContractHandler"
|
||||
import { metadataMock } from "../testdata/MetaData"
|
||||
|
||||
use(spies)
|
||||
|
||||
let ocean: Ocean
|
||||
let accounts: Account[]
|
||||
let testPublisher: Account
|
||||
|
||||
describe("Ocean", () => {
|
||||
|
||||
const metadata = metadataMock
|
||||
|
||||
beforeEach(async () => {
|
||||
spy.on(signatureHelpers, "signText", () => `0x${"a".repeat(130)}`)
|
||||
})
|
||||
afterEach(() => {
|
||||
spy.restore()
|
||||
})
|
||||
|
||||
before(async () => {
|
||||
await TestContractHandler.prepareContracts()
|
||||
ocean = await Ocean.getInstance(config)
|
||||
accounts = await ocean.accounts.list()
|
||||
})
|
||||
|
||||
testPublisher = accounts[0]
|
||||
beforeEach(async () => {
|
||||
spy.on(ocean.utils.signature, "signText", () => `0x${"a".repeat(130)}`)
|
||||
})
|
||||
afterEach(() => {
|
||||
spy.restore()
|
||||
})
|
||||
|
||||
describe("#getInstance()", () => {
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
import {assert} from "chai"
|
||||
import { DDO } from "../../src/ddo/DDO"
|
||||
import Account from "../../src/ocean/Account"
|
||||
import DID from "../../src/ocean/DID"
|
||||
import { Ocean } from "../../src/ocean/Ocean"
|
||||
import ServiceAgreement from "../../src/ocean/ServiceAgreements/ServiceAgreement"
|
||||
import { generateId } from "../../src/utils/GeneratorHelpers"
|
||||
import config from "../config"
|
||||
import TestContractHandler from "../keeper/TestContractHandler"
|
||||
|
||||
const did: DID = DID.generate()
|
||||
|
||||
describe("ServiceAgreement", () => {
|
||||
let ocean: Ocean
|
||||
|
||||
let publisherAccount: Account
|
||||
let consumerAccount: Account
|
||||
|
||||
before(async () => {
|
||||
await TestContractHandler.prepareContracts()
|
||||
ocean = await Ocean.getInstance(config)
|
||||
const accounts = await ocean.accounts.list()
|
||||
|
||||
publisherAccount = accounts[1]
|
||||
consumerAccount = accounts[2]
|
||||
})
|
||||
|
||||
describe("#signServiceAgreement()", () => {
|
||||
xit("should sign an service agreement", async () => {
|
||||
// const ddo = new DDO({id: did.getDid(), service: [accessService]})
|
||||
// const serviceAgreementId: string = generateId()
|
||||
|
||||
// const serviceAgreementSignature: string = await ServiceAgreement.signServiceAgreement(ddo, accessService.serviceDefinitionId,
|
||||
// serviceAgreementId, consumerAccount)
|
||||
|
||||
// assert(serviceAgreementSignature)
|
||||
// assert(serviceAgreementSignature.startsWith("0x"))
|
||||
// assert(serviceAgreementSignature.length === 132)
|
||||
})
|
||||
})
|
||||
})
|
|
@ -1,17 +1,24 @@
|
|||
import { assert, expect, spy, use } from "chai"
|
||||
import * as spies from "chai-spies"
|
||||
|
||||
import Web3Provider from "../../src/keeper/Web3Provider"
|
||||
import { signText, verifyText } from "../../src/utils/SignatureHelpers"
|
||||
import config from "../../config"
|
||||
|
||||
import { Ocean } from "../../../src/ocean/Ocean"
|
||||
|
||||
use(spies)
|
||||
|
||||
describe("SignatureHelpers", () => {
|
||||
describe("SignatureUtils", () => {
|
||||
|
||||
const publicKey = `0x${"a".repeat(40)}`
|
||||
const text = "0123456789abcde"
|
||||
const signature = `0x${"a".repeat(130)}`
|
||||
let web3
|
||||
let ocean: Ocean
|
||||
|
||||
before(async () => {
|
||||
ocean = await Ocean.getInstance(config)
|
||||
web3 = (ocean as any).web3
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
spy.restore()
|
||||
|
@ -21,19 +28,18 @@ describe("SignatureHelpers", () => {
|
|||
let personalSignSpy
|
||||
|
||||
beforeEach(() => {
|
||||
web3 = Web3Provider.getWeb3()
|
||||
personalSignSpy = spy.on(web3.eth.personal, "sign", () => signature)
|
||||
})
|
||||
|
||||
it("should sign a text as expected", async () => {
|
||||
const signed = await signText(web3, text, publicKey)
|
||||
const signed = await ocean.utils.signature.signText(text, publicKey)
|
||||
|
||||
assert.equal(signed, signature)
|
||||
expect(personalSignSpy).to.have.been.called.with(text, publicKey)
|
||||
})
|
||||
|
||||
it("should sign a text as expected using password", async () => {
|
||||
const signed = await signText(web3, text, publicKey, "test")
|
||||
const signed = await ocean.utils.signature.signText(text, publicKey, "test")
|
||||
|
||||
assert.equal(signed, signature)
|
||||
expect(personalSignSpy).to.have.been.called.with(text, publicKey, "test")
|
||||
|
@ -44,7 +50,7 @@ describe("SignatureHelpers", () => {
|
|||
it("should recover the privateKey of a signed message", async () => {
|
||||
const personalRecoverSpy = spy.on(web3.eth.personal, "ecRecover", () => publicKey)
|
||||
|
||||
const verifiedPublicKey = await verifyText(web3, text, signature)
|
||||
const verifiedPublicKey = await ocean.utils.signature.verifyText(text, signature)
|
||||
|
||||
assert.equal(publicKey, verifiedPublicKey)
|
||||
expect(personalRecoverSpy).to.have.been.called.with(text, signature)
|
Loading…
Reference in New Issue