@aztec/txe 0.46.5 → 0.46.6

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.
@@ -0,0 +1,48 @@
1
+ import { Fr, unpackBytecode } from '@aztec/circuits.js';
2
+ import { PrivateFunctionsTree } from '@aztec/pxe';
3
+ export class TXEPublicContractDataSource {
4
+ constructor(txeOracle) {
5
+ this.txeOracle = txeOracle;
6
+ }
7
+ async getPublicFunction(address, selector) {
8
+ const bytecode = await this.txeOracle.getContractDataOracle().getBytecode(address, selector);
9
+ if (!bytecode) {
10
+ return undefined;
11
+ }
12
+ return { bytecode, selector };
13
+ }
14
+ getBlockNumber() {
15
+ return this.txeOracle.getBlockNumber();
16
+ }
17
+ async getContractClass(id) {
18
+ const contractClass = await this.txeOracle.getContractDataOracle().getContractClass(id);
19
+ const artifact = await this.txeOracle.getContractDataOracle().getContractArtifact(id);
20
+ const tree = new PrivateFunctionsTree(artifact);
21
+ const privateFunctionsRoot = tree.getFunctionTreeRoot();
22
+ return {
23
+ id,
24
+ artifactHash: contractClass.artifactHash,
25
+ packedBytecode: contractClass.packedBytecode,
26
+ publicFunctions: unpackBytecode(contractClass.packedBytecode),
27
+ privateFunctionsRoot: new Fr(privateFunctionsRoot.root),
28
+ version: contractClass.version,
29
+ privateFunctions: [],
30
+ unconstrainedFunctions: [],
31
+ };
32
+ }
33
+ async getContract(address) {
34
+ const instance = await this.txeOracle.getContractDataOracle().getContractInstance(address);
35
+ return { ...instance, address };
36
+ }
37
+ getContractClassIds() {
38
+ throw new Error('Method not implemented.');
39
+ }
40
+ async getContractArtifact(address) {
41
+ const instance = await this.txeOracle.getContractDataOracle().getContractInstance(address);
42
+ return this.txeOracle.getContractDataOracle().getContractArtifact(instance.contractClassId);
43
+ }
44
+ addContractArtifact(address, contract) {
45
+ return this.txeOracle.addContractArtifact(contract);
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3B1YmxpY19jb250cmFjdF9kYXRhX3NvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3R4ZV9wdWJsaWNfY29udHJhY3RfZGF0YV9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixFQUFFLEVBQXlCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVVsRCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLFlBQW9CLFNBQWM7UUFBZCxjQUFTLEdBQVQsU0FBUyxDQUFLO0lBQUcsQ0FBQztJQUV0QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBcUIsRUFBRSxRQUEwQjtRQUN2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBTTtRQUMzQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixNQUFNLElBQUksR0FBRyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFeEQsT0FBTztZQUNMLEVBQUU7WUFDRixZQUFZLEVBQUUsYUFBYyxDQUFDLFlBQVk7WUFDekMsY0FBYyxFQUFFLGFBQWMsQ0FBQyxjQUFjO1lBQzdDLGVBQWUsRUFBRSxjQUFjLENBQUMsYUFBYyxDQUFDLGNBQWMsQ0FBQztZQUM5RCxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxvQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDeEQsT0FBTyxFQUFFLGFBQWMsQ0FBQyxPQUFPO1lBQy9CLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsc0JBQXNCLEVBQUUsRUFBRTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBcUI7UUFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBcUI7UUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFxQixFQUFFLFFBQTBCO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,14 @@
1
+ import { type AztecAddress, Fr } from '@aztec/circuits.js';
2
+ import { type PublicStateDB } from '@aztec/simulator';
3
+ import { type TXE } from '../oracle/txe_oracle.js';
4
+ export declare class TXEPublicStateDB implements PublicStateDB {
5
+ private txeOracle;
6
+ constructor(txeOracle: TXE);
7
+ storageRead(contract: AztecAddress, slot: Fr): Promise<Fr>;
8
+ storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<bigint>;
9
+ checkpoint(): Promise<void>;
10
+ rollbackToCheckpoint(): Promise<void>;
11
+ commit(): Promise<void>;
12
+ rollbackToCommit(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=txe_public_state_db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txe_public_state_db.d.ts","sourceRoot":"","sources":["../../src/util/txe_public_state_db.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,EACjB,EAAE,EAIH,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAEnD,qBAAa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,GAAG;IAE5B,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAiB1D,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAG3B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAGrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGvB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -0,0 +1,37 @@
1
+ import { MerkleTreeId } from '@aztec/circuit-types';
2
+ import { Fr, PUBLIC_DATA_SUBTREE_HEIGHT, PublicDataTreeLeaf, } from '@aztec/circuits.js';
3
+ import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
4
+ export class TXEPublicStateDB {
5
+ constructor(txeOracle) {
6
+ this.txeOracle = txeOracle;
7
+ }
8
+ async storageRead(contract, slot) {
9
+ const db = this.txeOracle.getTrees().asLatest();
10
+ const leafSlot = computePublicDataTreeLeafSlot(contract, slot).toBigInt();
11
+ const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
12
+ let value = Fr.ZERO;
13
+ if (lowLeafResult && lowLeafResult.alreadyPresent) {
14
+ const preimage = (await db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index));
15
+ value = preimage.value;
16
+ }
17
+ return value;
18
+ }
19
+ async storageWrite(contract, slot, newValue) {
20
+ const db = this.txeOracle.getTrees().asLatest();
21
+ await db.batchInsert(MerkleTreeId.PUBLIC_DATA_TREE, [new PublicDataTreeLeaf(computePublicDataTreeLeafSlot(contract, slot), newValue).toBuffer()], PUBLIC_DATA_SUBTREE_HEIGHT);
22
+ return newValue.toBigInt();
23
+ }
24
+ checkpoint() {
25
+ return Promise.resolve();
26
+ }
27
+ rollbackToCheckpoint() {
28
+ throw new Error('Cannot rollback');
29
+ }
30
+ commit() {
31
+ return Promise.resolve();
32
+ }
33
+ rollbackToCommit() {
34
+ throw new Error('Cannot rollback');
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX3B1YmxpY19zdGF0ZV9kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3R4ZV9wdWJsaWNfc3RhdGVfZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLGtCQUFrQixHQUVuQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS3hFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0IsU0FBYztRQUFkLGNBQVMsR0FBVCxTQUFTLENBQUs7SUFBRyxDQUFDO0lBRXRDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBc0IsRUFBRSxJQUFRO1FBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFFLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5RixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3BCLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FDeEMsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixhQUFhLENBQUMsS0FBSyxDQUNwQixDQUErQixDQUFDO1lBQ2pDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQXNCLEVBQUUsSUFBUSxFQUFFLFFBQVk7UUFDL0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoRCxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQ2xCLFlBQVksQ0FBQyxnQkFBZ0IsRUFDN0IsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUM1RiwwQkFBMEIsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU07UUFDSixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsZ0JBQWdCO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/txe",
3
- "version": "0.46.5",
3
+ "version": "0.46.6",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -57,18 +57,18 @@
57
57
  ]
58
58
  },
59
59
  "dependencies": {
60
- "@aztec/archiver": "0.46.5",
61
- "@aztec/aztec.js": "0.46.5",
62
- "@aztec/circuit-types": "0.46.5",
63
- "@aztec/circuits.js": "0.46.5",
64
- "@aztec/foundation": "0.46.5",
65
- "@aztec/key-store": "0.46.5",
66
- "@aztec/kv-store": "0.46.5",
67
- "@aztec/noir-contracts.js": "0.46.5",
68
- "@aztec/pxe": "0.46.5",
69
- "@aztec/simulator": "0.46.5",
70
- "@aztec/types": "0.46.5",
71
- "@aztec/world-state": "0.46.5"
60
+ "@aztec/archiver": "0.46.6",
61
+ "@aztec/aztec.js": "0.46.6",
62
+ "@aztec/circuit-types": "0.46.6",
63
+ "@aztec/circuits.js": "0.46.6",
64
+ "@aztec/foundation": "0.46.6",
65
+ "@aztec/key-store": "0.46.6",
66
+ "@aztec/kv-store": "0.46.6",
67
+ "@aztec/noir-contracts.js": "0.46.6",
68
+ "@aztec/pxe": "0.46.6",
69
+ "@aztec/simulator": "0.46.6",
70
+ "@aztec/types": "0.46.6",
71
+ "@aztec/world-state": "0.46.6"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@jest/globals": "^29.5.0",
package/src/bin/index.ts CHANGED
@@ -1,81 +1,24 @@
1
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';
2
+ import { createDebugLogger } from '@aztec/aztec.js';
5
3
 
6
4
  import http from 'http';
7
5
 
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
- }
6
+ import { createTXERpcServer } from '../index.js';
71
7
 
72
8
  /**
73
9
  * Create and start a new TXE HTTP Server
74
10
  */
75
11
  function main() {
12
+ const { TXE_PORT = 8080 } = process.env;
13
+
14
+ const logger = createDebugLogger('aztec:txe_service');
76
15
  logger.info(`Setting up TXE...`);
77
16
 
78
- startTXEHttpServer(new TXEDispatcher(logger), TXE_PORT);
17
+ const txeServer = createTXERpcServer(logger);
18
+ const app = txeServer.getApp();
19
+ const httpServer = http.createServer(app.callback());
20
+ httpServer.timeout = 1e3 * 60 * 5; // 5 minutes
21
+ httpServer.listen(TXE_PORT);
79
22
 
80
23
  logger.info(`TXE listening on port ${TXE_PORT}`);
81
24
  }
package/src/index.ts ADDED
@@ -0,0 +1,55 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { JsonRpcServer } from '@aztec/foundation/json-rpc/server';
3
+ import { type Logger } from '@aztec/foundation/log';
4
+
5
+ import { TXEService } from './txe_service/txe_service.js';
6
+ import { type ForeignCallResult, toForeignCallResult } from './util/encoding.js';
7
+
8
+ const TXESessions = new Map<number, TXEService>();
9
+
10
+ type MethodNames<T> = {
11
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
12
+ }[keyof T];
13
+
14
+ type TXEForeignCallInput = {
15
+ session_id: number;
16
+ function: MethodNames<TXEService> | 'reset';
17
+ inputs: any[];
18
+ };
19
+
20
+ class TXEDispatcher {
21
+ constructor(private logger: Logger) {}
22
+
23
+ // eslint-disable-next-line camelcase
24
+ async resolve_foreign_call({
25
+ session_id: sessionId,
26
+ function: functionName,
27
+ inputs,
28
+ }: TXEForeignCallInput): Promise<ForeignCallResult> {
29
+ this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
30
+
31
+ if (!TXESessions.has(sessionId) && functionName != 'reset') {
32
+ this.logger.info(`Creating new session ${sessionId}`);
33
+ TXESessions.set(sessionId, await TXEService.init(this.logger));
34
+ }
35
+
36
+ if (functionName === 'reset') {
37
+ TXESessions.delete(sessionId) &&
38
+ this.logger.info(`Called reset on session ${sessionId}, yeeting it out of existence`);
39
+ return toForeignCallResult([]);
40
+ } else {
41
+ const txeService = TXESessions.get(sessionId);
42
+ const response = await (txeService as any)[functionName](...inputs);
43
+ return response;
44
+ }
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Creates an RPC server that forwards calls to the TXE.
50
+ * @param logger - Logger to output to
51
+ * @returns A TXE RPC server.
52
+ */
53
+ export function createTXERpcServer(logger: Logger) {
54
+ return new JsonRpcServer(new TXEDispatcher(logger), { Fr }, {}, ['init']);
55
+ }