mirror of
https://github.com/fluencelabs/fluence-js.git
synced 2025-03-16 15:50:48 +00:00
Swap Air Interpreter with AVM Worker abstraction
This commit is contained in:
parent
f41e8f035d
commit
d6daaf05f1
55
package-lock.json
generated
55
package-lock.json
generated
@ -10,7 +10,8 @@
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@chainsafe/libp2p-noise": "4.0.0",
|
||||
"@fluencelabs/avm": "0.16.0-restriction-operator.9",
|
||||
"@fluencelabs/avm-worker": "^0.0.2",
|
||||
"@fluencelabs/avm-worker-common": "^0.0.2",
|
||||
"async": "3.2.0",
|
||||
"base64-js": "1.5.1",
|
||||
"bs58": "4.0.1",
|
||||
@ -646,13 +647,32 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/avm": {
|
||||
"version": "0.16.0-restriction-operator.9",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.16.0-restriction-operator.9.tgz",
|
||||
"integrity": "sha512-34vJqo8TIho5H2+WhEAJOa6WxAPiS+c7Z3WKmRZVi+GAsZN3Hv2NiuiCFNFBmPRoD+juzHe4Dmv5cF7HZc6O6w==",
|
||||
"version": "0.17.4",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.17.4.tgz",
|
||||
"integrity": "sha512-VKD/XaEDXsP0eEgpbncBCsLyHbGDh+f7b96KbYoHld25r3C7mgEbbEVImKLaHGDUiR7ylPBxrtQhNL9MpgKwxA==",
|
||||
"dependencies": {
|
||||
"base64-js": "1.5.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/avm-worker": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker/-/avm-worker-0.0.2.tgz",
|
||||
"integrity": "sha512-S5ijm0QpqNSVSlj3grj6479mBfdF9O1E03xUb5N1/RiBH3fTQnGpK5u5GmbKwPJ6CvZonH7jy8tfMhGDQq5q2w==",
|
||||
"dependencies": {
|
||||
"@fluencelabs/avm": "^0.17.4",
|
||||
"@fluencelabs/avm-worker-common": "^0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/avm-worker-common": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker-common/-/avm-worker-common-0.0.2.tgz",
|
||||
"integrity": "sha512-2SrM9gReZ3h1A9oJGFGVxLSXEnjy1qhN+GG+abA0WEVkOTup6IKAkmKdbkby+HNgZYvdSqlVpCYhcPzdtmwlGw=="
|
||||
},
|
||||
"node_modules/@fluencelabs/avm-worker/node_modules/@fluencelabs/avm-worker-common": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker-common/-/avm-worker-common-0.0.1.tgz",
|
||||
"integrity": "sha512-e3+oJD5NmEnCsKhAamZa68ogKX2AOZsWOJkORmYeAF+vDyzSa/nFxqRYa1KVOWhtlXZrKkUg7Mdk4qrZpZiuQg=="
|
||||
},
|
||||
"node_modules/@istanbuljs/load-nyc-config": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||
@ -8687,13 +8707,34 @@
|
||||
}
|
||||
},
|
||||
"@fluencelabs/avm": {
|
||||
"version": "0.16.0-restriction-operator.9",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.16.0-restriction-operator.9.tgz",
|
||||
"integrity": "sha512-34vJqo8TIho5H2+WhEAJOa6WxAPiS+c7Z3WKmRZVi+GAsZN3Hv2NiuiCFNFBmPRoD+juzHe4Dmv5cF7HZc6O6w==",
|
||||
"version": "0.17.4",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.17.4.tgz",
|
||||
"integrity": "sha512-VKD/XaEDXsP0eEgpbncBCsLyHbGDh+f7b96KbYoHld25r3C7mgEbbEVImKLaHGDUiR7ylPBxrtQhNL9MpgKwxA==",
|
||||
"requires": {
|
||||
"base64-js": "1.5.1"
|
||||
}
|
||||
},
|
||||
"@fluencelabs/avm-worker": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker/-/avm-worker-0.0.2.tgz",
|
||||
"integrity": "sha512-S5ijm0QpqNSVSlj3grj6479mBfdF9O1E03xUb5N1/RiBH3fTQnGpK5u5GmbKwPJ6CvZonH7jy8tfMhGDQq5q2w==",
|
||||
"requires": {
|
||||
"@fluencelabs/avm": "^0.17.4",
|
||||
"@fluencelabs/avm-worker-common": "^0.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fluencelabs/avm-worker-common": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker-common/-/avm-worker-common-0.0.1.tgz",
|
||||
"integrity": "sha512-e3+oJD5NmEnCsKhAamZa68ogKX2AOZsWOJkORmYeAF+vDyzSa/nFxqRYa1KVOWhtlXZrKkUg7Mdk4qrZpZiuQg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@fluencelabs/avm-worker-common": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-worker-common/-/avm-worker-common-0.0.2.tgz",
|
||||
"integrity": "sha512-2SrM9gReZ3h1A9oJGFGVxLSXEnjy1qhN+GG+abA0WEVkOTup6IKAkmKdbkby+HNgZYvdSqlVpCYhcPzdtmwlGw=="
|
||||
},
|
||||
"@istanbuljs/load-nyc-config": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||
|
@ -21,7 +21,8 @@
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@chainsafe/libp2p-noise": "4.0.0",
|
||||
"@fluencelabs/avm": "0.16.0-restriction-operator.9",
|
||||
"@fluencelabs/avm-worker": "^0.0.2",
|
||||
"@fluencelabs/avm-worker-common": "^0.0.2",
|
||||
"async": "3.2.0",
|
||||
"base64-js": "1.5.1",
|
||||
"bs58": "4.0.1",
|
||||
|
@ -14,14 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
AirInterpreter,
|
||||
CallRequestsArray,
|
||||
CallResultsArray,
|
||||
InterpreterResult,
|
||||
LogLevel,
|
||||
CallServiceResult as AvmCallServiceResult,
|
||||
} from '@fluencelabs/avm';
|
||||
import { Multiaddr } from 'multiaddr';
|
||||
import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes';
|
||||
import { CallServiceHandler as LegacyCallServiceHandler } from './compilerSupport/LegacyCallServiceHandler';
|
||||
@ -29,12 +21,13 @@ import { PeerIdB58 } from './commonTypes';
|
||||
import { FluenceConnection } from './FluenceConnection';
|
||||
import { Particle, ParticleExecutionStage, ParticleQueueItem } from './Particle';
|
||||
import { KeyPair } from './KeyPair';
|
||||
import { createInterpreter, dataToString } from './utils';
|
||||
import { dataToString, avmLogFunction } from './utils';
|
||||
import { filter, pipe, Subject, tap } from 'rxjs';
|
||||
import { RequestFlow } from './compilerSupport/v1';
|
||||
import log from 'loglevel';
|
||||
import { defaultServices } from './defaultServices';
|
||||
import { instanceOf } from 'ts-pattern';
|
||||
import { AvmWorker, InterpreterResult, LogLevel } from '@fluencelabs/avm-worker-common';
|
||||
import Worker from '@fluencelabs/avm-worker';
|
||||
|
||||
/**
|
||||
* Node of the Fluence network specified as a pair of node's multiaddr and it's peer id
|
||||
@ -102,6 +95,11 @@ export interface PeerConfig {
|
||||
* If the option is not set default TTL will be 7000
|
||||
*/
|
||||
defaultTtlMs?: number;
|
||||
|
||||
/**
|
||||
* Pluggable AVM worker implementation
|
||||
*/
|
||||
avmWorker?: AvmWorker;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -182,7 +180,8 @@ export class FluencePeer {
|
||||
? config?.defaultTtlMs
|
||||
: DEFAULT_TTL;
|
||||
|
||||
this._interpreter = await createInterpreter(config?.avmLogLevel || 'off');
|
||||
this._worker = config?.avmWorker || new Worker(avmLogFunction);
|
||||
await this._worker.init(config?.avmLogLevel || 'off');
|
||||
|
||||
if (config?.connectTo) {
|
||||
let connectToMultiAddr: Multiaddr;
|
||||
@ -358,7 +357,7 @@ export class FluencePeer {
|
||||
private _relayPeerId: PeerIdB58 | null = null;
|
||||
private _keyPair: KeyPair;
|
||||
private _connection: FluenceConnection;
|
||||
private _interpreter: AirInterpreter;
|
||||
private _worker: AvmWorker;
|
||||
private _timeouts: Array<NodeJS.Timeout> = [];
|
||||
private _particleQueues = new Map<string, Subject<ParticleQueueItem>>();
|
||||
|
||||
@ -420,9 +419,9 @@ export class FluencePeer {
|
||||
// force new line
|
||||
filterExpiredParticles(this._expireParticle.bind(this)),
|
||||
)
|
||||
.subscribe((item) => {
|
||||
.subscribe(async (item) => {
|
||||
const particle = item.particle;
|
||||
const result = runInterpreter(this.getStatus().peerId, this._interpreter, particle, prevData);
|
||||
const result = await runAvmWorker(this.getStatus().peerId, this._worker, particle, prevData);
|
||||
|
||||
// Do not continue if there was an error in particle interpretation
|
||||
if (!isInterpretationSuccessful(result)) {
|
||||
@ -585,16 +584,16 @@ function registerDefaultServices(peer: FluencePeer) {
|
||||
}
|
||||
}
|
||||
|
||||
function runInterpreter(
|
||||
async function runAvmWorker(
|
||||
currentPeerId: PeerIdB58,
|
||||
interpreter: AirInterpreter,
|
||||
worker: AvmWorker,
|
||||
particle: Particle,
|
||||
prevData: Uint8Array,
|
||||
): InterpreterResult {
|
||||
): Promise<InterpreterResult> {
|
||||
particle.logTo('debug', 'Sending particle to interpreter');
|
||||
log.debug('prevData: ', dataToString(prevData));
|
||||
log.debug('data: ', dataToString(particle.data));
|
||||
const interpreterResult = interpreter.invoke(
|
||||
const interpreterResult = await worker.run(
|
||||
particle.script,
|
||||
prevData,
|
||||
particle.data,
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { fromByteArray, toByteArray } from 'base64-js';
|
||||
import { CallResultsArray, LogLevel } from '@fluencelabs/avm';
|
||||
import { CallResultsArray, LogLevel } from '@fluencelabs/avm-worker-common';
|
||||
import log from 'loglevel';
|
||||
import { ParticleContext } from './commonTypes';
|
||||
import { dataToString } from './utils';
|
||||
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CallRequest, SecurityTetraplet } from '@fluencelabs/avm';
|
||||
import { SecurityTetraplet } from '@fluencelabs/avm-worker-common';
|
||||
|
||||
/**
|
||||
* Peer ID's id as a base58 string (multihash/CIDv0).
|
||||
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { SecurityTetraplet } from '@fluencelabs/avm';
|
||||
import { SecurityTetraplet } from '@fluencelabs/avm-worker-common';
|
||||
import { match } from 'ts-pattern';
|
||||
import { CallParams, Fluence, FluencePeer } from '../../index';
|
||||
import { CallServiceData, GenericCallServiceHandler, CallServiceResult, ResultCodes } from '../commonTypes';
|
||||
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CallServiceResult } from '@fluencelabs/avm';
|
||||
import { CallServiceResult } from '@fluencelabs/avm-worker-common';
|
||||
import { encode, decode } from 'bs58';
|
||||
import { GenericCallServiceHandler, ResultCodes } from './commonTypes';
|
||||
|
||||
|
@ -14,34 +14,31 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { AirInterpreter, LogLevel as AvmLogLevel } from '@fluencelabs/avm';
|
||||
import log from 'loglevel';
|
||||
import { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes } from './commonTypes';
|
||||
import { AvmLoglevel, FluencePeer } from './FluencePeer';
|
||||
import { FluencePeer } from './FluencePeer';
|
||||
import { Particle, ParticleExecutionStage } from './Particle';
|
||||
import { LogLevel as AvmLoglevel } from '@fluencelabs/avm-worker-common';
|
||||
|
||||
export const createInterpreter = (logLevel: AvmLoglevel): Promise<AirInterpreter> => {
|
||||
const logFn = (level: AvmLogLevel, msg: string) => {
|
||||
switch (level) {
|
||||
case 'error':
|
||||
log.error(msg);
|
||||
break;
|
||||
export const avmLogFunction = (level: AvmLoglevel, msg: string) => {
|
||||
switch (level) {
|
||||
case 'error':
|
||||
log.error(msg);
|
||||
break;
|
||||
|
||||
case 'warn':
|
||||
log.warn(msg);
|
||||
break;
|
||||
case 'warn':
|
||||
log.warn(msg);
|
||||
break;
|
||||
|
||||
case 'info':
|
||||
log.info(msg);
|
||||
break;
|
||||
case 'info':
|
||||
log.info(msg);
|
||||
break;
|
||||
|
||||
case 'debug':
|
||||
case 'trace':
|
||||
log.log(msg);
|
||||
break;
|
||||
}
|
||||
};
|
||||
return AirInterpreter.create(logLevel, logFn);
|
||||
case 'debug':
|
||||
case 'trace':
|
||||
log.log(msg);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
export const MakeServiceCall = (fn: (args: any[]) => CallServiceResultType) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user