@aztec/txe 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@aztec/txe",
3
+ "version": "0.44.0",
4
+ "type": "module",
5
+ "exports": "./dest/index.js",
6
+ "bin": "./dest/bin/index.js",
7
+ "typedocOptions": {
8
+ "entryPoints": [
9
+ "./src/index.ts"
10
+ ],
11
+ "name": "TXE",
12
+ "tsconfig": "./tsconfig.json"
13
+ },
14
+ "scripts": {
15
+ "build": "yarn clean && tsc -b",
16
+ "build:dev": "tsc -b --watch",
17
+ "clean": "rm -rf ./dest .tsbuildinfo",
18
+ "formatting": "run -T prettier --check ./src && run -T eslint ./src",
19
+ "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
20
+ "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests",
21
+ "dev": "DEBUG='aztec:*' && node ./dest/bin/index.js",
22
+ "start": "node ./dest/bin/index.js"
23
+ },
24
+ "inherits": [
25
+ "../package.common.json"
26
+ ],
27
+ "jest": {
28
+ "moduleNameMapper": {
29
+ "^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
30
+ },
31
+ "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
32
+ "rootDir": "./src",
33
+ "workerThreads": true,
34
+ "transform": {
35
+ "^.+\\.tsx?$": [
36
+ "@swc/jest",
37
+ {
38
+ "jsc": {
39
+ "parser": {
40
+ "syntax": "typescript",
41
+ "decorators": true
42
+ }
43
+ }
44
+ }
45
+ ]
46
+ },
47
+ "extensionsToTreatAsEsm": [
48
+ ".ts"
49
+ ],
50
+ "reporters": [
51
+ [
52
+ "default",
53
+ {
54
+ "summaryThreshold": 9999
55
+ }
56
+ ]
57
+ ]
58
+ },
59
+ "dependencies": {
60
+ "@aztec/archiver": "0.44.0",
61
+ "@aztec/aztec.js": "0.44.0",
62
+ "@aztec/circuit-types": "0.44.0",
63
+ "@aztec/circuits.js": "0.44.0",
64
+ "@aztec/foundation": "0.44.0",
65
+ "@aztec/key-store": "0.44.0",
66
+ "@aztec/kv-store": "0.44.0",
67
+ "@aztec/noir-contracts.js": "0.44.0",
68
+ "@aztec/pxe": "0.44.0",
69
+ "@aztec/simulator": "0.44.0",
70
+ "@aztec/types": "0.44.0",
71
+ "@aztec/world-state": "0.44.0"
72
+ },
73
+ "devDependencies": {
74
+ "@jest/globals": "^29.5.0",
75
+ "@types/jest": "^29.5.0",
76
+ "@types/node": "^18.7.23",
77
+ "jest": "^29.5.0",
78
+ "jest-mock-extended": "^3.0.3",
79
+ "ts-node": "^10.9.1",
80
+ "typescript": "^5.0.4"
81
+ },
82
+ "files": [
83
+ "dest",
84
+ "src",
85
+ "!*.test.*"
86
+ ],
87
+ "types": "./dest/index.d.ts",
88
+ "engines": {
89
+ "node": ">=18"
90
+ }
91
+ }
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env -S node --no-warnings
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
4
+ import { type Logger, createDebugLogger } from '@aztec/foundation/log';
5
+
6
+ import http from 'http';
7
+
8
+ import { TXEService } from '../txe_service/txe_service.js';
9
+ import { type ForeignCallResult, toForeignCallResult } from '../util/encoding.js';
10
+
11
+ const { TXE_PORT = 8080 } = process.env;
12
+
13
+ const logger = createDebugLogger('aztec:txe_service');
14
+
15
+ const TXESessions = new Map<number, TXEService>();
16
+
17
+ type MethodNames<T> = {
18
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
19
+ }[keyof T];
20
+
21
+ type TXEForeignCallInput = {
22
+ session_id: number;
23
+ function: MethodNames<TXEService> | 'reset';
24
+ inputs: any[];
25
+ };
26
+
27
+ class TXEDispatcher {
28
+ constructor(private logger: Logger) {}
29
+
30
+ // eslint-disable-next-line camelcase
31
+ async resolve_foreign_call({
32
+ session_id: sessionId,
33
+ function: functionName,
34
+ inputs,
35
+ }: TXEForeignCallInput): Promise<ForeignCallResult> {
36
+ this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
37
+
38
+ if (!TXESessions.has(sessionId) && functionName != 'reset') {
39
+ this.logger.info(`Creating new session ${sessionId}`);
40
+ TXESessions.set(sessionId, await TXEService.init(logger));
41
+ }
42
+
43
+ if (functionName === 'reset') {
44
+ TXESessions.delete(sessionId) &&
45
+ this.logger.info(`Called reset on session ${sessionId}, yeeting it out of existence`);
46
+ return toForeignCallResult([]);
47
+ } else {
48
+ const txeService = TXESessions.get(sessionId);
49
+ const response = await (txeService as any)[functionName](...inputs);
50
+ return response;
51
+ }
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Creates an http server that forwards calls to the TXE and starts it on the given port.
57
+ * @param txeService - TXE that answers queries to the created HTTP server.
58
+ * @param port - Port to listen in.
59
+ * @returns A running http server.
60
+ */
61
+ export function startTXEHttpServer(dispatcher: TXEDispatcher, port: string | number): http.Server {
62
+ const txeServer = new JsonRpcServer(dispatcher, { Fr }, {}, ['init']);
63
+
64
+ const app = txeServer.getApp();
65
+ const httpServer = http.createServer(app.callback());
66
+ httpServer.timeout = 1e3 * 60 * 5; // 5 minutes
67
+ httpServer.listen(port);
68
+
69
+ return httpServer;
70
+ }
71
+
72
+ /**
73
+ * Create and start a new TXE HTTP Server
74
+ */
75
+ function main() {
76
+ logger.info(`Setting up TXE...`);
77
+
78
+ startTXEHttpServer(new TXEDispatcher(logger), TXE_PORT);
79
+
80
+ logger.info(`TXE listening on port ${TXE_PORT}`);
81
+ }
82
+
83
+ main();