From 73e7c130e425579559c97bc62f48e76867a9a53a Mon Sep 17 00:00:00 2001 From: DieMyst Date: Thu, 24 Dec 2020 18:11:47 +0300 Subject: [PATCH 1/5] data to base64 before sending to a node --- src/fluenceClient.ts | 4 ++-- src/fluenceConnection.ts | 7 ++++--- src/particle.ts | 34 +++++++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/fluenceClient.ts b/src/fluenceClient.ts index 64f18205c..8df80d435 100644 --- a/src/fluenceClient.ts +++ b/src/fluenceClient.ts @@ -66,7 +66,7 @@ export class FluenceClient { log.info(`Particle expired. Now: ${now}, ttl: ${particle.ttl}, ts: ${particle.timestamp}`); } else { // if there is no subscription yet, previous data is empty - let prevData = []; + let prevData: number[] = []; let prevParticle = this.subscriptions.get(particle.id); if (prevParticle) { prevData = prevParticle.data; @@ -131,7 +131,7 @@ export class FluenceClient { let _this = this; return async (particle: Particle) => { - let data = particle.data; + let data: any = particle.data; let error: any = data['protocol!error']; if (error !== undefined) { log.error('error in external particle: '); diff --git a/src/fluenceConnection.ts b/src/fluenceConnection.ts index ffb0a6589..0cc3f9967 100644 --- a/src/fluenceConnection.ts +++ b/src/fluenceConnection.ts @@ -23,7 +23,7 @@ import pipe from 'it-pipe'; import Multiaddr from 'multiaddr'; import PeerId from 'peer-id'; import * as log from 'loglevel'; -import { build, parseParticle, Particle, stringifyParticle } from './particle'; +import { build, parseParticle, Particle, toAction } from './particle'; export const PROTOCOL_NAME = '/fluence/faas/1.0.0'; @@ -121,8 +121,9 @@ export class FluenceConnection { async sendParticle(particle: Particle): Promise { this.checkConnectedOrThrow(); - let particleStr = stringifyParticle(particle); - log.debug('send particle: \n' + JSON.stringify(particle, undefined, 2)); + let action = toAction(particle) + let particleStr = JSON.stringify(action); + log.debug('send particle: \n' + JSON.stringify(action, undefined, 2)); // create outgoing substream const conn = (await this.node.dialProtocol(this.address, PROTOCOL_NAME)) as { diff --git a/src/particle.ts b/src/particle.ts index 699ded67e..9871c428d 100644 --- a/src/particle.ts +++ b/src/particle.ts @@ -15,6 +15,7 @@ */ import { v4 as uuidv4 } from 'uuid'; +import { fromByteArray } from 'base64-js'; import PeerId from 'peer-id'; import { encode } from 'bs58'; import { addData } from './dataStorage'; @@ -29,7 +30,18 @@ export interface Particle { script: string; // sign upper fields signature: string; - data: any; + data: number[]; +} + +interface ParticleAction { + action: 'Particle' + id: string; + init_peer_id: string; + timestamp: number; + ttl: number; + script: string; + signature: number[]; + data: string; } function wrapScript(selfPeerId: string, script: string, fields: string[]): string { @@ -74,14 +86,18 @@ export async function build(peerId: PeerId, script: string, data: Map Date: Thu, 24 Dec 2020 18:15:23 +0300 Subject: [PATCH 2/5] doc --- src/particle.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/particle.ts b/src/particle.ts index 9871c428d..6521fe9f2 100644 --- a/src/particle.ts +++ b/src/particle.ts @@ -33,6 +33,9 @@ export interface Particle { data: number[]; } +/** + * Represents particle action to send to a node + */ interface ParticleAction { action: 'Particle' id: string; From fd2590c76805a5161355b70fe693e232765d5c84 Mon Sep 17 00:00:00 2001 From: DieMyst Date: Thu, 24 Dec 2020 18:16:44 +0300 Subject: [PATCH 3/5] doc --- src/particle.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/particle.ts b/src/particle.ts index 6521fe9f2..5ccc7b058 100644 --- a/src/particle.ts +++ b/src/particle.ts @@ -87,7 +87,7 @@ export async function build(peerId: PeerId, script: string, data: Map Date: Thu, 24 Dec 2020 18:48:16 +0300 Subject: [PATCH 4/5] fix bindgen signatures --- package-lock.json | 2 +- src/aqua/index.d.ts | 2 +- src/aqua/index_bg.js | 12 ++++++++++-- src/fluenceClient.ts | 6 +++--- src/particle.ts | 6 +++--- src/stepper.ts | 4 ++-- src/stepperOutcome.ts | 2 +- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22240adf2..1ed349146 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "fluence", - "version": "0.7.103", + "version": "0.7.106", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/aqua/index.d.ts b/src/aqua/index.d.ts index a80675aa6..d51c01440 100644 --- a/src/aqua/index.d.ts +++ b/src/aqua/index.d.ts @@ -9,7 +9,7 @@ * @param {string} log_level * @returns {string} */ -export function invoke(wasm: any, init_user_id: string, aqua: string, prev_data: string, data: string, log_level: string): string; +export function invoke(wasm: any, init_user_id: string, aqua: string, prev_data: Uint8Array, data: Uint8Array, log_level: string): string; export function ast(wasm: any, script: string): string; export function return_current_peer_id(wasm: any, peerId: string, arg0: any): void; export function return_call_service_result(wasm: any, ret: string, arg0: any): void; diff --git a/src/aqua/index_bg.js b/src/aqua/index_bg.js index 4561bf0ef..68c40f49b 100644 --- a/src/aqua/index_bg.js +++ b/src/aqua/index_bg.js @@ -91,6 +91,14 @@ cachedTextDecoder.decode(); export function getStringFromWasm0(wasm, ptr, len) { return cachedTextDecoder.decode(getUint8Memory0(wasm).subarray(ptr, ptr + len)); } + +function passArray8ToWasm0(wasm, arg, malloc) { + const ptr = malloc(arg.length * 1); + getUint8Memory0(wasm).set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + /** * @param {any} wasm * @param {string} init_user_id @@ -106,9 +114,9 @@ export function invoke(wasm, init_user_id, aqua, prev_data, data, log_level) { var len0 = WASM_VECTOR_LEN; var ptr1 = passStringToWasm0(wasm, aqua, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len1 = WASM_VECTOR_LEN; - var ptr2 = passStringToWasm0(wasm, prev_data, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var ptr2 = passArray8ToWasm0(wasm, prev_data, wasm.__wbindgen_malloc); var len2 = WASM_VECTOR_LEN; - var ptr3 = passStringToWasm0(wasm, data, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var ptr3 = passArray8ToWasm0(wasm, data, wasm.__wbindgen_malloc); var len3 = WASM_VECTOR_LEN; var ptr4 = passStringToWasm0(wasm, log_level, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len4 = WASM_VECTOR_LEN; diff --git a/src/fluenceClient.ts b/src/fluenceClient.ts index 8df80d435..989604636 100644 --- a/src/fluenceClient.ts +++ b/src/fluenceClient.ts @@ -66,7 +66,7 @@ export class FluenceClient { log.info(`Particle expired. Now: ${now}, ttl: ${particle.ttl}, ts: ${particle.timestamp}`); } else { // if there is no subscription yet, previous data is empty - let prevData: number[] = []; + let prevData: Uint8Array = Buffer.from([]); let prevParticle = this.subscriptions.get(particle.id); if (prevParticle) { prevData = prevParticle.data; @@ -79,8 +79,8 @@ export class FluenceClient { let stepperOutcomeStr = this.interpreter( particle.init_peer_id, particle.script, - JSON.stringify(prevData), - JSON.stringify(particle.data), + prevData, + particle.data, ); let stepperOutcome: StepperOutcome = JSON.parse(stepperOutcomeStr); diff --git a/src/particle.ts b/src/particle.ts index 5ccc7b058..c3b0a6a10 100644 --- a/src/particle.ts +++ b/src/particle.ts @@ -30,7 +30,7 @@ export interface Particle { script: string; // sign upper fields signature: string; - data: number[]; + data: Uint8Array; } /** @@ -78,7 +78,7 @@ export async function build(peerId: PeerId, script: string, data: Map string; +export type InterpreterInvoke = (init_user_id: string, script: string, prev_data: Uint8Array, data: Uint8Array) => string; type ImportObject = { './aquamarine_client_bg.js': { // fn call_service_impl(service_id: String, fn_name: String, args: String, security_tetraplets: String) -> String; @@ -173,7 +173,7 @@ export async function instantiateInterpreter(peerId: PeerId): Promise { + return (init_user_id: string, script: string, prev_data: Uint8Array, data: Uint8Array) => { let logLevel = log.getLevel(); let logLevelStr = 'info'; if (logLevel === 0) { diff --git a/src/stepperOutcome.ts b/src/stepperOutcome.ts index ae674e69f..9109d99e9 100644 --- a/src/stepperOutcome.ts +++ b/src/stepperOutcome.ts @@ -16,6 +16,6 @@ export interface StepperOutcome { ret_code: number; - data: number[]; + data: Uint8Array; next_peer_pks: string[]; } From 8fc5ed003013de9de2ca6c88454eb7b72e197cee Mon Sep 17 00:00:00 2001 From: DieMyst Date: Thu, 24 Dec 2020 18:48:44 +0300 Subject: [PATCH 5/5] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a6fa8bfd0..d85b1b136 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fluence", - "version": "0.7.106", + "version": "0.7.107", "description": "the browser js-libp2p client for the Fluence network", "main": "./dist/fluence.js", "typings": "./dist/fluence.d.ts",