diff --git a/client-peer/aqua/demo_validation.aqua b/client-peer/aqua/demo_validation.aqua index ed227ee..f478f53 100644 --- a/client-peer/aqua/demo_validation.aqua +++ b/client-peer/aqua/demo_validation.aqua @@ -21,7 +21,7 @@ service DataProvider("DataProvider"): get_records() -> DBResult get_record(snapshot_id: u64) -> DBResult get_record_count() -> u64 - clear_table(password: string) -> DBResult + delete_records(password: string) -> DBResult func validate(eip712_url: string, node: string, relay:string) -> string: @@ -44,9 +44,9 @@ func get_record_count(node: string, relay:string) -> u64: res <- DataProvider.get_record_count() <- res -func delete_rows(password: string, node: string, relay:string) -> DBResult: +func delete_records(password: string, node: string, relay:string) -> DBResult: on node via relay: - result <- DataProvider.clear_table(password) + result <- DataProvider.delete_records(password) <- result diff --git a/client-peer/package-lock.json b/client-peer/package-lock.json index 1daf79a..9f295b4 100644 --- a/client-peer/package-lock.json +++ b/client-peer/package-lock.json @@ -16,7 +16,8 @@ }, "devDependencies": { "@fluencelabs/aqua": "^0.4.0-235", - "typescript": "^4.0.0" + "ts-node": "^9.1.1", + "typescript": "^4.2.4" } }, "node_modules/@chainsafe/libp2p-noise": { @@ -443,6 +444,12 @@ "native-abort-controller": "^1.0.3" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -632,6 +639,12 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -688,6 +701,12 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -747,6 +766,15 @@ "node": ">=0.4.0" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dns-over-http-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", @@ -1817,6 +1845,12 @@ "multiaddr": "^10.0.0" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -2565,6 +2599,25 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -2665,6 +2718,32 @@ "utf8-byte-length": "^1.0.1" } }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, "node_modules/ts-pattern": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-3.3.3.tgz", @@ -2840,6 +2919,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.1.0.tgz", "integrity": "sha512-zd3ytX2cm+tcSndRU+krm0eL4TMMpZE7evs5hLRAoOy6gviqLfe3qOlkjF3i5SeAkQUCeJk0lJZrEU56kHRfWw==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } } }, "dependencies": { @@ -3240,6 +3328,12 @@ "native-abort-controller": "^1.0.3" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3380,6 +3474,12 @@ "ieee754": "^1.1.13" } }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -3425,6 +3525,12 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3464,6 +3570,12 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "dns-over-http-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", @@ -4336,6 +4448,12 @@ "multiaddr": "^10.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -4902,6 +5020,22 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -4989,6 +5123,20 @@ "utf8-byte-length": "^1.0.1" } }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, "ts-pattern": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-3.3.3.tgz", @@ -5118,6 +5266,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.1.0.tgz", "integrity": "sha512-zd3ytX2cm+tcSndRU+krm0eL4TMMpZE7evs5hLRAoOy6gviqLfe3qOlkjF3i5SeAkQUCeJk0lJZrEU56kHRfWw==" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true } } } diff --git a/client-peer/package.json b/client-peer/package.json index 7c6ea84..9c96ff8 100644 --- a/client-peer/package.json +++ b/client-peer/package.json @@ -19,7 +19,7 @@ "it-all": "^1.0.5" }, "scripts": { - "start": "node dist/src/index.js", + "start": "node -r ts-node/register src/index.ts", "compile-aqua": "aqua -i aqua -o src/_aqua/", "watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\"" }, @@ -39,6 +39,7 @@ "homepage": "git+https://github.com/fluencelabs/eip712-validation-node/blob/main/README.md", "devDependencies": { "@fluencelabs/aqua": "^0.4.0-235", - "typescript": "^4.0.0" + "typescript": "^4.2.4", + "ts-node": "^9.1.1" } } diff --git a/client-peer/src/_aqua/demo_validation.ts b/client-peer/src/_aqua/demo_validation.ts index 5712f9e..b22ae5d 100644 --- a/client-peer/src/_aqua/demo_validation.ts +++ b/client-peer/src/_aqua/demo_validation.ts @@ -80,7 +80,7 @@ export function registerEIPValidator(...args: any) { export interface DataProviderDef { - clear_table: (password: string, callParams: CallParams<'password'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; + delete_records: (password: string, callParams: CallParams<'password'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; get_record_count: (callParams: CallParams) => number | Promise; get_records: (callParams: CallParams) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; @@ -98,7 +98,7 @@ export function registerDataProvider(...args: any) { "defaultServiceId" : "DataProvider", "functions" : [ { - "functionName" : "clear_table", + "functionName" : "delete_records", "argDefs" : [ { "name" : "password", @@ -148,101 +148,6 @@ export function registerDataProvider(...args: any) { // Functions -export type Delete_rowsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } -export function delete_rows(password: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(peer: FluencePeer, password: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "password") [] password) - ) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("DataProvider" "clear_table") [password] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "delete_rows", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "password", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - export type Get_recordResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } export function get_record(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; export function get_record(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; @@ -338,6 +243,101 @@ export function get_record(...args: any) { } +export type Delete_recordsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } +export function delete_records(password: string, node: string, relay: string, config?: {ttl?: number}): Promise; +export function delete_records(peer: FluencePeer, password: string, node: string, relay: string, config?: {ttl?: number}): Promise; +export function delete_records(...args: any) { + + let script = ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "password") [] password) + ) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + ) + (call -relay- ("op" "noop") []) + ) + (call relay ("op" "noop") []) + ) + (xor + (call node ("DataProvider" "delete_records") [password] result) + (seq + (seq + (seq + (call relay ("op" "noop") []) + (call -relay- ("op" "noop") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "noop") []) + ) + ) + ) + (call relay ("op" "noop") []) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + ` + return callFunction( + args, + { + "functionName" : "delete_records", + "returnType" : { + "tag" : "primitive" + }, + "argDefs" : [ + { + "name" : "password", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "node", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "relay", + "argType" : { + "tag" : "primitive" + } + } + ], + "names" : { + "relay" : "-relay-", + "getDataSrv" : "getDataSrv", + "callbackSrv" : "callbackSrv", + "responseSrv" : "callbackSrv", + "responseFnName" : "response", + "errorHandlingSrv" : "errorHandlingSrv", + "errorFnName" : "error" + } +}, + script + ) +} + + export function validate(eip712_url: string, node: string, relay: string, config?: {ttl?: number}): Promise; export function validate(peer: FluencePeer, eip712_url: string, node: string, relay: string, config?: {ttl?: number}): Promise; diff --git a/client-peer/src/index.ts b/client-peer/src/index.ts index d9fac41..2843344 100644 --- a/client-peer/src/index.ts +++ b/client-peer/src/index.ts @@ -16,15 +16,18 @@ import { Fluence, setLogLevel, FluencePeer } from "@fluencelabs/fluence"; import { krasnodar, Node } from "@fluencelabs/fluence-network-environment"; -import { validate, get_record, get_records, get_record_count } from "./_aqua/demo_validation"; +import { validate, get_record, get_records, get_record_count, delete_records } from "./_aqua/demo_validation"; +const NODE_DB_PWD = "bad really bad"; const PWD_HASH = "bad really bad"; +const EIP712_URL = "https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS"; interface NodeTuple { node_id: string; relay_id: string } +// PoC node parameters let poc_topologies: Array = [ { "node_id": "12D3KooWFCY8xqebtZqNeiA5took71bUNAedzCCDuCuM1QTdTbWT", @@ -34,17 +37,33 @@ let poc_topologies: Array = [ async function main() { + + console.log("Welcome to Snapshot PoC demo."); // setLogLevel('DEBUG'); await Fluence.start({ connectTo: krasnodar[2] }); console.log( - "created a Fluence client %s with relay %s", + "Created Fluence client with\npeer id: %s\nrelay id %s\n", Fluence.getStatus().peerId, Fluence.getStatus().relayPeerId ); + console.log("\nRoundtrip Validation demo.\n"); + + console.log("Let's check the node db and clear all records if need be:"); let rec_count = await get_record_count(poc_topologies[0].node_id, poc_topologies[0].relay_id); + if (rec_count > 0) { + console.log("deleting %s records", rec_count); + let _res = await delete_records(NODE_DB_PWD, poc_topologies[0].node_id, poc_topologies[0].relay_id); + } + + console.log("Lets validate proposal %s, which is old and should fail.", EIP712_URL); + let doc_val = await validate(EIP712_URL, poc_topologies[0].node_id, poc_topologies[0].relay_id); + // if (doc_val.stderr.length > 0) {} + console.log("doc val: ", doc_val); + + rec_count = await get_record_count(poc_topologies[0].node_id, poc_topologies[0].relay_id); console.log("record count: ", rec_count); let records = await get_records(poc_topologies[0].node_id, poc_topologies[0].relay_id); @@ -56,6 +75,11 @@ async function main() { } + // verify test + // const address = ethers.utils.verifyMessage(resp_str, signed_response); + // console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); + + // console.log(resp_str); return; diff --git a/peer-node/aqua/snapshot.aqua b/peer-node/aqua/snapshot.aqua index e329b6b..55b1cac 100644 --- a/peer-node/aqua/snapshot.aqua +++ b/peer-node/aqua/snapshot.aqua @@ -1,9 +1,17 @@ -data PVResponse: +data Response: peer_id: string timestamp: u64 eip_validation: bool ts_validation: bool +data EipResponse: + signature: string + validation: Response + +data ValidationResult: + stderr: string + stdout: EipResponse + data DBRecord: snapshot_id: u64 @@ -21,32 +29,30 @@ data DBResult: stdout: []DBRecord service EIPValidator("snapshot"): - eip712_validation_string(eip_str: string, peer_id: string) -> string - eip712_validation_url(eip_str: string, peer_id: string) -> string + eip712_validation_string(eip_str: string, peer_id: string) -> ValidationResult + eip712_validation_url(eip_str: string, peer_id: string) -> ValidationResult service DataProvider("snapshot"): get_records() -> DBResult get_record(snapshot_id: u64) -> DBResult get_record_count() -> u64 - clear_table(password: string) -> DBResult + delete_records(password: string) -> DBResult -func validate(relay: string, peer:string, eip712_json: string) -> string: +func validate(relay: string, peer:string, eip712_json: string) -> ValidationResult: on peer via relay: result <- EIPValidator.eip712_validation_string(eip712_json, peer) <- result -func validate_from_url(relay: string, peer:string, eip712_url: string) -> string: +func validate_from_url(relay: string, peer:string, eip712_url: string) -> ValidationResult: on peer via relay: result <- EIPValidator.eip712_validation_url(eip712_url, peer) <- result - func get_record(relay:string, peer:string, snapshot_id: u64) -> DBResult: on peer via relay: result <- DataProvider.get_record(snapshot_id) <- result - func get_records(relay:string, peer:string) -> DBResult: on peer via relay: result <- DataProvider.get_records() @@ -57,7 +63,7 @@ func get_count(relay:string, peer:string) -> u64: result <- DataProvider.get_record_count() <- result -func delete_rows(passwd: string, peer: string, relay:string) -> DBResult: +func delete_records(passwd: string, peer: string, relay:string) -> DBResult: on peer via relay: - result <- DataProvider.clear_table(passwd) + result <- DataProvider.delete_records(passwd) <- result \ No newline at end of file diff --git a/peer-node/data/snapshot.db b/peer-node/data/snapshot.db index 5776735..1828d3d 100644 Binary files a/peer-node/data/snapshot.db and b/peer-node/data/snapshot.db differ diff --git a/peer-node/package.json b/peer-node/package.json index cd6d17b..c195f93 100644 --- a/peer-node/package.json +++ b/peer-node/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "start": "node -r ts-node/register src/index.ts", - "compile-aqua": "aqua --import . -i ./aqua/ -o ./src/_aqua", + "compile-aqua": "aqua -i aqua/ -o src/_aqua", "watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\"" }, "author": "", diff --git a/peer-node/src/_aqua/demo_validation.ts b/peer-node/src/_aqua/demo_validation.ts deleted file mode 100644 index 5712f9e..0000000 --- a/peer-node/src/_aqua/demo_validation.ts +++ /dev/null @@ -1,605 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.4.0-235 - * - */ -import { Fluence, FluencePeer } from '@fluencelabs/fluence'; -import { - CallParams, - callFunction, - registerService, -} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2'; - - -// Services - -export interface EIPValidatorDef { - eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; -eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; -} -export function registerEIPValidator(service: EIPValidatorDef): void; -export function registerEIPValidator(serviceId: string, service: EIPValidatorDef): void; -export function registerEIPValidator(peer: FluencePeer, service: EIPValidatorDef): void; -export function registerEIPValidator(peer: FluencePeer, serviceId: string, service: EIPValidatorDef): void; - - -export function registerEIPValidator(...args: any) { - registerService( - args, - { - "defaultServiceId" : "EIPValidator", - "functions" : [ - { - "functionName" : "eip712_validation_string", - "argDefs" : [ - { - "name" : "eip_str", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "eip712_validation_url", - "argDefs" : [ - { - "name" : "eip_str", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - } - ] -} - ); -} - - - -export interface DataProviderDef { - clear_table: (password: string, callParams: CallParams<'password'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; -get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; -get_record_count: (callParams: CallParams) => number | Promise; -get_records: (callParams: CallParams) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; -} -export function registerDataProvider(service: DataProviderDef): void; -export function registerDataProvider(serviceId: string, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, serviceId: string, service: DataProviderDef): void; - - -export function registerDataProvider(...args: any) { - registerService( - args, - { - "defaultServiceId" : "DataProvider", - "functions" : [ - { - "functionName" : "clear_table", - "argDefs" : [ - { - "name" : "password", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "get_record", - "argDefs" : [ - { - "name" : "snapshot_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "get_record_count", - "argDefs" : [ - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "get_records", - "argDefs" : [ - ], - "returnType" : { - "tag" : "primitive" - } - } - ] -} - ); -} - -// Functions - -export type Delete_rowsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } -export function delete_rows(password: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(peer: FluencePeer, password: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "password") [] password) - ) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("DataProvider" "clear_table") [password] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "delete_rows", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "password", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - -export type Get_recordResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } -export function get_record(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_record(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_record(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "snapshot_id") [] snapshot_id) - ) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("DataProvider" "get_record") [snapshot_id] res) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [res]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "get_record", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "snapshot_id", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - - -export function validate(eip712_url: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function validate(peer: FluencePeer, eip712_url: string, node: string, relay: string, config?: {ttl?: number}): Promise; -export function validate(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "eip712_url") [] eip712_url) - ) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("EIPValidator" "eip712_validation_url") [eip712_url node] res) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [res]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "validate", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "eip712_url", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - - -export function get_record_count(node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_record_count(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_record_count(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("DataProvider" "get_record_count") [] res) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [res]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "get_record_count", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - -export type Get_recordsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } -export function get_records(node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_records(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_records(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "node") [] node) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call node ("DataProvider" "get_records") [] res) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [res]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "get_records", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "node", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} diff --git a/peer-node/src/_aqua/snapshot.ts b/peer-node/src/_aqua/snapshot.ts index d868407..3a93c8e 100644 --- a/peer-node/src/_aqua/snapshot.ts +++ b/peer-node/src/_aqua/snapshot.ts @@ -17,8 +17,8 @@ import { // Services export interface EIPValidatorDef { - eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; -eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; + eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => { stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; } | Promise<{ stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; }>; +eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => { stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; } | Promise<{ stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; }>; } export function registerEIPValidator(service: EIPValidatorDef): void; export function registerEIPValidator(serviceId: string, service: EIPValidatorDef): void; @@ -80,7 +80,7 @@ export function registerEIPValidator(...args: any) { export interface DataProviderDef { - clear_table: (password: string, callParams: CallParams<'password'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; + delete_records: (password: string, callParams: CallParams<'password'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; get_record_count: (callParams: CallParams) => number | Promise; get_records: (callParams: CallParams) => { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } | Promise<{ stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; }>; @@ -98,7 +98,7 @@ export function registerDataProvider(...args: any) { "defaultServiceId" : "snapshot", "functions" : [ { - "functionName" : "clear_table", + "functionName" : "delete_records", "argDefs" : [ { "name" : "password", @@ -148,104 +148,9 @@ export function registerDataProvider(...args: any) { // Functions -export type Delete_rowsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } -export function delete_rows(passwd: string, peer_: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(peer: FluencePeer, passwd: string, peer_: string, relay: string, config?: {ttl?: number}): Promise; -export function delete_rows(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "passwd") [] passwd) - ) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call peer ("snapshot" "clear_table") [passwd] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "delete_rows", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "passwd", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - - -export function validate_from_url(relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; -export function validate_from_url(peer: FluencePeer, relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; +export type Validate_from_urlResult = { stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; } +export function validate_from_url(relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; +export function validate_from_url(peer: FluencePeer, relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; export function validate_from_url(...args: any) { let script = ` @@ -519,9 +424,104 @@ export function get_record(...args: any) { } +export type Delete_recordsResult = { stderr: string; stdout: { eip712_doc: string; eip_validation: boolean; event_address: string; event_signature: string; peer_id: string; signed_response: string; snapshot_id: number; timestamp: number; ts_validation: boolean; }[]; } +export function delete_records(passwd: string, peer_: string, relay: string, config?: {ttl?: number}): Promise; +export function delete_records(peer: FluencePeer, passwd: string, peer_: string, relay: string, config?: {ttl?: number}): Promise; +export function delete_records(...args: any) { -export function validate(relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; -export function validate(peer: FluencePeer, relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; + let script = ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "passwd") [] passwd) + ) + (call %init_peer_id% ("getDataSrv" "peer") [] peer) + ) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + ) + (call -relay- ("op" "noop") []) + ) + (call relay ("op" "noop") []) + ) + (xor + (call peer ("snapshot" "delete_records") [passwd] result) + (seq + (seq + (seq + (call relay ("op" "noop") []) + (call -relay- ("op" "noop") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "noop") []) + ) + ) + ) + (call relay ("op" "noop") []) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + ` + return callFunction( + args, + { + "functionName" : "delete_records", + "returnType" : { + "tag" : "primitive" + }, + "argDefs" : [ + { + "name" : "passwd", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "peer", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "relay", + "argType" : { + "tag" : "primitive" + } + } + ], + "names" : { + "relay" : "-relay-", + "getDataSrv" : "getDataSrv", + "callbackSrv" : "callbackSrv", + "responseSrv" : "callbackSrv", + "responseFnName" : "response", + "errorHandlingSrv" : "errorHandlingSrv", + "errorFnName" : "error" + } +}, + script + ) +} + + +export type ValidateResult = { stderr: string; stdout: { signature: string; validation: { eip_validation: boolean; peer_id: string; timestamp: number; ts_validation: boolean; }; }; } +export function validate(relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; +export function validate(peer: FluencePeer, relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; export function validate(...args: any) { let script = ` diff --git a/peer-node/src/_aqua/snapshot.ts.bk b/peer-node/src/_aqua/snapshot.ts.bk deleted file mode 100644 index 1397783..0000000 --- a/peer-node/src/_aqua/snapshot.ts.bk +++ /dev/null @@ -1,495 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.4.0-235 - * - */ -import { Fluence, FluencePeer } from '@fluencelabs/fluence'; -import { - CallParams, - callFunction, - registerService, -} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2'; - - -// Services - -export interface ProVoValidationDef { - eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; -eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string | Promise; -} -export function registerProVoValidation(service: ProVoValidationDef): void; -export function registerProVoValidation(serviceId: string, service: ProVoValidationDef): void; -export function registerProVoValidation(peer: FluencePeer, service: ProVoValidationDef): void; -export function registerProVoValidation(peer: FluencePeer, serviceId: string, service: ProVoValidationDef): void; - - -export function registerProVoValidation(...args: any) { - registerService( - args, - { - "defaultServiceId" : "snapshot", - "functions" : [ - { - "functionName" : "eip712_validation_string", - "argDefs" : [ - { - "name" : "eip_str", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "eip712_validation_url", - "argDefs" : [ - { - "name" : "eip_str", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - } - ] -} - ); -} - - - -export interface DataProviderDef { - get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { snapshot_id: number; } | Promise<{ snapshot_id: number; }>; -get_records: (callParams: CallParams) => { snapshot_id: number; }[] | Promise<{ snapshot_id: number; }[]>; -} -export function registerDataProvider(service: DataProviderDef): void; -export function registerDataProvider(serviceId: string, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, serviceId: string, service: DataProviderDef): void; - - -export function registerDataProvider(...args: any) { - registerService( - args, - { - "defaultServiceId" : "snapshot", - "functions" : [ - { - "functionName" : "get_record", - "argDefs" : [ - { - "name" : "snapshot_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "returnType" : { - "tag" : "primitive" - } - }, - { - "functionName" : "get_records", - "argDefs" : [ - ], - "returnType" : { - "tag" : "primitive" - } - } - ] -} - ); -} - -// Functions - - -export function validate(relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; -export function validate(peer: FluencePeer, relay: string, peer_: string, eip712_json: string, config?: {ttl?: number}): Promise; -export function validate(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call %init_peer_id% ("getDataSrv" "eip712_json") [] eip712_json) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call peer ("snapshot" "eip712_validation_string") [eip712_json peer] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "validate", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "eip712_json", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - - -export function validate_from_url(relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; -export function validate_from_url(peer: FluencePeer, relay: string, peer_: string, eip712_url: string, config?: {ttl?: number}): Promise; -export function validate_from_url(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call %init_peer_id% ("getDataSrv" "eip712_url") [] eip712_url) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call peer ("snapshot" "eip712_validation_url") [eip712_url peer] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "validate_from_url", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "eip712_url", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - -export type Get_recordResult = { snapshot_id: number; } -export function get_record(relay: string, peer_: string, snapshot_id: number, config?: {ttl?: number}): Promise; -export function get_record(peer: FluencePeer, relay: string, peer_: string, snapshot_id: number, config?: {ttl?: number}): Promise; -export function get_record(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call %init_peer_id% ("getDataSrv" "snapshot_id") [] snapshot_id) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call peer ("snapshot" "get_record") [snapshot_id] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "get_record", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "snapshot_id", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} - - - -export function get_records(relay: string, peer_: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; -export function get_records(peer: FluencePeer, relay: string, peer_: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; -export function get_records(...args: any) { - - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "relay") [] relay) - ) - (call %init_peer_id% ("getDataSrv" "peer") [] peer) - ) - (call -relay- ("op" "noop") []) - ) - (call relay ("op" "noop") []) - ) - (xor - (call peer ("snapshot" "get_records") [] result) - (seq - (seq - (seq - (call relay ("op" "noop") []) - (call -relay- ("op" "noop") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - (call -relay- ("op" "noop") []) - ) - ) - ) - (call relay ("op" "noop") []) - ) - (call -relay- ("op" "noop") []) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [result]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) - ) - ` - return callFunction( - args, - { - "functionName" : "get_records", - "returnType" : { - "tag" : "primitive" - }, - "argDefs" : [ - { - "name" : "relay", - "argType" : { - "tag" : "primitive" - } - }, - { - "name" : "peer", - "argType" : { - "tag" : "primitive" - } - } - ], - "names" : { - "relay" : "-relay-", - "getDataSrv" : "getDataSrv", - "callbackSrv" : "callbackSrv", - "responseSrv" : "callbackSrv", - "responseFnName" : "response", - "errorHandlingSrv" : "errorHandlingSrv", - "errorFnName" : "error" - } -}, - script - ) -} diff --git a/peer-node/src/eip_processor.ts b/peer-node/src/eip_processor.ts index ffd4bb7..1987a1a 100644 --- a/peer-node/src/eip_processor.ts +++ b/peer-node/src/eip_processor.ts @@ -25,7 +25,6 @@ function ts_comp(peer_ts: number, snapshot_ts: number, ts_delta: number): boolea return false; } - function check_signature(eip_obj: any): boolean { const signing_addr = ethers.utils.verifyTypedData(eip_obj.data.domain, eip_obj.data.types, eip_obj.data.message, eip_obj.sig); @@ -34,7 +33,6 @@ function check_signature(eip_obj: any): boolean { return sig_assert; } - // export async function eip_validation(eip_str: string, peer_id: string): Promise { export function eip_validation(eip_str: string, peer_id: string): Response { diff --git a/peer-node/src/index.ts b/peer-node/src/index.ts index c756b89..0389049 100644 --- a/peer-node/src/index.ts +++ b/peer-node/src/index.ts @@ -1,11 +1,12 @@ import { Fluence, KeyPair } from "@fluencelabs/fluence"; import { krasnodar } from "@fluencelabs/fluence-network-environment"; import { registerEIPValidator, EIPValidatorDef, registerDataProvider, DataProviderDef } from "./_aqua/snapshot"; -import { eip_validation, Response } from "./eip_processor"; -import { get_db, create_table, insert_event, DBRecord, DBResult, select_events, select_event, select_count } from './local_db'; +import { eip_validation, Response as EIPResponse } from "./eip_processor"; +import { get_db, create_table, delete_records, insert_event, DBRecord, DBResult, select_events, select_event, select_count } from './local_db'; import got from 'got'; import { ethers } from "ethers"; import { create_wallet, sign_response } from "./utils"; +import { ResultCodes } from "@fluencelabs/fluence/dist/internal/commonTypes"; // Arbitrary secret key that could be read from file, CLI arg or db @@ -15,10 +16,18 @@ const SecretKey = "0x01234567890123456789012345678901234567890123456789012345678 // SQLite path const DB_PATH = "./data/snapshot.db"; +export interface ValidationResponse { + signature: string; + validation: EIPResponse; +} +interface ValidationResult { + stderr: string; + stdout: ValidationResponse; +} // class exposed as service `EIPValidation` in snapshot.aqua class EIPValidator implements EIPValidatorDef { - async eip712_validation_string(eip712_json: string): Promise { + async eip712_validation_string(eip712_json: string): Promise { // todo: pre-create wallet and read from file. there should be one static wallet for the life of the client node const wallet = create_wallet(SecretKey); let response = eip_validation(eip712_json, wallet.address); @@ -27,45 +36,43 @@ class EIPValidator implements EIPValidatorDef { console.log("eip validation response: ", resp_str); const signed_response = await wallet.signMessage(resp_str); - console.log("signed response: ", signed_response); + let obj: ValidationResponse = { "signature": signed_response, "validation": response }; - // verify test - // const address = ethers.utils.verifyMessage(resp_str, signed_response); - // console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); + // commit to local sqlite + let db = get_db(DB_PATH); + await create_table(db); + await insert_event(db, JSON.parse(resp_str), response, signed_response); - // console.log(resp_str); - let obj = { "signature": signed_response, "validation": response }; + let result = {} as ValidationResult; + result.stderr = ""; + result.stdout = obj; - return JSON.stringify(obj); + return result; } - async eip712_validation_url(eip712_url: string): Promise { + async eip712_validation_url(eip712_url: string): Promise { - const eip = await got.get('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS'); + const eip = await got.get(eip712_url); const eip_json = eip.body; - // todo: need to fix this to use local peer key const wallet = create_wallet(SecretKey); let response = eip_validation(eip_json, wallet.address); const resp_str = JSON.stringify(response); const signed_response = await wallet.signMessage(resp_str); - - // verify test - // const address = ethers.utils.verifyMessage(resp_str, signed_response); - // console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); - - // console.log(resp_str); - - let obj = { "signature": signed_response, "validation": response }; + let obj: ValidationResponse = { "signature": signed_response, "validation": response }; // commit to local sqlite let db = get_db(DB_PATH); await create_table(db); await insert_event(db, JSON.parse(eip_json), response, signed_response); - return JSON.stringify(obj); + let result = {} as ValidationResult; + result.stderr = ""; + result.stdout = obj; + + return result; } } @@ -93,8 +100,8 @@ class DataProvider implements DataProviderDef { } // clear table -- illustrative purposes only - async clear_table(password: string): Promise { - return this.clear_table(password); + async delete_records(password: string): Promise { + return await delete_records(password); } } diff --git a/peer-node/src/index.ts.bk b/peer-node/src/index.ts.bk deleted file mode 100644 index bfb0ccb..0000000 --- a/peer-node/src/index.ts.bk +++ /dev/null @@ -1,137 +0,0 @@ -import { Fluence, KeyPair } from "@fluencelabs/fluence"; -import { krasnodar } from "@fluencelabs/fluence-network-environment"; -import { registerEIPValidator, EIPValidatorDef, registerDataProvider, DataProviderDef } from "./_aqua/snapshot"; -import { ethers } from "ethers"; -import { TypedDataUtils } from 'ethers-eip712'; // https://github.com/0xsequence/ethers-eip712 -import { eip_validation, Response } from "./eip_processor"; -import { get_db, create_table, insert_event, DBRecord, DBResult, select_events, select_event } from './local_db'; -import got from 'got'; -import { base64 } from "ethers/lib/utils"; - - -// Arbitrary secret key that could be read from file, CLI arg or db -// We derive both the PeerId and the (ethers) wallet from this key -const SecretKey = "0x0123456789012345678901234567890123456789012345678901234567890123"; -const DB_PATH = "./data/snapshot.db"; - - -function create_wallet(sk: string): ethers.Wallet { - return new ethers.Wallet(sk); -} - -function sign_response(wallet: ethers.Wallet, response: Response): Promise { - const signed_msg = wallet.signMessage(JSON.stringify(response)); - return signed_msg; -} - -// class exposed as service `EIPValidation` in snapshot.aqua -class EIPValidator implements EIPValidatorDef { - - async eip712_validation_string(eip712_json: string): Promise { - // todo: need to fix this to use local peer key - const wallet = create_wallet(SecretKey); - let response = eip_validation(eip712_json, wallet.address); - - const resp_str = JSON.stringify(response); - console.log("eip validation response: ", resp_str); - - const signed_response = await wallet.signMessage(resp_str); - console.log("signed response: ", signed_response); - - // verify test - // const address = ethers.utils.verifyMessage(resp_str, signed_response); - // console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); - - // console.log(resp_str); - let obj = { "signature": signed_response, "validation": response }; - - return JSON.stringify(obj); - } - - async eip712_validation_url(eip712_url: string): Promise { - - const eip = await got.get('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS'); - const eip_json = eip.body; - - // todo: need to fix this to use local peer key - const wallet = create_wallet(SecretKey); - let response = eip_validation(eip_json, wallet.address); - - const resp_str = JSON.stringify(response); - const signed_response = await wallet.signMessage(resp_str); - - - // verify test - // const address = ethers.utils.verifyMessage(resp_str, signed_response); - // console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); - - // console.log(resp_str); - - let obj = { "signature": signed_response, "validation": response }; - - // commit to local sqlite - let db = get_db(DB_PATH); - await create_table(db); - await insert_event(db, JSON.parse(eip_json), response, signed_response); - - return JSON.stringify(obj); - } - -} -// class exposed as service `DataProviderDef` in snapshot.aqua -class DataProvider implements DataProviderDef { - - async get_record(snapshot_id: number): Promise { - return select_event(snapshot_id); - - } - - async get_records(): Promise { - // todo: add pagination - const result = await select_events(); - console.log("get records: ", result); - return result; - } -} - - -async function startFluencePeer(skBytes: Uint8Array): Promise { - await Fluence.start({ - connectTo: krasnodar[0], - KeyPair: await KeyPair.fromEd25519SK(skBytes) - }); -} - -async function main() { - - let wallet = new ethers.Wallet(SecretKey); - console.log("wallet from sk: ", wallet.address); - console.log("wallet pk: ", wallet.publicKey); - - const skBytes: Uint8Array = ethers.utils.arrayify(SecretKey); - console.log("arrayify: ", skBytes); - - await startFluencePeer(skBytes); - - - console.log("PeerId: ", Fluence.getStatus().peerId); - console.log("Relay id: ", Fluence.getStatus().relayPeerId); - - // let peer = Fluence.getPeer(); - // console.log(peer); - // console.log(Fluence.KeyPair); - - registerEIPValidator("EIPValidator", new EIPValidator()); - registerDataProvider("DataProvider", new DataProvider); - - // const eip_doc: any = await got('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS').json(); - // console.log("eip json obj: ", eip_doc); - - // let obj = new EIPValidator(); - // let result = obj.eip712_validation_url(JSON.stringify(eip_doc)); - // console.log("result: ", result); - - // await Fluence.stop(); -} - -main(); \ No newline at end of file diff --git a/peer-node/src/local_db.ts b/peer-node/src/local_db.ts index 6c0af0f..b5cc581 100644 --- a/peer-node/src/local_db.ts +++ b/peer-node/src/local_db.ts @@ -151,8 +151,7 @@ export async function select_count(): Promise { }); }; - -export async function clear_table(pwd_hash: string): Promise { +export async function delete_records(pwd_hash: string): Promise { let result: DBResult = {} as DBResult; // todo: you know what to do if (pwd_hash === PWD_HASH) {