From 4cd2b7d75bfa3d73e2e7d367481849278958eae1 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 6 Oct 2021 15:41:31 +0300 Subject: [PATCH 01/19] using async branch version of fluence-js --- package.json | 2 +- src/_aqua/snapshot.ts | 713 ++++++++++++++++++++++++++++++++++++++++++ src/eip_processor.ts | 1 + src/index.ts | 11 +- 4 files changed, 721 insertions(+), 6 deletions(-) create mode 100644 src/_aqua/snapshot.ts diff --git a/package.json b/package.json index 5cf4b6f..4ee67d1 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.13.0", + "@fluencelabs/fluence": "0.10.4-async-454.0", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "ethers": "^5.4.7", diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts new file mode 100644 index 0000000..4940083 --- /dev/null +++ b/src/_aqua/snapshot.ts @@ -0,0 +1,713 @@ +/** + * + * 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.3.1-231 + * + */ +import { Fluence, FluencePeer } from "@fluencelabs/fluence"; +import { + ResultCodes, + RequestFlow, + RequestFlowBuilder, + CallParams, +} from "@fluencelabs/fluence/dist/internal/compilerSupport/v1"; + +function missingFields(obj: any, fields: string[]): string[] { + return fields.filter((f) => !(f in obj)); +} + +// 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) { + let peer: FluencePeer; + let serviceId: any; + let service: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + } else { + peer = Fluence.getPeer(); + } + + if (typeof args[0] === "string") { + serviceId = args[0]; + } else if (typeof args[1] === "string") { + serviceId = args[1]; + } else { + serviceId = "eip_validation"; + } + + // Figuring out which overload is the await service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!FluencePeer.isInstance(args[0]) && typeof args[0] === "object") { + service = args[0]; + } else if (typeof args[1] === "object") { + service = args[1]; + } else { + service = args[2]; + } + + const incorrectServiceDefinitions = missingFields(service, [ + "eip712_validation_string", + "eip712_validation_url", + ]); + if (!!incorrectServiceDefinitions.length) { + throw new Error( + "Error registering service ProVoValidation: missing functions: " + + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") + ); + } + + peer.internals.callServiceHandler.use(async (req, resp, next) => { + if (req.serviceId !== serviceId) { + await next(); + return; + } + + if (req.fnName === "eip712_validation_string") { + const callParams = { + ...req.particleContext, + tetraplets: { + eip_str: req.tetraplets[0], + peer_id: req.tetraplets[1], + }, + }; + resp.retCode = ResultCodes.success; + resp.result = await service.eip712_validation_string( + req.args[0], + req.args[1], + callParams + ); + } + + if (req.fnName === "eip712_validation_url") { + const callParams = { + ...req.particleContext, + tetraplets: { + eip_str: req.tetraplets[0], + peer_id: req.tetraplets[1], + }, + }; + resp.retCode = ResultCodes.success; + resp.result = await service.eip712_validation_url( + req.args[0], + req.args[1], + callParams + ); + } + + await next(); + }); +} + +export interface DataProviderDef { + get_record: ( + snapshot_id: number, + callParams: CallParams<"snapshot_id"> + ) => { snapshot_id: number }; + get_records: (callParams: CallParams) => { 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) { + let peer: FluencePeer; + let serviceId: any; + let service: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + } else { + peer = Fluence.getPeer(); + } + + if (typeof args[0] === "string") { + serviceId = args[0]; + } else if (typeof args[1] === "string") { + serviceId = args[1]; + } else { + serviceId = ""; + } + + // Figuring out which overload is the await service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!FluencePeer.isInstance(args[0]) && typeof args[0] === "object") { + service = args[0]; + } else if (typeof args[1] === "object") { + service = args[1]; + } else { + service = args[2]; + } + + const incorrectServiceDefinitions = missingFields(service, [ + "get_record", + "get_records", + ]); + if (!!incorrectServiceDefinitions.length) { + throw new Error( + "Error registering service DataProvider: missing functions: " + + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") + ); + } + + peer.internals.callServiceHandler.use(async (req, resp, next) => { + if (req.serviceId !== serviceId) { + await next(); + return; + } + + if (req.fnName === "get_record") { + const callParams = { + ...req.particleContext, + tetraplets: { + snapshot_id: req.tetraplets[0], + }, + }; + resp.retCode = ResultCodes.success; + resp.result = await service.get_record(req.args[0], callParams); + } + + if (req.fnName === "get_records") { + const callParams = { + ...req.particleContext, + tetraplets: {}, + }; + resp.retCode = ResultCodes.success; + resp.result = await service.get_records(callParams); + } + + await next(); + }); +} + +// 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 peer: FluencePeer; + let relay: any; + let peer_: any; + let eip712_json: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + relay = args[1]; + peer_ = args[2]; + eip712_json = args[3]; + config = args[4]; + } else { + peer = Fluence.getPeer(); + relay = args[0]; + peer_ = args[1]; + eip712_json = args[2]; + config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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 ("eip_validation" "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]) + ) + ` + ) + .configHandler((h) => { + h.on("getDataSrv", "-relay-", () => { + return peer.getStatus().relayPeerId; + }); + h.on("getDataSrv", "relay", () => { + return relay; + }); + h.on("getDataSrv", "peer", () => { + return peer_; + }); + h.on("getDataSrv", "eip712_json", () => { + return eip712_json; + }); + h.onEvent("callbackSrv", "response", (args) => { + const [res] = args; + resolve(res); + }); + h.onEvent("errorHandlingSrv", "error", (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject("Request timed out for validate"); + }); + + if (config && config.ttl) { + r.withTTL(config.ttl); + } + + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + +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 peer: FluencePeer; + let relay: any; + let peer_: any; + let eip712_url: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + relay = args[1]; + peer_ = args[2]; + eip712_url = args[3]; + config = args[4]; + } else { + peer = Fluence.getPeer(); + relay = args[0]; + peer_ = args[1]; + eip712_url = args[2]; + config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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 ("eip_validation" "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]) + ) + ` + ) + .configHandler((h) => { + h.on("getDataSrv", "-relay-", () => { + return peer.getStatus().relayPeerId; + }); + h.on("getDataSrv", "relay", () => { + return relay; + }); + h.on("getDataSrv", "peer", () => { + return peer_; + }); + h.on("getDataSrv", "eip712_url", () => { + return eip712_url; + }); + h.onEvent("callbackSrv", "response", (args) => { + const [res] = args; + resolve(res); + }); + h.onEvent("errorHandlingSrv", "error", (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject("Request timed out for validate_from_url"); + }); + + if (config && config.ttl) { + r.withTTL(config.ttl); + } + + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + +export function get_record( + relay: string, + peer_: string, + snapshot_id: number, + config?: { ttl?: number } +): Promise<{ snapshot_id: number }>; +export function get_record( + peer: FluencePeer, + relay: string, + peer_: string, + snapshot_id: number, + config?: { ttl?: number } +): Promise<{ snapshot_id: number }>; +export function get_record(...args: any) { + let peer: FluencePeer; + let relay: any; + let peer_: any; + let snapshot_id: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + relay = args[1]; + peer_ = args[2]; + snapshot_id = args[3]; + config = args[4]; + } else { + peer = Fluence.getPeer(); + relay = args[0]; + peer_ = args[1]; + snapshot_id = args[2]; + config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{ snapshot_id: number }>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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 ("" "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]) + ) + ` + ) + .configHandler((h) => { + h.on("getDataSrv", "-relay-", () => { + return peer.getStatus().relayPeerId; + }); + h.on("getDataSrv", "relay", () => { + return relay; + }); + h.on("getDataSrv", "peer", () => { + return peer_; + }); + h.on("getDataSrv", "snapshot_id", () => { + return snapshot_id; + }); + h.onEvent("callbackSrv", "response", (args) => { + const [res] = args; + resolve(res); + }); + h.onEvent("errorHandlingSrv", "error", (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject("Request timed out for get_record"); + }); + + if (config && config.ttl) { + r.withTTL(config.ttl); + } + + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + +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 peer: FluencePeer; + let relay: any; + let peer_: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + relay = args[1]; + peer_ = args[2]; + config = args[3]; + } else { + peer = Fluence.getPeer(); + relay = args[0]; + peer_ = args[1]; + config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{ snapshot_id: number }[]>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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 ("" "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]) + ) + ` + ) + .configHandler((h) => { + h.on("getDataSrv", "-relay-", () => { + return peer.getStatus().relayPeerId; + }); + h.on("getDataSrv", "relay", () => { + return relay; + }); + h.on("getDataSrv", "peer", () => { + return peer_; + }); + h.onEvent("callbackSrv", "response", (args) => { + const [res] = args; + resolve(res); + }); + h.onEvent("errorHandlingSrv", "error", (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject("Request timed out for get_records"); + }); + + if (config && config.ttl) { + r.withTTL(config.ttl); + } + + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} diff --git a/src/eip_processor.ts b/src/eip_processor.ts index 1ecfffb..ffd4bb7 100644 --- a/src/eip_processor.ts +++ b/src/eip_processor.ts @@ -38,6 +38,7 @@ function check_signature(eip_obj: any): boolean { // export async function eip_validation(eip_str: string, peer_id: string): Promise { export function eip_validation(eip_str: string, peer_id: string): Response { + console.log("eip_str", eip_str) const eip_obj = JSON.parse(eip_str); console.log("eip doc parsed: ", eip_obj); diff --git a/src/index.ts b/src/index.ts index 4b86d7b..66e8806 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ function sign_response(wallet: ethers.Wallet, response: Response): Promise { // todo: need to fix this to use local peer key const wallet = create_wallet(); let response = eip_validation(eip712_json, wallet.address); @@ -27,7 +27,7 @@ class EIPValidator implements ProVoValidationDef { const resp_str = JSON.stringify(response); console.log("eip validation response: ", resp_str); - const signed_response = wallet.signMessage(resp_str); + const signed_response = await wallet.signMessage(resp_str); console.log("signed response: ", signed_response); // verify test @@ -39,16 +39,17 @@ class EIPValidator implements ProVoValidationDef { return JSON.stringify(obj); } - eip712_validation_url(eip712_url: string): string { + async eip712_validation_url(eip712_url: string): Promise { - const eip_json: any = got('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS').json(); + 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(); let response = eip_validation(eip_json, wallet.address); const resp_str = JSON.stringify(response); - const signed_response = wallet.signMessage(resp_str); + const signed_response = await wallet.signMessage(resp_str); // verify test From 41081910239a43cf01d69c7f06c614c941578a42 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 6 Oct 2021 19:39:57 +0300 Subject: [PATCH 02/19] update fluence-js version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4ee67d1..5ffb9ce 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.10.4-async-454.0", + "@fluencelabs/fluence": "0.10.4-async-457.0", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "ethers": "^5.4.7", From 32d4e6c822f27e276117310f24da2f686eb8646d Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 6 Oct 2021 19:46:34 +0300 Subject: [PATCH 03/19] Add sample KeyPair usage --- package.json | 1 + src/index.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/package.json b/package.json index 5ffb9ce..c41d045 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@fluencelabs/fluence": "0.10.4-async-457.0", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", + "base64-js": "^1.5.1", "ethers": "^5.4.7", "ethers-eip712": "^0.2.0", "got": "^11.8.2", diff --git a/src/index.ts b/src/index.ts index 66e8806..3ac8699 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import { TypedDataUtils } from 'ethers-eip712'; // https://github.com/0xsequenc import { eip_validation, Response } from "./eip_processor"; import { get_db, create_table, insert_event, DBRecord, select_events, select_event } from './local_db'; import got from 'got'; +import { base64 } from "ethers/lib/utils"; @@ -80,8 +81,12 @@ class DataProvider implements DataProviderDef { async function main_0() { + const skBase64 = 'z1x3cVXhk9nJKE1pZaX9KxccUBzxu3aGlaUjDdAB2oY='; + const skBytes = base64.decode(skBase64); + await Fluence.start({ connectTo: krasnodar[0], + KeyPair: await KeyPair.fromEd25519SK(skBytes) }); // const peer_data = Fluence.getPeer(); From fbf6540ed115934fb9641e9743b67608c978a942 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 6 Oct 2021 19:48:27 +0300 Subject: [PATCH 04/19] extract FluencePeer creation --- src/index.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3ac8699..7043247 100644 --- a/src/index.ts +++ b/src/index.ts @@ -81,13 +81,7 @@ class DataProvider implements DataProviderDef { async function main_0() { - const skBase64 = 'z1x3cVXhk9nJKE1pZaX9KxccUBzxu3aGlaUjDdAB2oY='; - const skBytes = base64.decode(skBase64); - - await Fluence.start({ - connectTo: krasnodar[0], - KeyPair: await KeyPair.fromEd25519SK(skBytes) - }); + await startFluencePeer(); // const peer_data = Fluence.getPeer(); // console.log("client data\n: ", peer_data); @@ -107,6 +101,16 @@ async function main_0() { } +async function startFluencePeer() { + const skBase64 = 'z1x3cVXhk9nJKE1pZaX9KxccUBzxu3aGlaUjDdAB2oY='; + const skBytes = base64.decode(skBase64); + + await Fluence.start({ + connectTo: krasnodar[0], + KeyPair: await KeyPair.fromEd25519SK(skBytes) + }); +} + async function main_2() { /* const DB_PATH = './data/snapshot.db'; @@ -168,10 +172,7 @@ async function main_2() { } async function main() { - - await Fluence.start({ - connectTo: krasnodar[0], - }); + await startFluencePeer() console.dir(Fluence); console.log("peer id : ", Fluence.getStatus().peerId); From f11396b91631beaeda3f40d7078bb7d537987ccc Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Thu, 7 Oct 2021 16:53:02 -0500 Subject: [PATCH 05/19] update, fix typos --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 65cab1d..0b94cdc 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ## Solution Overview -We implemented a Typescript Fluence peer to validate the timestamp of Snapshot events, i.e., proposals and votes, against te node-local timestamp, all UTC, as part of an EIP712 document. That is, the implmented peer exposes select interfaces to be use with Aqua and operates as an "almost" fully functional peer lacking predominantly the ability to run arbitrary Wasm services. In that sense, the node ma be considered as special service node. +We implemented a Typescript Fluence peer to validate the timestamp of Snapshot events, i.e., proposals and votes, against the node-local timestamp, all UTC. The Snapshot event is presented as a signed EIP712 document which is also verified. -In order to facilitate the validation, the peer accepts either an EIP712 json string or link to an url for a EIP712 json string representation, e.g., [IPFS](https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS). The high-level process is depicted in Figure 1. +The implemented peer exposes select interfaces to be used with Aqua and operates as a nearly fully functional peer lacking predominantly the ability to run arbitrary Wasm services. In that sense, the node may be considered a special-purpose service node. In order to facilitate the validations, the peer accepts either an EIP712 json string or link to an url for an EIP712 json string representation, e.g., [IPFS](https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS). The high-level process is depicted in Figure 1. ```mermaid sequenceDiagram @@ -28,7 +28,7 @@ In order to facilitate the validation, the peer accepts either an EIP712 json st N ->> D: Persist result -- NOT implemented ``` -The PoC implementation does not provide integration with external Snapshot distributed databases but allows for easy extension to incorporate exogenous persistence solutions. The validation process, including not implemented checks, can be found in [eip_validation](./src/eip_processor.ts) and the local persistence in [local sqlite](./src/local_db.ts). +The PoC implementation does not provide integration with external Snapshot distributed persistence but allows for easy extension to incorporate exogenous storage solutions. The validation process, including not implemented checks, can be found in [eip_validation](./src/eip_processor.ts) and the local persistence in [local sqlite](./src/local_db.ts). In order to access the services with Aqua, please see [implementation](./aqua/snapshot.aqua), which can be fired from a Typescript client, another peer or the `fldist` command line tool. From aa69c42dc0fdfa34d3727a28da0b7d071d3d5235 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Fri, 8 Oct 2021 18:22:18 -0500 Subject: [PATCH 06/19] update workflow, demo aqua --- README.md | 2 +- aqua/snapshot.aqua | 4 +- src/_aqua/snapshot.ts | 4 +- src/index.ts | 135 +++++++++--------------------------------- 4 files changed, 34 insertions(+), 111 deletions(-) diff --git a/README.md b/README.md index 0b94cdc..f1a3e68 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The implemented peer exposes select interfaces to be used with Aqua and operates The PoC implementation does not provide integration with external Snapshot distributed persistence but allows for easy extension to incorporate exogenous storage solutions. The validation process, including not implemented checks, can be found in [eip_validation](./src/eip_processor.ts) and the local persistence in [local sqlite](./src/local_db.ts). -In order to access the services with Aqua, please see [implementation](./aqua/snapshot.aqua), which can be fired from a Typescript client, another peer or the `fldist` command line tool. +In order to access the services with Aqua, please see [implementation](./aqua/snapshot.aqua), which can be fired from a Typescript client, another peer or the `fldist` command line tool. In addition, Aqua can be used to query a Peer's local database for already processed validations. This allows new peers, for example, to build up a local history of previously validated events, if so desired. Please note that a consensus algorithm should be implemented and used to manage the sync process. The query process is outlined in Figure 2 below and the Aqua queries are located in [snapshot aqua](./aqua/snapshot.aqua). diff --git a/aqua/snapshot.aqua b/aqua/snapshot.aqua index bf14791..33c8d5b 100644 --- a/aqua/snapshot.aqua +++ b/aqua/snapshot.aqua @@ -7,11 +7,11 @@ data PVResponse: data DBResponse: snapshot_id: u64 -service ProVoValidation("eip_validation"): +service ProVoValidation("snapshot"): eip712_validation_string(eip_str: string, peer_id: string) -> string eip712_validation_url(eip_str: string, peer_id: string) -> string -service DataProvider(""): +service DataProvider("snapshot"): get_records() -> []DBResponse get_record(snapshot_id: u64) -> DBResponse diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts index 4940083..d97a8b9 100644 --- a/src/_aqua/snapshot.ts +++ b/src/_aqua/snapshot.ts @@ -85,7 +85,7 @@ export function registerProVoValidation(...args: any) { if (!!incorrectServiceDefinitions.length) { throw new Error( "Error registering service ProVoValidation: missing functions: " + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") ); } @@ -191,7 +191,7 @@ export function registerDataProvider(...args: any) { if (!!incorrectServiceDefinitions.length) { throw new Error( "Error registering service DataProvider: missing functions: " + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") ); } diff --git a/src/index.ts b/src/index.ts index 7043247..b1cdff3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,9 +9,13 @@ 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"; -function create_wallet(): ethers.Wallet { - return ethers.Wallet.createRandom(); + +function create_wallet(sk: string): ethers.Wallet { + return new ethers.Wallet(sk); } function sign_response(wallet: ethers.Wallet, response: Response): Promise { @@ -22,7 +26,7 @@ class EIPValidator implements ProVoValidationDef { async eip712_validation_string(eip712_json: string): Promise { // todo: need to fix this to use local peer key - const wallet = create_wallet(); + const wallet = create_wallet(SecretKey); let response = eip_validation(eip712_json, wallet.address); const resp_str = JSON.stringify(response); @@ -46,7 +50,7 @@ class EIPValidator implements ProVoValidationDef { const eip_json = eip.body; // todo: need to fix this to use local peer key - const wallet = create_wallet(); + const wallet = create_wallet(SecretKey); let response = eip_validation(eip_json, wallet.address); const resp_str = JSON.stringify(response); @@ -64,7 +68,6 @@ class EIPValidator implements ProVoValidationDef { } } - class DataProvider implements DataProviderDef { get_record(snapshot_id: number) { @@ -79,123 +82,43 @@ class DataProvider implements DataProviderDef { } -async function main_0() { - - await startFluencePeer(); - - // const peer_data = Fluence.getPeer(); - // console.log("client data\n: ", peer_data); - - console.log("application started"); - console.log("peer id is: ", Fluence.getStatus().peerId); - console.log("relay is: ", Fluence.getStatus().relayPeerId); - - registerProVoValidation(new EIPValidator()); - registerDataProvider(new DataProvider); - - // test - - - // await Fluence.stop(); - -} - - -async function startFluencePeer() { - const skBase64 = 'z1x3cVXhk9nJKE1pZaX9KxccUBzxu3aGlaUjDdAB2oY='; - const skBytes = base64.decode(skBase64); - +async function startFluencePeer(skBytes: Uint8Array): Promise { await Fluence.start({ connectTo: krasnodar[0], KeyPair: await KeyPair.fromEd25519SK(skBytes) }); } -async function main_2() { - /* - const DB_PATH = './data/snapshot.db'; - - // https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS - // should come from Aqua - // note: I changed \" to \\" in order for JSON.parse to work - const eip712_doc = `{"address":"0xeF8305E140ac520225DAf050e2f71d5fBcC543e7","sig":"0xc0a90a0bf43c0b774570608bf0279143b366b7880798112b678b416a7500576b41e19f7b4eb457d58de29be3a201f700fafab1f02179da0faae653b7e8ecf82b1c","data":{"domain":{"name":"snapshot","version":"0.1.4"},"types":{"Proposal":[{"name":"from","type":"address"},{"name":"space","type":"string"},{"name":"timestamp","type":"uint64"},{"name":"type","type":"string"},{"name":"title","type":"string"},{"name":"body","type":"string"},{"name":"choices","type":"string[]"},{"name":"start","type":"uint64"},{"name":"end","type":"uint64"},{"name":"snapshot","type":"uint64"},{"name":"network","type":"string"},{"name":"strategies","type":"string"},{"name":"plugins","type":"string"},{"name":"metadata","type":"string"}]},"message":{"space":"fabien.eth","type":"single-choice","title":"This is a long title this is a long title this is a long title this is a long title this is a long title this is a long","body":"This is a long title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title title this is a long title this is a long title.","choices":["Approve","Reject"],"start":1630472400,"end":1640926800,"snapshot":9278489,"network":"4","strategies":"[{\\"name\\":\\"ticket\\",\\"params\\":{\\"value\\":100,\\"symbol\\":\\"$\\"}}]","plugins":"{}","metadata":"{}","from":"0xeF8305E140ac520225DAf050e2f71d5fBcC543e7","timestamp":1631432106}}}`; - - // todo: replace with actual peer pk and sk - const wallet = create_wallet(); - const peer_id = wallet.address; - let response = await eip_validation(eip712_doc, peer_id); - - - - // stringify, hexlify, hash and sign response - const resp_str = JSON.stringify(response); - console.log("eip validation response: ", resp_str); - - // just sign the raw message string for a long message - const signed_response = await wallet.signMessage(resp_str); - console.log("signed response: ", signed_response); - - // verify - const address = ethers.utils.verifyMessage(resp_str, signed_response); - console.log("verify signature. peer_id: ", peer_id, " verified addr: ", address, " equal: ", peer_id === address); - - var db = get_db(DB_PATH); - const _table = await create_table(db); - console.log("table: ", _table); - - var _insert = await insert_event(db, JSON.parse(eip712_doc), response, signed_response); - console.log("insert: ", _insert); - - - var _select = await select_events(); - console.log("select all:\n", _select, "\n"); - - var _select = await select_event(9278489); - console.log("select one (9278489):\n", _select, "\n"); - - - // db.close(); - */ - - const eip_doc: any = await got('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS').json(); - - console.log("data: ", typeof (eip_doc)); - // console.log("data: ", eip_doc); - console.log("address: ", eip_doc.address); - console.log("signature: ", eip_doc.sig); - console.log("eip doc ", eip_doc.data); - - - var response = await eip_validation(JSON.stringify(eip_doc), "1234"); - console.log(response); - -} - async function main() { - await startFluencePeer() - console.dir(Fluence); - console.log("peer id : ", Fluence.getStatus().peerId); - console.log("relay id: ", Fluence.getStatus().relayPeerId); - console.log("status : ", Fluence.getStatus()); - console.log("\n\n"); + let wallet = new ethers.Wallet(SecretKey); + console.log("wallet from sk: ", wallet.address); + console.log("wallet pk: ", wallet.publicKey); - let peer = Fluence.getPeer(); + const skBytes: Uint8Array = ethers.utils.arrayify(SecretKey); + console.log("arraify: ", 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); - - registerProVoValidation(new EIPValidator()); registerDataProvider(new DataProvider); - const eip_doc: any = await got('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS').json(); - console.log("eip json obj: ", eip_doc); + // 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(); + // 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 From ba88d1dfced0987bb1a528f5414f21feedcba683 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Mon, 11 Oct 2021 01:36:53 -0500 Subject: [PATCH 07/19] update services --- aqua/demo_validation.aqua | 32 ++++++++++++++++++++++++++++++++ src/index.ts | 6 +++--- 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 aqua/demo_validation.aqua diff --git a/aqua/demo_validation.aqua b/aqua/demo_validation.aqua new file mode 100644 index 0000000..40f6936 --- /dev/null +++ b/aqua/demo_validation.aqua @@ -0,0 +1,32 @@ +data PVResponse: + peer_id: string + timestamp: u64 + eip_validation: bool + ts_validation: bool + +data DBResponse: + snapshot_id: u64 + +service ProVoValidation("EIPValidator"): + eip712_validation_string(eip_str: string, peer_id: string) -> string + eip712_validation_url(eip_str: string, peer_id: string) -> string + +service DataProvider("DataProvider"): + get_records() -> []DBResponse + get_record(snapshot_id: u64) -> DBResponse + + +func validate(eip712_url: string, node: string, relay:string) -> string: + on node via relay: + res <- ProVoValidation.eip712_validation_url(eip712_url, node) + <- res + +func get_all_validations(node: string, relay:string) -> []DBResponse: + on node via relay: + res <- DataProvider.get_records() + <- res + +func get_validation(snapshot_id: u64, node: string, relay:string) -> DBResponse: + on node via relay: + res <- DataProvider.get_record(snapshot_id) + <- res \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index b1cdff3..58c0cfc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -71,12 +71,12 @@ class EIPValidator implements ProVoValidationDef { class DataProvider implements DataProviderDef { get_record(snapshot_id: number) { - // todo: add pagination return select_event(snapshot_id); } get_records() { + // todo: add pagination return select_events(); } } @@ -108,8 +108,8 @@ async function main() { // console.log(peer); // console.log(Fluence.KeyPair); - registerProVoValidation(new EIPValidator()); - registerDataProvider(new DataProvider); + registerProVoValidation("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); From a4c4ac02653daf98e7d4d101ae19f08fab732b79 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Mon, 11 Oct 2021 17:58:45 -0500 Subject: [PATCH 08/19] add dir --- air-scripts/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 air-scripts/.gitkeep diff --git a/air-scripts/.gitkeep b/air-scripts/.gitkeep new file mode 100644 index 0000000..e69de29 From a31951315585bfd346836a4e8c75ece2e25b3067 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Mon, 11 Oct 2021 18:52:25 -0500 Subject: [PATCH 09/19] add client --- client-peer/.gitignore | 2 ++ client-peer/package.json | 26 +++++++++++++++ client-peer/src/index.ts | 47 ++++++++++++++++++++++++++ client-peer/tsconfig.json | 69 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 client-peer/.gitignore create mode 100644 client-peer/package.json create mode 100644 client-peer/src/index.ts create mode 100644 client-peer/tsconfig.json diff --git a/client-peer/.gitignore b/client-peer/.gitignore new file mode 100644 index 0000000..11985a1 --- /dev/null +++ b/client-peer/.gitignore @@ -0,0 +1,2 @@ +dist/ +src/_aqua/ \ No newline at end of file diff --git a/client-peer/package.json b/client-peer/package.json new file mode 100644 index 0000000..304c7e4 --- /dev/null +++ b/client-peer/package.json @@ -0,0 +1,26 @@ +{ + "name": "snapshot-client", + "version": "0.1.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node -r ts-node/register src/index.ts", + "compile-aqua": "aqua -i ../aqua/demo_validation.aqua -o ./src/_aqua", + "watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\"" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "@fluencelabs/aqua": "^0.3.1-231", + "chokidar-cli": "^3.0.0", + "ts-node": "^10.2.1", + "typescript": "^4.4.2" + }, + "dependencies": { + "@fluencelabs/fluence": "0.10.4-async-457.0", + "@fluencelabs/fluence-network-environment": "1.0.10", + "@types/sqlite3": "^3.1.7", + "base64-js": "^1.5.1", + "got": "^11.8.2" + } +} diff --git a/client-peer/src/index.ts b/client-peer/src/index.ts new file mode 100644 index 0000000..7b0b4b8 --- /dev/null +++ b/client-peer/src/index.ts @@ -0,0 +1,47 @@ +/* + * Copyright 2021 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Fluence, KeyPair } from "@fluencelabs/fluence"; +import { krasnodar } from "@fluencelabs/fluence-network-environment"; +import { validate } from "./_aqua/demo_validation"; + + +const NODE_ID: string = "12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e"; +const RELAY_ID: string = "12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e"; +const EIP_URL: string = "https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS"; + +async function main() { + await Fluence.start({ + connectTo: krasnodar[0], + }); + + console.log("application started"); + console.log("peer id is: ", Fluence.getStatus().peerId); + console.log("relay is: ", Fluence.getStatus().relayPeerId, "\n\n"); + + + const result = await validate(EIP_URL, NODE_ID, RELAY_ID); + console.log("validation result: ", result); + + await Fluence.stop(); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/client-peer/tsconfig.json b/client-peer/tsconfig.json new file mode 100644 index 0000000..909f5f9 --- /dev/null +++ b/client-peer/tsconfig.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} \ No newline at end of file From fb27686429d623cabddb8f9285a18e422bec5742 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Mon, 11 Oct 2021 18:58:37 -0500 Subject: [PATCH 10/19] add compiled aqua --- client-peer/src/_aqua/demo_validation.ts | 504 +++++++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 client-peer/src/_aqua/demo_validation.ts diff --git a/client-peer/src/_aqua/demo_validation.ts b/client-peer/src/_aqua/demo_validation.ts new file mode 100644 index 0000000..e23014e --- /dev/null +++ b/client-peer/src/_aqua/demo_validation.ts @@ -0,0 +1,504 @@ +/** + * + * 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.3.0-226 + * + */ +import { Fluence, FluencePeer } from '@fluencelabs/fluence'; +import { + ResultCodes, + RequestFlow, + RequestFlowBuilder, + CallParams, +} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1'; + + +// Services + +export interface ProVoValidationDef { + eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; + eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; +} + +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) { + let peer: FluencePeer; + let serviceId: any; + let service: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + } else { + peer = Fluence.getPeer(); + } + + if (typeof args[0] === 'string') { + serviceId = args[0]; + } else if (typeof args[1] === 'string') { + serviceId = args[1]; + } + else { + serviceId = "EIPValidator" + } + + // Figuring out which overload is the service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { + service = args[0]; + } else if (typeof args[1] === 'object') { + service = args[1]; + } else { + service = args[2]; + } + + peer.internals.callServiceHandler.use((req, resp, next) => { + if (req.serviceId !== serviceId) { + next(); + return; + } + + + if (req.fnName === 'eip712_validation_string') { + + const callParams = { + ...req.particleContext, + tetraplets: { + eip_str: req.tetraplets[0], peer_id: req.tetraplets[1] + }, + }; + resp.retCode = ResultCodes.success; + resp.result = service.eip712_validation_string(req.args[0], req.args[1], callParams) + + } + + + + if (req.fnName === 'eip712_validation_url') { + + const callParams = { + ...req.particleContext, + tetraplets: { + eip_str: req.tetraplets[0], peer_id: req.tetraplets[1] + }, + }; + resp.retCode = ResultCodes.success; + resp.result = service.eip712_validation_url(req.args[0], req.args[1], callParams) + + } + + + next(); + }); +} + + + +export interface DataProviderDef { + get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { snapshot_id: number }; + get_records: (callParams: CallParams) => { 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) { + let peer: FluencePeer; + let serviceId: any; + let service: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + } else { + peer = Fluence.getPeer(); + } + + if (typeof args[0] === 'string') { + serviceId = args[0]; + } else if (typeof args[1] === 'string') { + serviceId = args[1]; + } + else { + serviceId = "DataProvider" + } + + // Figuring out which overload is the service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { + service = args[0]; + } else if (typeof args[1] === 'object') { + service = args[1]; + } else { + service = args[2]; + } + + peer.internals.callServiceHandler.use((req, resp, next) => { + if (req.serviceId !== serviceId) { + next(); + return; + } + + + if (req.fnName === 'get_record') { + + const callParams = { + ...req.particleContext, + tetraplets: { + snapshot_id: req.tetraplets[0] + }, + }; + resp.retCode = ResultCodes.success; + resp.result = service.get_record(req.args[0], callParams) + + } + + + + if (req.fnName === 'get_records') { + + const callParams = { + ...req.particleContext, + tetraplets: { + + }, + }; + resp.retCode = ResultCodes.success; + resp.result = service.get_records(callParams) + + } + + + next(); + }); +} + + +// Functions + +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 peer: FluencePeer; + let eip712_url: any; + let node: any; + let relay: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + eip712_url = args[1]; + node = args[2]; + relay = args[3]; + config = args[4]; + } else { + peer = Fluence.getPeer(); + eip712_url = args[0]; + node = args[1]; + relay = args[2]; + config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'eip712_url', () => { return eip712_url; }); + h.on('getDataSrv', 'node', () => { return node; }); + h.on('getDataSrv', 'relay', () => { return relay; }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for validate'); + }) + if (config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + +export function get_all_validations(node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }[]>; +export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }[]>; +export function get_all_validations(...args: any) { + let peer: FluencePeer; + let node: any; + let relay: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; + relay = args[2]; + config = args[3]; + } else { + peer = Fluence.getPeer(); + node = args[0]; + relay = args[1]; + config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{ snapshot_id: number }[]>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => { return node; }); + h.on('getDataSrv', 'relay', () => { return relay; }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_all_validations'); + }) + if (config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + +export function get_validation(snapshot_id: number, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }>; +export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }>; +export function get_validation(...args: any) { + let peer: FluencePeer; + let snapshot_id: any; + let node: any; + let relay: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + snapshot_id = args[1]; + node = args[2]; + relay = args[3]; + config = args[4]; + } else { + peer = Fluence.getPeer(); + snapshot_id = args[0]; + node = args[1]; + relay = args[2]; + config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{ snapshot_id: number }>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (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]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'snapshot_id', () => { return snapshot_id; }); + h.on('getDataSrv', 'node', () => { return node; }); + h.on('getDataSrv', 'relay', () => { return relay; }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_validation'); + }) + if (config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + From d3015794a6e7c88908b0a5827ca8c2faabbf6672 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Thu, 21 Oct 2021 00:10:01 +0300 Subject: [PATCH 11/19] Update fluence-js version and recompile with async version of Aqua compiler --- client-peer/package.json | 2 +- client-peer/src/_aqua/demo_validation.ts | 798 ++++++++++------------- client-peer/src/index.ts | 6 +- package.json | 2 +- src/_aqua/demo_validation.ts | 443 +++++++++++++ src/_aqua/snapshot.ts | 649 +++++++----------- 6 files changed, 1036 insertions(+), 864 deletions(-) create mode 100644 src/_aqua/demo_validation.ts diff --git a/client-peer/package.json b/client-peer/package.json index 304c7e4..26d5f8a 100644 --- a/client-peer/package.json +++ b/client-peer/package.json @@ -17,7 +17,7 @@ "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.10.4-async-457.0", + "@fluencelabs/fluence": "0.14.1", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "base64-js": "^1.5.1", diff --git a/client-peer/src/_aqua/demo_validation.ts b/client-peer/src/_aqua/demo_validation.ts index e23014e..ca6c532 100644 --- a/client-peer/src/_aqua/demo_validation.ts +++ b/client-peer/src/_aqua/demo_validation.ts @@ -1,504 +1,400 @@ /** * * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * 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.3.0-226 + * Aqua version: 0.3.2-SNAPSHOT * */ import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { - ResultCodes, - RequestFlow, - RequestFlowBuilder, CallParams, -} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1'; + 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; - eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; +eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; } - 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) { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } - else { - serviceId = "EIPValidator" - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - peer.internals.callServiceHandler.use((req, resp, next) => { - if (req.serviceId !== serviceId) { - next(); - return; - } - - - if (req.fnName === 'eip712_validation_string') { - - const callParams = { - ...req.particleContext, - tetraplets: { - eip_str: req.tetraplets[0], peer_id: req.tetraplets[1] + registerService( + args, + { + "defaultServiceId" : "EIPValidator", + "functions" : [ + { + "functionName" : "eip712_validation_string", + "argDefs" : [ + { + "name" : "eip_str", + "argType" : { + "tag" : "primitive" + } }, - }; - resp.retCode = ResultCodes.success; - resp.result = service.eip712_validation_string(req.args[0], req.args[1], callParams) - - } - - - - if (req.fnName === 'eip712_validation_url') { - - const callParams = { - ...req.particleContext, - tetraplets: { - eip_str: req.tetraplets[0], peer_id: req.tetraplets[1] + { + "name" : "peer_id", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } + }, + { + "functionName" : "eip712_validation_url", + "argDefs" : [ + { + "name" : "eip_str", + "argType" : { + "tag" : "primitive" + } }, - }; - resp.retCode = ResultCodes.success; - resp.result = service.eip712_validation_url(req.args[0], req.args[1], callParams) - + { + "name" : "peer_id", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } } - - - next(); - }); + ] } - + ); +} + export interface DataProviderDef { - get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { snapshot_id: number }; - get_records: (callParams: CallParams) => { snapshot_id: number }[]; + get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { snapshot_id: number; }; +get_records: (callParams: CallParams) => { 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) { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } - else { - serviceId = "DataProvider" - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - peer.internals.callServiceHandler.use((req, resp, next) => { - if (req.serviceId !== serviceId) { - next(); - return; + registerService( + args, + { + "defaultServiceId" : "DataProvider", + "functions" : [ + { + "functionName" : "get_record", + "argDefs" : [ + { + "name" : "snapshot_id", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } + }, + { + "functionName" : "get_records", + "argDefs" : [ + ], + "returnType" : { + "tag" : "primitive" + } } - - - if (req.fnName === 'get_record') { - - const callParams = { - ...req.particleContext, - tetraplets: { - snapshot_id: req.tetraplets[0] - }, - }; - resp.retCode = ResultCodes.success; - resp.result = service.get_record(req.args[0], callParams) - - } - - - - if (req.fnName === 'get_records') { - - const callParams = { - ...req.particleContext, - tetraplets: { - - }, - }; - resp.retCode = ResultCodes.success; - resp.result = service.get_records(callParams) - - } - - - next(); - }); + ] } - - + ); +} + // Functions + -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(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 peer: FluencePeer; - let eip712_url: any; - let node: any; - let relay: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - eip712_url = args[1]; - node = args[2]; - relay = args[3]; - config = args[4]; - } else { - peer = Fluence.getPeer(); - eip712_url = args[0]; - node = args[1]; - relay = args[2]; - config = args[3]; - } - let request: RequestFlow; - const promise = new Promise((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (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]) -) - - `, - ) - .configHandler((h) => { - h.on('getDataSrv', '-relay-', () => { - return peer.getStatus().relayPeerId; - }); - h.on('getDataSrv', 'eip712_url', () => { return eip712_url; }); - h.on('getDataSrv', 'node', () => { return node; }); - h.on('getDataSrv', 'relay', () => { return relay; }); - h.onEvent('callbackSrv', 'response', (args) => { - const [res] = args; - resolve(res); - }); - - h.onEvent('errorHandlingSrv', 'error', (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out for validate'); - }) - if (config && config.ttl) { - r.withTTL(config.ttl) + 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" + } } - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + ], + "names" : { + "relay" : "-relay-", + "getDataSrv" : "getDataSrv", + "callbackSrv" : "callbackSrv", + "responseSrv" : "callbackSrv", + "responseFnName" : "response", + "errorHandlingSrv" : "errorHandlingSrv", + "errorFnName" : "error" + } +}, + script + ) } + - -export function get_all_validations(node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }[]>; -export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }[]>; +export function get_all_validations(node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; +export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; export function get_all_validations(...args: any) { - let peer: FluencePeer; - let node: any; - let relay: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - node = args[1]; - relay = args[2]; - config = args[3]; - } else { - peer = Fluence.getPeer(); - node = args[0]; - relay = args[1]; - config = args[2]; - } - let request: RequestFlow; - const promise = new Promise<{ snapshot_id: number }[]>((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (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]) -) - - `, - ) - .configHandler((h) => { - h.on('getDataSrv', '-relay-', () => { - return peer.getStatus().relayPeerId; - }); - h.on('getDataSrv', 'node', () => { return node; }); - h.on('getDataSrv', 'relay', () => { return relay; }); - h.onEvent('callbackSrv', 'response', (args) => { - const [res] = args; - resolve(res); - }); - - h.onEvent('errorHandlingSrv', 'error', (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out for get_all_validations'); - }) - if (config && config.ttl) { - r.withTTL(config.ttl) + 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_all_validations", + "returnType" : { + "tag" : "primitive" + }, + "argDefs" : [ + { + "name" : "node", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "relay", + "argType" : { + "tag" : "primitive" + } } - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + ], + "names" : { + "relay" : "-relay-", + "getDataSrv" : "getDataSrv", + "callbackSrv" : "callbackSrv", + "responseSrv" : "callbackSrv", + "responseFnName" : "response", + "errorHandlingSrv" : "errorHandlingSrv", + "errorFnName" : "error" + } +}, + script + ) } - - -export function get_validation(snapshot_id: number, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }>; -export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: { ttl?: number }): Promise<{ snapshot_id: number }>; + +export type Get_validationResult = { snapshot_id: number; } +export function get_validation(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; +export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; export function get_validation(...args: any) { - let peer: FluencePeer; - let snapshot_id: any; - let node: any; - let relay: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - snapshot_id = args[1]; - node = args[2]; - relay = args[3]; - config = args[4]; - } else { - peer = Fluence.getPeer(); - snapshot_id = args[0]; - node = args[1]; - relay = args[2]; - config = args[3]; - } - let request: RequestFlow; - const promise = new Promise<{ snapshot_id: number }>((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (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]) -) - - `, - ) - .configHandler((h) => { - h.on('getDataSrv', '-relay-', () => { - return peer.getStatus().relayPeerId; - }); - h.on('getDataSrv', 'snapshot_id', () => { return snapshot_id; }); - h.on('getDataSrv', 'node', () => { return node; }); - h.on('getDataSrv', 'relay', () => { return relay; }); - h.onEvent('callbackSrv', 'response', (args) => { - const [res] = args; - resolve(res); - }); - - h.onEvent('errorHandlingSrv', 'error', (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out for get_validation'); - }) - if (config && config.ttl) { - r.withTTL(config.ttl) + 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_validation", + "returnType" : { + "tag" : "primitive" + }, + "argDefs" : [ + { + "name" : "snapshot_id", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "node", + "argType" : { + "tag" : "primitive" + } + }, + { + "name" : "relay", + "argType" : { + "tag" : "primitive" + } } - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + ], + "names" : { + "relay" : "-relay-", + "getDataSrv" : "getDataSrv", + "callbackSrv" : "callbackSrv", + "responseSrv" : "callbackSrv", + "responseFnName" : "response", + "errorHandlingSrv" : "errorHandlingSrv", + "errorFnName" : "error" + } +}, + script + ) } - diff --git a/client-peer/src/index.ts b/client-peer/src/index.ts index 7b0b4b8..b063b59 100644 --- a/client-peer/src/index.ts +++ b/client-peer/src/index.ts @@ -19,8 +19,8 @@ import { krasnodar } from "@fluencelabs/fluence-network-environment"; import { validate } from "./_aqua/demo_validation"; -const NODE_ID: string = "12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e"; -const RELAY_ID: string = "12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e"; +const NODE_ID: string = "12D3KooWFCY8xqebtZqNeiA5took71bUNAedzCCDuCuM1QTdTbWT"; +const RELAY_ID: string = krasnodar[0].peerId; const EIP_URL: string = "https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS"; async function main() { @@ -42,6 +42,6 @@ async function main() { main() .then(() => process.exit(0)) .catch((error) => { - console.error(error); + console.error('something went wrong: ', error); process.exit(1); }); diff --git a/package.json b/package.json index c41d045..a16298d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.10.4-async-457.0", + "@fluencelabs/fluence": "0.14.1", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "base64-js": "^1.5.1", diff --git a/src/_aqua/demo_validation.ts b/src/_aqua/demo_validation.ts new file mode 100644 index 0000000..2091fbc --- /dev/null +++ b/src/_aqua/demo_validation.ts @@ -0,0 +1,443 @@ +/** + * + * 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.3.2-SNAPSHOT + * + */ +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; + eip712_validation_url: ( + eip_str: string, + peer_id: string, + callParams: CallParams<"eip_str" | "peer_id"> + ) => string; +} +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: "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 { + get_record: ( + snapshot_id: number, + callParams: CallParams<"snapshot_id"> + ) => { snapshot_id: number }; + get_records: (callParams: CallParams) => { 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: "DataProvider", + 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( + 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_all_validations( + node: string, + relay: string, + config?: { ttl?: number } +): Promise<{ snapshot_id: number }[]>; +export function get_all_validations( + peer: FluencePeer, + node: string, + relay: string, + config?: { ttl?: number } +): Promise<{ snapshot_id: number }[]>; +export function get_all_validations(...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_all_validations", + 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_validationResult = { snapshot_id: number }; +export function get_validation( + snapshot_id: number, + node: string, + relay: string, + config?: { ttl?: number } +): Promise; +export function get_validation( + peer: FluencePeer, + snapshot_id: number, + node: string, + relay: string, + config?: { ttl?: number } +): Promise; +export function get_validation(...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_validation", + 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 + ); +} diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts index d97a8b9..6ceb333 100644 --- a/src/_aqua/snapshot.ts +++ b/src/_aqua/snapshot.ts @@ -3,20 +3,15 @@ * 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.3.1-231 + * Aqua version: 0.3.2-SNAPSHOT * */ import { Fluence, FluencePeer } from "@fluencelabs/fluence"; import { - ResultCodes, - RequestFlow, - RequestFlowBuilder, CallParams, -} from "@fluencelabs/fluence/dist/internal/compilerSupport/v1"; - -function missingFields(obj: any, fields: string[]): string[] { - return fields.filter((f) => !(f in obj)); -} + callFunction, + registerService, +} from "@fluencelabs/fluence/dist/internal/compilerSupport/v2"; // Services @@ -32,7 +27,6 @@ export interface ProVoValidationDef { callParams: CallParams<"eip_str" | "peer_id"> ) => string | Promise; } - export function registerProVoValidation(service: ProVoValidationDef): void; export function registerProVoValidation( serviceId: string, @@ -47,87 +41,52 @@ export function registerProVoValidation( serviceId: string, service: ProVoValidationDef ): void; + export function registerProVoValidation(...args: any) { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === "string") { - serviceId = args[0]; - } else if (typeof args[1] === "string") { - serviceId = args[1]; - } else { - serviceId = "eip_validation"; - } - - // Figuring out which overload is the await service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === "object") { - service = args[0]; - } else if (typeof args[1] === "object") { - service = args[1]; - } else { - service = args[2]; - } - - const incorrectServiceDefinitions = missingFields(service, [ - "eip712_validation_string", - "eip712_validation_url", - ]); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - "Error registering service ProVoValidation: missing functions: " + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") - ); - } - - peer.internals.callServiceHandler.use(async (req, resp, next) => { - if (req.serviceId !== serviceId) { - await next(); - return; - } - - if (req.fnName === "eip712_validation_string") { - const callParams = { - ...req.particleContext, - tetraplets: { - eip_str: req.tetraplets[0], - peer_id: req.tetraplets[1], + 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", }, - }; - resp.retCode = ResultCodes.success; - resp.result = await service.eip712_validation_string( - req.args[0], - req.args[1], - callParams - ); - } - - if (req.fnName === "eip712_validation_url") { - const callParams = { - ...req.particleContext, - tetraplets: { - eip_str: req.tetraplets[0], - peer_id: req.tetraplets[1], + }, + { + functionName: "eip712_validation_url", + argDefs: [ + { + name: "eip_str", + argType: { + tag: "primitive", + }, + }, + { + name: "peer_id", + argType: { + tag: "primitive", + }, + }, + ], + returnType: { + tag: "primitive", }, - }; - resp.retCode = ResultCodes.success; - resp.result = await service.eip712_validation_url( - req.args[0], - req.args[1], - callParams - ); - } - - await next(); + }, + ], }); } @@ -138,7 +97,6 @@ export interface DataProviderDef { ) => { snapshot_id: number }; get_records: (callParams: CallParams) => { snapshot_id: number }[]; } - export function registerDataProvider(service: DataProviderDef): void; export function registerDataProvider( serviceId: string, @@ -153,75 +111,33 @@ export function registerDataProvider( serviceId: string, service: DataProviderDef ): void; + export function registerDataProvider(...args: any) { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === "string") { - serviceId = args[0]; - } else if (typeof args[1] === "string") { - serviceId = args[1]; - } else { - serviceId = ""; - } - - // Figuring out which overload is the await service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === "object") { - service = args[0]; - } else if (typeof args[1] === "object") { - service = args[1]; - } else { - service = args[2]; - } - - const incorrectServiceDefinitions = missingFields(service, [ - "get_record", - "get_records", - ]); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - "Error registering service DataProvider: missing functions: " + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ") - ); - } - - peer.internals.callServiceHandler.use(async (req, resp, next) => { - if (req.serviceId !== serviceId) { - await next(); - return; - } - - if (req.fnName === "get_record") { - const callParams = { - ...req.particleContext, - tetraplets: { - snapshot_id: req.tetraplets[0], + registerService(args, { + defaultServiceId: "snapshot", + functions: [ + { + functionName: "get_record", + argDefs: [ + { + name: "snapshot_id", + argType: { + tag: "primitive", + }, + }, + ], + returnType: { + tag: "primitive", }, - }; - resp.retCode = ResultCodes.success; - resp.result = await service.get_record(req.args[0], callParams); - } - - if (req.fnName === "get_records") { - const callParams = { - ...req.particleContext, - tetraplets: {}, - }; - resp.retCode = ResultCodes.success; - resp.result = await service.get_records(callParams); - } - - await next(); + }, + { + functionName: "get_records", + argDefs: [], + returnType: { + tag: "primitive", + }, + }, + ], }); } @@ -241,32 +157,8 @@ export function validate( config?: { ttl?: number } ): Promise; export function validate(...args: any) { - let peer: FluencePeer; - let relay: any; - let peer_: any; - let eip712_json: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - relay = args[1]; - peer_ = args[2]; - eip712_json = args[3]; - config = args[4]; - } else { - peer = Fluence.getPeer(); - relay = args[0]; - peer_ = args[1]; - eip712_json = args[2]; - config = args[3]; - } - - let request: RequestFlow; - const promise = new Promise((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (xor + let script = ` + (xor (seq (seq (seq @@ -288,7 +180,7 @@ export function validate(...args: any) { (call relay ("op" "noop") []) ) (xor - (call peer ("eip_validation" "eip712_validation_string") [eip712_json peer] result) + (call peer ("snapshot" "eip712_validation_string") [eip712_json peer] result) (seq (seq (seq @@ -312,43 +204,46 @@ export function validate(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - ` - ) - .configHandler((h) => { - h.on("getDataSrv", "-relay-", () => { - return peer.getStatus().relayPeerId; - }); - h.on("getDataSrv", "relay", () => { - return relay; - }); - h.on("getDataSrv", "peer", () => { - return peer_; - }); - h.on("getDataSrv", "eip712_json", () => { - return eip712_json; - }); - h.onEvent("callbackSrv", "response", (args) => { - const [res] = args; - resolve(res); - }); - h.onEvent("errorHandlingSrv", "error", (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject("Request timed out for validate"); - }); - - if (config && config.ttl) { - r.withTTL(config.ttl); - } - - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + `; + 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( @@ -365,32 +260,8 @@ export function validate_from_url( config?: { ttl?: number } ): Promise; export function validate_from_url(...args: any) { - let peer: FluencePeer; - let relay: any; - let peer_: any; - let eip712_url: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - relay = args[1]; - peer_ = args[2]; - eip712_url = args[3]; - config = args[4]; - } else { - peer = Fluence.getPeer(); - relay = args[0]; - peer_ = args[1]; - eip712_url = args[2]; - config = args[3]; - } - - let request: RequestFlow; - const promise = new Promise((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (xor + let script = ` + (xor (seq (seq (seq @@ -412,7 +283,7 @@ export function validate_from_url(...args: any) { (call relay ("op" "noop") []) ) (xor - (call peer ("eip_validation" "eip712_validation_url") [eip712_url peer] result) + (call peer ("snapshot" "eip712_validation_url") [eip712_url peer] result) (seq (seq (seq @@ -436,85 +307,65 @@ export function validate_from_url(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - ` - ) - .configHandler((h) => { - h.on("getDataSrv", "-relay-", () => { - return peer.getStatus().relayPeerId; - }); - h.on("getDataSrv", "relay", () => { - return relay; - }); - h.on("getDataSrv", "peer", () => { - return peer_; - }); - h.on("getDataSrv", "eip712_url", () => { - return eip712_url; - }); - h.onEvent("callbackSrv", "response", (args) => { - const [res] = args; - resolve(res); - }); - h.onEvent("errorHandlingSrv", "error", (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject("Request timed out for validate_from_url"); - }); - - if (config && config.ttl) { - r.withTTL(config.ttl); - } - - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + `; + 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<{ snapshot_id: number }>; +): Promise; export function get_record( peer: FluencePeer, relay: string, peer_: string, snapshot_id: number, config?: { ttl?: number } -): Promise<{ snapshot_id: number }>; +): Promise; export function get_record(...args: any) { - let peer: FluencePeer; - let relay: any; - let peer_: any; - let snapshot_id: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - relay = args[1]; - peer_ = args[2]; - snapshot_id = args[3]; - config = args[4]; - } else { - peer = Fluence.getPeer(); - relay = args[0]; - peer_ = args[1]; - snapshot_id = args[2]; - config = args[3]; - } - - let request: RequestFlow; - const promise = new Promise<{ snapshot_id: number }>((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (xor + let script = ` + (xor (seq (seq (seq @@ -536,7 +387,7 @@ export function get_record(...args: any) { (call relay ("op" "noop") []) ) (xor - (call peer ("" "get_record") [snapshot_id] result) + (call peer ("snapshot" "get_record") [snapshot_id] result) (seq (seq (seq @@ -560,43 +411,46 @@ export function get_record(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - ` - ) - .configHandler((h) => { - h.on("getDataSrv", "-relay-", () => { - return peer.getStatus().relayPeerId; - }); - h.on("getDataSrv", "relay", () => { - return relay; - }); - h.on("getDataSrv", "peer", () => { - return peer_; - }); - h.on("getDataSrv", "snapshot_id", () => { - return snapshot_id; - }); - h.onEvent("callbackSrv", "response", (args) => { - const [res] = args; - resolve(res); - }); - h.onEvent("errorHandlingSrv", "error", (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject("Request timed out for get_record"); - }); - - if (config && config.ttl) { - r.withTTL(config.ttl); - } - - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + `; + 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( @@ -611,29 +465,8 @@ export function get_records( config?: { ttl?: number } ): Promise<{ snapshot_id: number }[]>; export function get_records(...args: any) { - let peer: FluencePeer; - let relay: any; - let peer_: any; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - relay = args[1]; - peer_ = args[2]; - config = args[3]; - } else { - peer = Fluence.getPeer(); - relay = args[0]; - peer_ = args[1]; - config = args[2]; - } - - let request: RequestFlow; - const promise = new Promise<{ snapshot_id: number }[]>((resolve, reject) => { - const r = new RequestFlowBuilder() - .disableInjections() - .withRawScript( - ` - (xor + let script = ` + (xor (seq (seq (seq @@ -652,7 +485,7 @@ export function get_records(...args: any) { (call relay ("op" "noop") []) ) (xor - (call peer ("" "get_records") [] result) + (call peer ("snapshot" "get_records") [] result) (seq (seq (seq @@ -676,38 +509,38 @@ export function get_records(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - ` - ) - .configHandler((h) => { - h.on("getDataSrv", "-relay-", () => { - return peer.getStatus().relayPeerId; - }); - h.on("getDataSrv", "relay", () => { - return relay; - }); - h.on("getDataSrv", "peer", () => { - return peer_; - }); - h.onEvent("callbackSrv", "response", (args) => { - const [res] = args; - resolve(res); - }); - h.onEvent("errorHandlingSrv", "error", (args) => { - const [err] = args; - reject(err); - }); - }) - .handleScriptError(reject) - .handleTimeout(() => { - reject("Request timed out for get_records"); - }); - - if (config && config.ttl) { - r.withTTL(config.ttl); - } - - request = r.build(); - }); - peer.internals.initiateFlow(request!); - return promise; + `; + 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 + ); } From 35bb9a4e11a9a9f9f31a2e5699580901e4eaf221 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 22 Oct 2021 09:03:19 +0300 Subject: [PATCH 12/19] Update fluence-js and aqua versions --- package.json | 4 +- src/_aqua/demo_validation.ts | 489 +++++++++++++---------------- src/_aqua/snapshot.ts | 585 ++++++++++++++++------------------- 3 files changed, 492 insertions(+), 586 deletions(-) diff --git a/package.json b/package.json index a16298d..3466e73 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,13 @@ "author": "", "license": "ISC", "devDependencies": { - "@fluencelabs/aqua": "^0.3.1-231", + "@fluencelabs/aqua": "^0.4.0-235", "chokidar-cli": "^3.0.0", "ts-node": "^10.2.1", "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.14.1", + "@fluencelabs/fluence": "^0.14.2", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "base64-js": "^1.5.1", diff --git a/src/_aqua/demo_validation.ts b/src/_aqua/demo_validation.ts index 2091fbc..bf245a6 100644 --- a/src/_aqua/demo_validation.ts +++ b/src/_aqua/demo_validation.ts @@ -3,161 +3,133 @@ * 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.3.2-SNAPSHOT + * Aqua version: 0.4.0-235 * */ -import { Fluence, FluencePeer } from "@fluencelabs/fluence"; +import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { - CallParams, - callFunction, - registerService, -} from "@fluencelabs/fluence/dist/internal/compilerSupport/v2"; + 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; - eip712_validation_url: ( - eip_str: string, - peer_id: string, - callParams: CallParams<"eip_str" | "peer_id"> - ) => string; + 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(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: "EIPValidator", - functions: [ - { - functionName: "eip712_validation_string", - argDefs: [ - { - name: "eip_str", - argType: { - tag: "primitive", - }, - }, - { - name: "peer_id", - argType: { - tag: "primitive", - }, - }, - ], - returnType: { - tag: "primitive", + 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", - }, - }, - ], - }); + { + "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 }; - get_records: (callParams: CallParams) => { snapshot_id: number }[]; + 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(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: "get_record", - argDefs: [ - { - name: "snapshot_id", - argType: { - tag: "primitive", - }, - }, - ], - returnType: { - tag: "primitive", + registerService( + args, + { + "defaultServiceId" : "DataProvider", + "functions" : [ + { + "functionName" : "get_record", + "argDefs" : [ + { + "name" : "snapshot_id", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } }, - }, - { - functionName: "get_records", - argDefs: [], - returnType: { - tag: "primitive", - }, - }, - ], - }); + { + "functionName" : "get_records", + "argDefs" : [ + ], + "returnType" : { + "tag" : "primitive" + } + } + ] } - + ); +} + // Functions + -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(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 = ` + + let script = ` (xor (seq (seq @@ -204,61 +176,55 @@ export function validate(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "validate", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "validate", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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_all_validations( - node: string, - relay: string, - config?: { ttl?: number } -): Promise<{ snapshot_id: number }[]>; -export function get_all_validations( - peer: FluencePeer, - node: string, - relay: string, - config?: { ttl?: number } -): Promise<{ snapshot_id: number }[]>; + + +export function get_all_validations(node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; +export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; export function get_all_validations(...args: any) { - let script = ` + + let script = ` (xor (seq (seq @@ -302,58 +268,49 @@ export function get_all_validations(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "get_all_validations", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "get_all_validations", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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_validationResult = { snapshot_id: number }; -export function get_validation( - snapshot_id: number, - node: string, - relay: string, - config?: { ttl?: number } -): Promise; -export function get_validation( - peer: FluencePeer, - snapshot_id: number, - node: string, - relay: string, - config?: { ttl?: number } -): Promise; + +export type Get_validationResult = { snapshot_id: number; } +export function get_validation(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; +export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; export function get_validation(...args: any) { - let script = ` + + let script = ` (xor (seq (seq @@ -400,44 +357,44 @@ export function get_validation(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "get_validation", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "get_validation", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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 + ) } diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts index 6ceb333..1397783 100644 --- a/src/_aqua/snapshot.ts +++ b/src/_aqua/snapshot.ts @@ -3,161 +3,133 @@ * 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.3.2-SNAPSHOT + * Aqua version: 0.4.0-235 * */ -import { Fluence, FluencePeer } from "@fluencelabs/fluence"; +import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { - CallParams, - callFunction, - registerService, -} from "@fluencelabs/fluence/dist/internal/compilerSupport/v2"; + 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; + 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(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", + 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", - }, - }, - ], - }); + { + "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 }; - get_records: (callParams: CallParams) => { snapshot_id: number }[]; + 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(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", + 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", - }, - }, - ], - }); + { + "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(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 = ` + + let script = ` (xor (seq (seq @@ -204,63 +176,55 @@ export function validate(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "validate", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "validate", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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(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 = ` + + let script = ` (xor (seq (seq @@ -307,64 +271,55 @@ export function validate_from_url(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "validate_from_url", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "validate_from_url", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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 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 = ` + + let script = ` (xor (seq (seq @@ -411,61 +366,55 @@ export function get_record(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "get_record", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "get_record", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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(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 = ` + + let script = ` (xor (seq (seq @@ -509,38 +458,38 @@ export function get_records(...args: any) { ) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) ) - `; - return callFunction( - args, - { - functionName: "get_records", - returnType: { - tag: "primitive", - }, - argDefs: [ + ` + return callFunction( + args, { - 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", - }, + "functionName" : "get_records", + "returnType" : { + "tag" : "primitive" }, - script - ); + "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 + ) } From a91d951da220d8befbeafb2c40ac334a2756b98c Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 22 Oct 2021 09:05:15 +0300 Subject: [PATCH 13/19] Updat aqua and fluence js in client peer --- client-peer/package.json | 4 ++-- client-peer/src/_aqua/demo_validation.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client-peer/package.json b/client-peer/package.json index 26d5f8a..d32ee19 100644 --- a/client-peer/package.json +++ b/client-peer/package.json @@ -11,13 +11,13 @@ "author": "", "license": "MIT", "devDependencies": { - "@fluencelabs/aqua": "^0.3.1-231", + "@fluencelabs/aqua": "^0.4.0-235", "chokidar-cli": "^3.0.0", "ts-node": "^10.2.1", "typescript": "^4.4.2" }, "dependencies": { - "@fluencelabs/fluence": "0.14.1", + "@fluencelabs/fluence": "^0.14.2", "@fluencelabs/fluence-network-environment": "1.0.10", "@types/sqlite3": "^3.1.7", "base64-js": "^1.5.1", diff --git a/client-peer/src/_aqua/demo_validation.ts b/client-peer/src/_aqua/demo_validation.ts index ca6c532..bf245a6 100644 --- a/client-peer/src/_aqua/demo_validation.ts +++ b/client-peer/src/_aqua/demo_validation.ts @@ -3,7 +3,7 @@ * 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.3.2-SNAPSHOT + * Aqua version: 0.4.0-235 * */ import { Fluence, FluencePeer } from '@fluencelabs/fluence'; @@ -17,8 +17,8 @@ import { // Services export interface ProVoValidationDef { - eip712_validation_string: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; -eip712_validation_url: (eip_str: string, peer_id: string, callParams: CallParams<'eip_str' | 'peer_id'>) => string; + 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; @@ -80,8 +80,8 @@ export function registerProVoValidation(...args: any) { export interface DataProviderDef { - get_record: (snapshot_id: number, callParams: CallParams<'snapshot_id'>) => { snapshot_id: number; }; -get_records: (callParams: CallParams) => { snapshot_id: number; }[]; + 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; From b820e32eb35c936e0c10be608505a2ce03d5327e Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Fri, 22 Oct 2021 13:54:37 -0500 Subject: [PATCH 14/19] add sqlite --- data/snapshot.db | Bin 8192 -> 8192 bytes src/index.ts | 16 +++++++++++++--- src/local_db.ts | 29 +++++++++++++++++------------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/data/snapshot.db b/data/snapshot.db index dce303520bb70d94a8529ce0328ab7e6bd2bd2f9..57767358d7155a4c2072c9177e6e45ba897d803d 100644 GIT binary patch literal 8192 zcmeHKPjBNy6i=#^7LXQkSs@N9S))CG6r!2&jK}t6X-hfn0hV4?O%=`9Z&K65w(M!Q zRh3J%AAmb2ZhQg`d=tI_AA{#K|7cKQ1xOrbh=4*FM^=g>+LN+cw4MKem`11ceif;S8J~~eDUiOc{Hy81Jw)k)U_{Sbzet85u0v-X6fJeY1@P9$z``2%O{^^q^J$?K12hfk+ zfA97wy@Idekjf(_sLmv(oXaowEtM3wRV-L$R#u_PBciQLpBs-J|OP8hPLDW zx~b}_)l-t5tVL~8%}}i4L7C-HhEi*Ww$>SJI9k^fn4=>L&sY=g5k!*8o6nARI|m&BCdyH!9r1b4P2 zg87`n=XU^hO@p=amdMr1G|wQlsRMJk@--{K3vM~3Q0q`jV*YP#Tm zJ|gq^DXLsmrj*>wal5WU%l)FIVE_5sT@`g~nn)Ke_EFAgG@sKeCa|qWiQ*AG5?QjZ zm}MBII81DksDqHkAd`?w-S&UO?rcL#DF_IqQX#fgkU&Ej>qJ|Ta~lc~8N^LyHjfj? zuzdsPN~4J=%Ho7((jXFug F_B%|BCo2E| delta 28 kcmZp0XmFSy&B!=W#+i|EW5N=CCI*3xg`RvH8#Xcm0CWNfQUCw| diff --git a/src/index.ts b/src/index.ts index 58c0cfc..0ad990a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,6 +12,7 @@ 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 { @@ -41,6 +42,7 @@ class EIPValidator implements ProVoValidationDef { // console.log(resp_str); let obj = { "signature": signed_response, "validation": response }; + return JSON.stringify(obj); } @@ -64,6 +66,12 @@ class EIPValidator implements ProVoValidationDef { // 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); } @@ -75,9 +83,11 @@ class DataProvider implements DataProviderDef { } - get_records() { + async get_records(): Promise { // todo: add pagination - return select_events(); + const result = await select_events(); + console.log("get records: ", result); + return result; } } @@ -96,7 +106,7 @@ async function main() { console.log("wallet pk: ", wallet.publicKey); const skBytes: Uint8Array = ethers.utils.arrayify(SecretKey); - console.log("arraify: ", skBytes); + console.log("arrayify: ", skBytes); await startFluencePeer(skBytes); diff --git a/src/local_db.ts b/src/local_db.ts index 59f0984..ef3298a 100644 --- a/src/local_db.ts +++ b/src/local_db.ts @@ -63,7 +63,7 @@ export async function create_table(db: sqlite.Database) { return promise; } -export async function insert_event(db: any, eip_obj: any, response_obj: Response, signed_msg: string) { +export async function insert_event(db: sqlite.Database, eip_obj: any, response_obj: Response, signed_msg: string) { const stmt = `insert into snapshot values (?, ?, ?, ?, ?, ?, ?, ?, ?)`; var ins_vals = [eip_obj.data.message.snapshot, eip_obj.address, eip_obj.sig, JSON.stringify(eip_obj.data), response_obj.peer_id, response_obj.timestamp, response_obj.eip_validation, response_obj.ts_validation, signed_msg]; let promise = new Promise((resolve, reject) => db.run(stmt, ins_vals, (res: sqlite.RunResult, err: Error) => { @@ -93,7 +93,7 @@ export function select_event(snapshot_id: number): any { ? console.log(row) : console.log(`No record found for snapshot id: ${snapshot_id}`); }); - // db.close(); + db.close(); }; // export function select_events(): Array { @@ -102,23 +102,28 @@ export function select_events(): any { // todo: add pagination const stmt = 'select * from snapshot limit ?'; console.log("select events stmt: ", stmt); - var response_arr: Array; - db.all(stmt, [100], (err, rows) => { - // db.close(); + var response_arr = new Array(); + const select = db.all(stmt, [100], (err, rows) => { + console.log("number of rows: ", rows.length); if (err) { // todo: no good, change that. console.error(err.message); return []; } - for (var row of rows) { - const _row: DBRecord = row; - console.log("row: ", row); - // response_arr.push(_row); - }; - return response_arr; - }); + else { + for (var row of rows) { + const _row: DBRecord = row; + response_arr.push(_row); + }; + console.log("len resp array in db all: ", response_arr.length); + return response_arr; + } + }); + // console.log("select: ", select); // db.close(); + // console.log("len resp array out of db all: ", response_arr); + // return response_arr; } From afc70bff1c0dfee04fd22cd3685ccbc00b33901d Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Fri, 22 Oct 2021 13:57:50 -0500 Subject: [PATCH 15/19] update sqlite calls --- src/local_db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/local_db.ts b/src/local_db.ts index ef3298a..7306bf0 100644 --- a/src/local_db.ts +++ b/src/local_db.ts @@ -97,7 +97,7 @@ export function select_event(snapshot_id: number): any { }; // export function select_events(): Array { -export function select_events(): any { +export async function select_events(): Promise { var db = get_db(DB_PATH); // todo: add pagination const stmt = 'select * from snapshot limit ?'; From b56b811553f6c86c9072f95206920f0583dff8e3 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Sat, 23 Oct 2021 13:46:55 -0500 Subject: [PATCH 16/19] update promises --- src/local_db.ts | 109 +++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 62 deletions(-) diff --git a/src/local_db.ts b/src/local_db.ts index 7306bf0..dc5cb33 100644 --- a/src/local_db.ts +++ b/src/local_db.ts @@ -1,6 +1,8 @@ // import { sqlite3, open } from 'sqlite3'; // var sqlite3 = require("sqlite3").verbose(); // import "sqlite3"; +import { resolveProperties } from '@ethersproject/properties'; +import { ResultCodes } from '@fluencelabs/fluence/dist/internal/commonTypes'; import * as sqlite from 'sqlite3'; const sqlite3 = sqlite.verbose(); import { Response } from './eip_processor'; @@ -19,6 +21,11 @@ export interface DBRecord { signed_response: string; } +export interface DBResult { + stderr: string; + stdout: Array +} + // db handler export function get_db(db_path: string): sqlite.Database { var db_path = db_path; @@ -78,72 +85,50 @@ export async function insert_event(db: sqlite.Database, eip_obj: any, response_o return promise; } - -// export function select_event(snapshot_id: number): DBRecord { -export function select_event(snapshot_id: number): any { - // todo: adding request log +export async function select_event(snapshot_id: number): Promise { var db = get_db(DB_PATH); + let result: DBResult = {} as DBResult; const stmt = 'select * from snapshot where snapshot_id=?' - db.get(stmt, [snapshot_id], (err, row) => { - db.close(); - if (err) { - return console.error(err.message); - } - return row - ? console.log(row) - : console.log(`No record found for snapshot id: ${snapshot_id}`); + return new Promise((resolve) => { + db.get(stmt, [snapshot_id], (err, row) => { + db.close(); + if (err) { + result.stderr = err.message; + result.stdout = []; + resolve(result) + } + else { + result.stderr = ""; + const response_arr = new Array(); + response_arr.push(row); + result.stdout = response_arr; + resolve(result); + } + }); }); - db.close(); }; -// export function select_events(): Array { -export async function select_events(): Promise { +// todo: add pagination +export function select_events(): Promise { var db = get_db(DB_PATH); - // todo: add pagination - const stmt = 'select * from snapshot limit ?'; - console.log("select events stmt: ", stmt); - var response_arr = new Array(); - const select = db.all(stmt, [100], (err, rows) => { - console.log("number of rows: ", rows.length); - if (err) { - // todo: no good, change that. - console.error(err.message); - return []; - } - else { - for (var row of rows) { - const _row: DBRecord = row; - response_arr.push(_row); - - }; - console.log("len resp array in db all: ", response_arr.length); - return response_arr; - } + const stmt = "select * from snapshot limit ?"; + let result: DBResult = {} as DBResult; + return new Promise((resolve) => { + db.all(stmt, [100], (err, rows) => { + console.log("number of rows: ", rows.length); + if (err) { + result.stderr = err.message; + result.stdout = []; + } else { + const response_arr = new Array(); + for (var row of rows) { + const _row: DBRecord = row; + response_arr.push(_row); + } + result.stderr = ""; + result.stdout = response_arr; + } + resolve(result); + }); }); - // console.log("select: ", select); - // db.close(); - // console.log("len resp array out of db all: ", response_arr); - // return response_arr; -} - - -/* - -var db = new sqlite3.Database(DB_PATH); - db.serialize(function () { - const create_stmt = "CREATE TABLE lorem (info TEXT)"; - db.run(create_stmt); - - const ins_stmt = "INSERT INTO lorem VALUES (?)"; - var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); - for (var i = 0; i < 10; i++) { - stmt.run("Ipsum " + i); - } - stmt.finalize(); - - db.each("SELECT rowid AS id, info FROM lorem", function (err: any, row: any) { - console.log(row.id + ": " + row.info); - }); - }); - -*/ \ No newline at end of file +} \ No newline at end of file From e1f40d19021c46fda7f5563ee87c1f0905fba401 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Sat, 23 Oct 2021 13:47:42 -0500 Subject: [PATCH 17/19] update data and services --- aqua/snapshot.aqua | 31 ++++++++++++++++++++++--------- src/_aqua/snapshot.ts | 24 ++++++++++++------------ 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/aqua/snapshot.aqua b/aqua/snapshot.aqua index 33c8d5b..6ca2908 100644 --- a/aqua/snapshot.aqua +++ b/aqua/snapshot.aqua @@ -4,36 +4,49 @@ data PVResponse: eip_validation: bool ts_validation: bool -data DBResponse: - snapshot_id: u64 -service ProVoValidation("snapshot"): +data DBRecord: + snapshot_id: u64 + event_address: string + event_signature: string + eip712_doc: string + peer_id: string + timestamp: u64 + eip_validation: bool + ts_validation: bool + signed_response: string + +data DBResult: + stderr: string + 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 service DataProvider("snapshot"): - get_records() -> []DBResponse - get_record(snapshot_id: u64) -> DBResponse + get_records() -> DBResult + get_record(snapshot_id: u64) -> DBResult func validate(relay: string, peer:string, eip712_json: string) -> string: on peer via relay: - result <- ProVoValidation.eip712_validation_string(eip712_json, peer) + result <- EIPValidator.eip712_validation_string(eip712_json, peer) <- result func validate_from_url(relay: string, peer:string, eip712_url: string) -> string: on peer via relay: - result <- ProVoValidation.eip712_validation_url(eip712_url, peer) + result <- EIPValidator.eip712_validation_url(eip712_url, peer) <- result -func get_record(relay:string, peer:string, snapshot_id: u64) -> DBResponse: +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) -> []DBResponse: +func get_records(relay:string, peer:string) -> DBResult: on peer via relay: result <- DataProvider.get_records() <- result diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts index 1397783..cbe2502 100644 --- a/src/_aqua/snapshot.ts +++ b/src/_aqua/snapshot.ts @@ -16,17 +16,17 @@ import { // Services -export interface ProVoValidationDef { +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 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 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 registerProVoValidation(...args: any) { +export function registerEIPValidator(...args: any) { registerService( args, { @@ -80,8 +80,8 @@ export function registerProVoValidation(...args: any) { 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; }[]>; + 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_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; @@ -314,7 +314,7 @@ export function validate_from_url(...args: any) { } -export type Get_recordResult = { snapshot_id: number; } +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(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) { @@ -409,9 +409,9 @@ export function get_record(...args: any) { } - -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 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(relay: string, peer_: string, config?: {ttl?: number}): Promise; +export function get_records(peer: FluencePeer, relay: string, peer_: string, config?: {ttl?: number}): Promise; export function get_records(...args: any) { let script = ` From f5ae7af91ea84ca55db3541bbd89ae594e62bd3b Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Sat, 23 Oct 2021 13:48:16 -0500 Subject: [PATCH 18/19] update service names --- src/index.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0ad990a..bfb0ccb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,10 @@ import { Fluence, KeyPair } from "@fluencelabs/fluence"; import { krasnodar } from "@fluencelabs/fluence-network-environment"; -import { registerProVoValidation, ProVoValidationDef, registerDataProvider, DataProviderDef } from "./_aqua/snapshot"; +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, select_events, select_event } from './local_db'; +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"; @@ -23,7 +23,9 @@ function sign_response(wallet: ethers.Wallet, response: Response): Promise { // todo: need to fix this to use local peer key @@ -76,9 +78,10 @@ class EIPValidator implements ProVoValidationDef { } } +// class exposed as service `DataProviderDef` in snapshot.aqua class DataProvider implements DataProviderDef { - get_record(snapshot_id: number) { + async get_record(snapshot_id: number): Promise { return select_event(snapshot_id); } @@ -118,7 +121,7 @@ async function main() { // console.log(peer); // console.log(Fluence.KeyPair); - registerProVoValidation("EIPValidator", new EIPValidator()); + registerEIPValidator("EIPValidator", new EIPValidator()); registerDataProvider("DataProvider", new DataProvider); // const eip_doc: any = await got('https://ipfs.fleek.co/ipfs/QmWGzSQFm57ohEq2ATw4UNHWmYU2HkMjtedcNLodYywpmS').json(); From e2d774640eeeb963d2bfc064c3ddab1d5fd7f4ee Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Sun, 24 Oct 2021 12:32:30 -0500 Subject: [PATCH 19/19] cleanup --- .../demo_validation.get_all_validations.air | 43 ++ air-scripts/demo_validation.get_record.air | 46 ++ .../demo_validation.get_record_count.air | 43 ++ air-scripts/demo_validation.get_records.air | 43 ++ .../demo_validation.get_validation.air | 46 ++ air-scripts/demo_validation.ts | 400 +++++++++++++++++ air-scripts/demo_validation.validate.air | 46 ++ air-scripts/snapshot.get_count.air | 43 ++ air-scripts/snapshot.get_record.air | 46 ++ air-scripts/snapshot.get_records.air | 43 ++ air-scripts/snapshot.validate.air | 46 ++ air-scripts/snapshot.validate_from_url.air | 46 ++ aqua/demo_validation.aqua | 40 +- aqua/snapshot.aqua | 11 +- src/_aqua/demo_validation.ts | 419 +++++++++++++----- src/_aqua/snapshot.ts | 227 +++++++++- src/index.ts | 48 +- src/local_db.ts | 61 ++- src/utils.ts | 11 + 19 files changed, 1548 insertions(+), 160 deletions(-) create mode 100644 air-scripts/demo_validation.get_all_validations.air create mode 100644 air-scripts/demo_validation.get_record.air create mode 100644 air-scripts/demo_validation.get_record_count.air create mode 100644 air-scripts/demo_validation.get_records.air create mode 100644 air-scripts/demo_validation.get_validation.air create mode 100644 air-scripts/demo_validation.ts create mode 100644 air-scripts/demo_validation.validate.air create mode 100644 air-scripts/snapshot.get_count.air create mode 100644 air-scripts/snapshot.get_record.air create mode 100644 air-scripts/snapshot.get_records.air create mode 100644 air-scripts/snapshot.validate.air create mode 100644 air-scripts/snapshot.validate_from_url.air create mode 100644 src/utils.ts diff --git a/air-scripts/demo_validation.get_all_validations.air b/air-scripts/demo_validation.get_all_validations.air new file mode 100644 index 0000000..f5965de --- /dev/null +++ b/air-scripts/demo_validation.get_all_validations.air @@ -0,0 +1,43 @@ +(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]) +) diff --git a/air-scripts/demo_validation.get_record.air b/air-scripts/demo_validation.get_record.air new file mode 100644 index 0000000..e81063d --- /dev/null +++ b/air-scripts/demo_validation.get_record.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/air-scripts/demo_validation.get_record_count.air b/air-scripts/demo_validation.get_record_count.air new file mode 100644 index 0000000..cc3e685 --- /dev/null +++ b/air-scripts/demo_validation.get_record_count.air @@ -0,0 +1,43 @@ +(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]) +) diff --git a/air-scripts/demo_validation.get_records.air b/air-scripts/demo_validation.get_records.air new file mode 100644 index 0000000..f5965de --- /dev/null +++ b/air-scripts/demo_validation.get_records.air @@ -0,0 +1,43 @@ +(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]) +) diff --git a/air-scripts/demo_validation.get_validation.air b/air-scripts/demo_validation.get_validation.air new file mode 100644 index 0000000..e81063d --- /dev/null +++ b/air-scripts/demo_validation.get_validation.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/air-scripts/demo_validation.ts b/air-scripts/demo_validation.ts new file mode 100644 index 0000000..bf245a6 --- /dev/null +++ b/air-scripts/demo_validation.ts @@ -0,0 +1,400 @@ +/** + * + * 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" : "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 { + 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" : "DataProvider", + "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(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_all_validations(node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; +export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; +export function get_all_validations(...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_all_validations", + "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_validationResult = { snapshot_id: number; } +export function get_validation(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; +export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; +export function get_validation(...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_validation", + "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 + ) +} diff --git a/air-scripts/demo_validation.validate.air b/air-scripts/demo_validation.validate.air new file mode 100644 index 0000000..7d219f9 --- /dev/null +++ b/air-scripts/demo_validation.validate.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/air-scripts/snapshot.get_count.air b/air-scripts/snapshot.get_count.air new file mode 100644 index 0000000..091b210 --- /dev/null +++ b/air-scripts/snapshot.get_count.air @@ -0,0 +1,43 @@ +(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_record_count") [] 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]) +) diff --git a/air-scripts/snapshot.get_record.air b/air-scripts/snapshot.get_record.air new file mode 100644 index 0000000..d7ea67d --- /dev/null +++ b/air-scripts/snapshot.get_record.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/air-scripts/snapshot.get_records.air b/air-scripts/snapshot.get_records.air new file mode 100644 index 0000000..66af64e --- /dev/null +++ b/air-scripts/snapshot.get_records.air @@ -0,0 +1,43 @@ +(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]) +) diff --git a/air-scripts/snapshot.validate.air b/air-scripts/snapshot.validate.air new file mode 100644 index 0000000..c6e4643 --- /dev/null +++ b/air-scripts/snapshot.validate.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/air-scripts/snapshot.validate_from_url.air b/air-scripts/snapshot.validate_from_url.air new file mode 100644 index 0000000..6969023 --- /dev/null +++ b/air-scripts/snapshot.validate_from_url.air @@ -0,0 +1,46 @@ +(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]) +) diff --git a/aqua/demo_validation.aqua b/aqua/demo_validation.aqua index 40f6936..ed227ee 100644 --- a/aqua/demo_validation.aqua +++ b/aqua/demo_validation.aqua @@ -1,32 +1,52 @@ -data PVResponse: +data DBRecord: + snapshot_id: u64 + event_address: string + event_signature: string + eip712_doc: string peer_id: string timestamp: u64 eip_validation: bool ts_validation: bool + signed_response: string -data DBResponse: - snapshot_id: u64 +data DBResult: + stderr: string + stdout: []DBRecord -service ProVoValidation("EIPValidator"): +service EIPValidator("EIPValidator"): eip712_validation_string(eip_str: string, peer_id: string) -> string eip712_validation_url(eip_str: string, peer_id: string) -> string service DataProvider("DataProvider"): - get_records() -> []DBResponse - get_record(snapshot_id: u64) -> DBResponse + get_records() -> DBResult + get_record(snapshot_id: u64) -> DBResult + get_record_count() -> u64 + clear_table(password: string) -> DBResult func validate(eip712_url: string, node: string, relay:string) -> string: on node via relay: - res <- ProVoValidation.eip712_validation_url(eip712_url, node) + res <- EIPValidator.eip712_validation_url(eip712_url, node) <- res -func get_all_validations(node: string, relay:string) -> []DBResponse: +func get_records(node: string, relay:string) -> DBResult: on node via relay: res <- DataProvider.get_records() <- res -func get_validation(snapshot_id: u64, node: string, relay:string) -> DBResponse: +func get_record(snapshot_id: u64, node: string, relay:string) -> DBResult: on node via relay: res <- DataProvider.get_record(snapshot_id) - <- res \ No newline at end of file + <- res + +func get_record_count(node: string, relay:string) -> u64: + on node via relay: + res <- DataProvider.get_record_count() + <- res + +func delete_rows(password: string, node: string, relay:string) -> DBResult: + on node via relay: + result <- DataProvider.clear_table(password) + <- result + + diff --git a/aqua/snapshot.aqua b/aqua/snapshot.aqua index 6ca2908..e329b6b 100644 --- a/aqua/snapshot.aqua +++ b/aqua/snapshot.aqua @@ -27,7 +27,8 @@ service EIPValidator("snapshot"): service DataProvider("snapshot"): get_records() -> DBResult get_record(snapshot_id: u64) -> DBResult - + get_record_count() -> u64 + clear_table(password: string) -> DBResult func validate(relay: string, peer:string, eip712_json: string) -> string: on peer via relay: @@ -51,4 +52,12 @@ func get_records(relay:string, peer:string) -> DBResult: result <- DataProvider.get_records() <- result +func get_count(relay:string, peer:string) -> u64: + on peer via relay: + result <- DataProvider.get_record_count() + <- result +func delete_rows(passwd: string, peer: string, relay:string) -> DBResult: + on peer via relay: + result <- DataProvider.clear_table(passwd) + <- result \ No newline at end of file diff --git a/src/_aqua/demo_validation.ts b/src/_aqua/demo_validation.ts index bf245a6..5712f9e 100644 --- a/src/_aqua/demo_validation.ts +++ b/src/_aqua/demo_validation.ts @@ -16,17 +16,17 @@ import { // Services -export interface ProVoValidationDef { +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 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 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 registerProVoValidation(...args: any) { +export function registerEIPValidator(...args: any) { registerService( args, { @@ -80,8 +80,10 @@ export function registerProVoValidation(...args: any) { 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; }[]>; + 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; @@ -95,6 +97,20 @@ export function registerDataProvider(...args: any) { { "defaultServiceId" : "DataProvider", "functions" : [ + { + "functionName" : "clear_table", + "argDefs" : [ + { + "name" : "password", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } + }, { "functionName" : "get_record", "argDefs" : [ @@ -109,6 +125,14 @@ export function registerDataProvider(...args: any) { "tag" : "primitive" } }, + { + "functionName" : "get_record_count", + "argDefs" : [ + ], + "returnType" : { + "tag" : "primitive" + } + }, { "functionName" : "get_records", "argDefs" : [ @@ -124,6 +148,196 @@ 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; +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; @@ -220,9 +434,95 @@ export function validate(...args: any) { -export function get_all_validations(node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; -export function get_all_validations(peer: FluencePeer, node: string, relay: string, config?: {ttl?: number}): Promise<{ snapshot_id: number; }[]>; -export function get_all_validations(...args: any) { +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 @@ -272,7 +572,7 @@ export function get_all_validations(...args: any) { return callFunction( args, { - "functionName" : "get_all_validations", + "functionName" : "get_records", "returnType" : { "tag" : "primitive" }, @@ -303,98 +603,3 @@ export function get_all_validations(...args: any) { script ) } - - -export type Get_validationResult = { snapshot_id: number; } -export function get_validation(snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_validation(peer: FluencePeer, snapshot_id: number, node: string, relay: string, config?: {ttl?: number}): Promise; -export function get_validation(...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_validation", - "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 - ) -} diff --git a/src/_aqua/snapshot.ts b/src/_aqua/snapshot.ts index cbe2502..d868407 100644 --- a/src/_aqua/snapshot.ts +++ b/src/_aqua/snapshot.ts @@ -80,7 +80,9 @@ export function registerEIPValidator(...args: any) { export interface DataProviderDef { - 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; }[]; }>; + 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; @@ -95,6 +97,20 @@ export function registerDataProvider(...args: any) { { "defaultServiceId" : "snapshot", "functions" : [ + { + "functionName" : "clear_table", + "argDefs" : [ + { + "name" : "password", + "argType" : { + "tag" : "primitive" + } + } + ], + "returnType" : { + "tag" : "primitive" + } + }, { "functionName" : "get_record", "argDefs" : [ @@ -109,6 +125,14 @@ export function registerDataProvider(...args: any) { "tag" : "primitive" } }, + { + "functionName" : "get_record_count", + "argDefs" : [ + ], + "returnType" : { + "tag" : "primitive" + } + }, { "functionName" : "get_records", "argDefs" : [ @@ -124,10 +148,10 @@ export function registerDataProvider(...args: any) { // 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) { +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 @@ -141,18 +165,18 @@ export function validate(...args: any) { (seq (seq (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (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" "eip712_json") [] eip712_json) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) ) (call -relay- ("op" "noop") []) ) (call relay ("op" "noop") []) ) (xor - (call peer ("snapshot" "eip712_validation_string") [eip712_json peer] result) + (call peer ("snapshot" "clear_table") [passwd] result) (seq (seq (seq @@ -180,13 +204,13 @@ export function validate(...args: any) { return callFunction( args, { - "functionName" : "validate", + "functionName" : "delete_rows", "returnType" : { "tag" : "primitive" }, "argDefs" : [ { - "name" : "relay", + "name" : "passwd", "argType" : { "tag" : "primitive" } @@ -198,7 +222,7 @@ export function validate(...args: any) { } }, { - "name" : "eip712_json", + "name" : "relay", "argType" : { "tag" : "primitive" } @@ -314,6 +338,92 @@ export function validate_from_url(...args: any) { } + +export function get_count(relay: string, peer_: string, config?: {ttl?: number}): Promise; +export function get_count(peer: FluencePeer, relay: string, peer_: string, config?: {ttl?: number}): Promise; +export function get_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" "relay") [] relay) + ) + (call %init_peer_id% ("getDataSrv" "peer") [] peer) + ) + (call -relay- ("op" "noop") []) + ) + (call relay ("op" "noop") []) + ) + (xor + (call peer ("snapshot" "get_record_count") [] 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_count", + "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 + ) +} + + 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(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; @@ -409,6 +519,101 @@ export function get_record(...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; +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 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(relay: string, peer_: string, config?: {ttl?: number}): Promise; export function get_records(peer: FluencePeer, relay: string, peer_: string, config?: {ttl?: number}): Promise; diff --git a/src/index.ts b/src/index.ts index bfb0ccb..c756b89 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,34 +1,25 @@ 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 { get_db, create_table, insert_event, DBRecord, DBResult, select_events, select_event, select_count } from './local_db'; import got from 'got'; -import { base64 } from "ethers/lib/utils"; +import { ethers } from "ethers"; +import { create_wallet, sign_response } from "./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"; + +// SQLite path 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 + // 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); @@ -80,18 +71,32 @@ class EIPValidator implements EIPValidatorDef { } // class exposed as service `DataProviderDef` in snapshot.aqua class DataProvider implements DataProviderDef { - + // record by snapshot_id async get_record(snapshot_id: number): Promise { return select_event(snapshot_id); - } + // get all records. currently limited to 100 rows max. + // todo: add paginaton async get_records(): Promise { // todo: add pagination const result = await select_events(); console.log("get records: ", result); return result; } + + // row count; if err doing so, return value is -1 + async get_record_count(): Promise { + const result = await select_count(); + console.log("get records: ", result); + return result; + } + + // clear table -- illustrative purposes only + async clear_table(password: string): Promise { + return this.clear_table(password); + + } } @@ -123,14 +128,7 @@ async function main() { 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); - + console.log("crtl-c to exit"); // await Fluence.stop(); } diff --git a/src/local_db.ts b/src/local_db.ts index dc5cb33..6c0af0f 100644 --- a/src/local_db.ts +++ b/src/local_db.ts @@ -8,6 +8,7 @@ const sqlite3 = sqlite.verbose(); import { Response } from './eip_processor'; const DB_PATH = './data/snapshot.db'; +const PWD_HASH = "bad really bad"; export interface DBRecord { snapshot_id: number; @@ -44,7 +45,6 @@ export function get_db(db_path: string): sqlite.Database { } - export async function create_table(db: sqlite.Database) { const stmt = `create table if not exists snapshot ( snapshot_id integer unique, @@ -88,28 +88,27 @@ export async function insert_event(db: sqlite.Database, eip_obj: any, response_o export async function select_event(snapshot_id: number): Promise { var db = get_db(DB_PATH); let result: DBResult = {} as DBResult; - const stmt = 'select * from snapshot where snapshot_id=?' + const stmt = 'select * from snapshot where snapshot_id=?'; return new Promise((resolve) => { db.get(stmt, [snapshot_id], (err, row) => { db.close(); if (err) { result.stderr = err.message; result.stdout = []; - resolve(result) } else { result.stderr = ""; const response_arr = new Array(); response_arr.push(row); result.stdout = response_arr; - resolve(result); } + resolve(result) }); }); }; // todo: add pagination -export function select_events(): Promise { +export async function select_events(): Promise { var db = get_db(DB_PATH); const stmt = "select * from snapshot limit ?"; let result: DBResult = {} as DBResult; @@ -131,4 +130,54 @@ export function select_events(): Promise { resolve(result); }); }); -} \ No newline at end of file +} + +export async function select_count(): Promise { + var db = get_db(DB_PATH); + const stmt = 'select count(*) as count from snapshot'; + let result: number; + return new Promise((resolve) => { + db.get(stmt, [], (err, row) => { + db.close(); + if (err) { + result = -1; + } + else { + console.log("count: ", row); + result = row.count; + } + resolve(result); + }); + }); +}; + + +export async function clear_table(pwd_hash: string): Promise { + let result: DBResult = {} as DBResult; + // todo: you know what to do + if (pwd_hash === PWD_HASH) { + result.stderr = "invalid password"; + result.stdout = []; + resolveProperties(result); + } + + var db = get_db(DB_PATH); + const stmt = 'delete from snapshot' + return new Promise((resolve) => { + db.get(stmt, [], (err, row) => { + db.close(); + if (err) { + result.stderr = err.message; + result.stdout = []; + } + else { + console.log("count: ", row); + result.stderr = ""; + const response_arr = new Array(); + response_arr.push(row); + result.stdout = response_arr; + } + resolve(result); + }); + }); +}; \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..d9b4583 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,11 @@ +import { ethers } from "ethers"; +// import { base64 } from "ethers/lib/utils"; + +export function create_wallet(sk: string): ethers.Wallet { + return new ethers.Wallet(sk); +} + +export async function sign_response(wallet: ethers.Wallet, response: Response): Promise { + const signed_msg = wallet.signMessage(JSON.stringify(response)); + return signed_msg; +} \ No newline at end of file