@aztec/txe 0.0.1-commit.c31f2472 → 0.0.1-commit.c52d6e7

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.
Files changed (174) hide show
  1. package/dest/AuthRegistry-QVGDDH5X.js +3 -0
  2. package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
  3. package/dest/ContractClassRegistry-PVNCKGG7.js +3 -0
  4. package/dest/ContractClassRegistry-PVNCKGG7.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-WLOZKTR6.js +3 -0
  6. package/dest/ContractInstanceRegistry-WLOZKTR6.js.map +7 -0
  7. package/dest/FeeJuice-MAQJU53K.js +3 -0
  8. package/dest/FeeJuice-MAQJU53K.js.map +7 -0
  9. package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
  10. package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
  12. package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
  13. package/dest/SchnorrAccount-ADD65DYA.js +3 -0
  14. package/dest/SchnorrAccount-ADD65DYA.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js.map +7 -0
  17. package/dest/bin/check_txe_oracle_version.d.ts +2 -0
  18. package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
  19. package/dest/bin/check_txe_oracle_version.js +22 -0
  20. package/dest/bin/index.js +3 -30
  21. package/dest/bin/index.js.map +7 -0
  22. package/dest/bin/oracle_test_server.d.ts +3 -0
  23. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  24. package/dest/bin/oracle_test_server.js +41 -0
  25. package/dest/chunk-32UHX7YY.js +3 -0
  26. package/dest/chunk-32UHX7YY.js.map +7 -0
  27. package/dest/chunk-RVEPNDEP.js +304 -0
  28. package/dest/chunk-RVEPNDEP.js.map +7 -0
  29. package/dest/chunk-XWIMXLKD.js +258 -0
  30. package/dest/chunk-XWIMXLKD.js.map +7 -0
  31. package/dest/constants.d.ts +5 -1
  32. package/dest/constants.d.ts.map +1 -1
  33. package/dest/constants.js +9 -1
  34. package/dest/dispatcher_pool.d.ts +67 -0
  35. package/dest/dispatcher_pool.d.ts.map +1 -0
  36. package/dest/dispatcher_pool.js +286 -0
  37. package/dest/index.d.ts +51 -7
  38. package/dest/index.d.ts.map +1 -1
  39. package/dest/index.js +73 -157
  40. package/dest/metafile.json +38833 -0
  41. package/dest/msgpackr_fr_extension.d.ts +2 -0
  42. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  43. package/dest/msgpackr_fr_extension.js +21 -0
  44. package/dest/oracle/interfaces.d.ts +69 -30
  45. package/dest/oracle/interfaces.d.ts.map +1 -1
  46. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  47. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  48. package/dest/oracle/tagging_secret_strategy.js +12 -0
  49. package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +200 -0
  52. package/dest/oracle/test-resolver/index.d.ts +9 -0
  53. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  54. package/dest/oracle/test-resolver/index.js +32 -0
  55. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  56. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  57. package/dest/oracle/test-resolver/resolver.js +181 -0
  58. package/dest/oracle/txe_oracle_public_context.d.ts +38 -14
  59. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  60. package/dest/oracle/txe_oracle_public_context.js +61 -13
  61. package/dest/oracle/txe_oracle_registry.d.ts +172 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +767 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +69 -29
  65. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  66. package/dest/oracle/txe_oracle_top_level_context.js +607 -279
  67. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  68. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_version.js +14 -0
  70. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  71. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  72. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  73. package/dest/rpc_server.d.ts +14 -0
  74. package/dest/rpc_server.d.ts.map +1 -0
  75. package/dest/rpc_server.js +78 -0
  76. package/dest/rpc_translator.d.ts +116 -228
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +909 -612
  79. package/dest/server.bundle.js +3 -0
  80. package/dest/server.bundle.js.map +7 -0
  81. package/dest/state_machine/archiver.d.ts +6 -5
  82. package/dest/state_machine/archiver.d.ts.map +1 -1
  83. package/dest/state_machine/archiver.js +30 -20
  84. package/dest/state_machine/dummy_p2p_client.d.ts +29 -16
  85. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  86. package/dest/state_machine/dummy_p2p_client.js +53 -20
  87. package/dest/state_machine/global_variable_builder.d.ts +10 -6
  88. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  89. package/dest/state_machine/global_variable_builder.js +8 -5
  90. package/dest/state_machine/index.d.ts +13 -7
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +60 -15
  93. package/dest/state_machine/mock_epoch_cache.d.ts +19 -3
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +36 -2
  96. package/dest/state_machine/synchronizer.d.ts +14 -6
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +22 -9
  99. package/dest/txe_session.d.ts +92 -16
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +380 -57
  102. package/dest/utils/block_creation.d.ts +2 -2
  103. package/dest/utils/block_creation.d.ts.map +1 -1
  104. package/dest/utils/block_creation.js +5 -3
  105. package/dest/utils/encoding.d.ts +194 -0
  106. package/dest/utils/encoding.d.ts.map +1 -0
  107. package/dest/{util → utils}/encoding.js +7 -2
  108. package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
  109. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  110. package/dest/utils/tx_effect_creation.d.ts +1 -1
  111. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  112. package/dest/utils/tx_effect_creation.js +0 -1
  113. package/dest/{util → utils}/txe_account_store.d.ts +1 -1
  114. package/dest/utils/txe_account_store.d.ts.map +1 -0
  115. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  116. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  117. package/dest/utils/txe_artifact_resolver.js +161 -0
  118. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  119. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  120. package/dest/utils/txe_public_contract_data_source.js +51 -0
  121. package/dest/worker.bundle.js +3 -0
  122. package/dest/worker.bundle.js.map +7 -0
  123. package/dest/worker.d.ts +2 -0
  124. package/dest/worker.d.ts.map +1 -0
  125. package/dest/worker.js +92 -0
  126. package/package.json +38 -21
  127. package/src/bin/check_txe_oracle_version.ts +31 -0
  128. package/src/bin/index.ts +11 -2
  129. package/src/bin/oracle_test_server.ts +51 -0
  130. package/src/constants.ts +11 -1
  131. package/src/dispatcher_pool.ts +317 -0
  132. package/src/index.ts +99 -190
  133. package/src/msgpackr_fr_extension.ts +23 -0
  134. package/src/oracle/interfaces.ts +75 -35
  135. package/src/oracle/tagging_secret_strategy.ts +25 -0
  136. package/src/oracle/test-resolver/default_fixtures.ts +271 -0
  137. package/src/oracle/test-resolver/index.ts +44 -0
  138. package/src/oracle/test-resolver/resolver.ts +245 -0
  139. package/src/oracle/txe_oracle_public_context.ts +74 -12
  140. package/src/oracle/txe_oracle_registry.ts +556 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +464 -178
  142. package/src/oracle/txe_oracle_version.ts +17 -0
  143. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  144. package/src/rpc_server.ts +87 -0
  145. package/src/rpc_translator.ts +1126 -987
  146. package/src/state_machine/archiver.ts +43 -20
  147. package/src/state_machine/dummy_p2p_client.ts +83 -32
  148. package/src/state_machine/global_variable_builder.ts +12 -11
  149. package/src/state_machine/index.ts +84 -33
  150. package/src/state_machine/mock_epoch_cache.ts +47 -3
  151. package/src/state_machine/synchronizer.ts +31 -10
  152. package/src/txe_session.ts +625 -128
  153. package/src/utils/block_creation.ts +5 -2
  154. package/src/{util → utils}/encoding.ts +8 -2
  155. package/src/utils/tx_effect_creation.ts +0 -2
  156. package/src/utils/txe_artifact_resolver.ts +217 -0
  157. package/src/utils/txe_public_contract_data_source.ts +60 -0
  158. package/src/worker.ts +98 -0
  159. package/dest/util/encoding.d.ts +0 -720
  160. package/dest/util/encoding.d.ts.map +0 -1
  161. package/dest/util/expected_failure_error.d.ts.map +0 -1
  162. package/dest/util/txe_account_store.d.ts.map +0 -1
  163. package/dest/util/txe_contract_store.d.ts +0 -12
  164. package/dest/util/txe_contract_store.d.ts.map +0 -1
  165. package/dest/util/txe_contract_store.js +0 -22
  166. package/dest/util/txe_public_contract_data_source.d.ts +0 -21
  167. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  168. package/dest/util/txe_public_contract_data_source.js +0 -67
  169. package/src/util/txe_contract_store.ts +0 -36
  170. package/src/util/txe_public_contract_data_source.ts +0 -86
  171. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  172. /package/dest/{util → utils}/txe_account_store.js +0 -0
  173. /package/src/{util → utils}/expected_failure_error.ts +0 -0
  174. /package/src/{util → utils}/txe_account_store.ts +0 -0
package/dest/index.js CHANGED
@@ -1,29 +1,27 @@
1
- import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
2
- import { loadContractArtifact } from '@aztec/aztec.js/abi';
3
- import { AztecAddress } from '@aztec/aztec.js/addresses';
4
- import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
5
1
  import { Fr } from '@aztec/aztec.js/fields';
6
- import { PublicKeys, deriveKeys } from '@aztec/aztec.js/keys';
7
- import { createSafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
8
- import { protocolContractNames } from '@aztec/protocol-contracts';
9
- import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
10
- import { computeArtifactHash } from '@aztec/stdlib/contract';
2
+ import { cloneEphemeralStoreFrom } from '@aztec/kv-store/lmdb-v2';
3
+ import { ContractStore } from '@aztec/pxe/client/lazy';
11
4
  import { zodFor } from '@aztec/stdlib/schemas';
12
- import { createHash } from 'crypto';
13
- import { createReadStream } from 'fs';
14
- import { readFile, readdir } from 'fs/promises';
15
- import { join, parse } from 'path';
5
+ import { join } from 'path';
16
6
  import { z } from 'zod';
7
+ // Side-effect import: registers the msgpackr Fr extension for the bundled `Fr` class. Must
8
+ // be loaded before any `sendMessage` call. See msgpackr_fr_extension.ts for the why.
9
+ import './msgpackr_fr_extension.js';
17
10
  import { TXESession } from './txe_session.js';
18
- import { ForeignCallArgsSchema, ForeignCallResultSchema, fromArray, fromSingle, toSingle } from './util/encoding.js';
11
+ import { ForeignCallArgsSchema, ForeignCallResultSchema } from './utils/encoding.js';
12
+ import { TXEArtifactResolver } from './utils/txe_artifact_resolver.js';
13
+ export const TXE_REQUIRED_PROTOCOL_CONTRACTS = [
14
+ 'ContractClassRegistry',
15
+ 'ContractInstanceRegistry',
16
+ 'FeeJuice'
17
+ ];
19
18
  const sessions = new Map();
20
- /*
21
- * TXE typically has to load the same contract artifacts over and over again for multiple tests,
22
- * so we cache them here to avoid both loading them from disk repeatedly and computing their artifact hashes
23
- */ const TXEArtifactsCache = new Map();
24
- const TXEForeignCallInputSchema = zodFor()(z.object({
19
+ export const TXEForeignCallInputSchema = zodFor()(z.object({
20
+ // Nargo generates session_id as a u64, which may exceed Number.MAX_SAFE_INTEGER.
21
+ // Zod 4's `.int()` enforces the safe-integer bound, so we drop it here and only require
22
+ // the value to be a non-negative number (it is used solely as a Map key).
25
23
  // eslint-disable-next-line camelcase
26
- session_id: z.number().int().nonnegative(),
24
+ session_id: z.number().nonnegative(),
27
25
  function: z.string(),
28
26
  // eslint-disable-next-line camelcase
29
27
  root_path: z.string(),
@@ -31,156 +29,74 @@ const TXEForeignCallInputSchema = zodFor()(z.object({
31
29
  package_name: z.string(),
32
30
  inputs: ForeignCallArgsSchema
33
31
  }));
34
- class TXEDispatcher {
32
+ export class TXEDispatcher {
35
33
  logger;
36
- protocolContracts;
37
- constructor(logger){
34
+ contractStore;
35
+ artifactResolver;
36
+ contractStoreSourceDir;
37
+ schnorrClassId;
38
+ constructor(logger, opts){
38
39
  this.logger = logger;
40
+ this.contractStoreSourceDir = opts.contractStoreSourceDir;
41
+ this.schnorrClassId = Fr.fromString(opts.schnorrClassId);
39
42
  }
40
- fastHashFile(path) {
41
- return new Promise((resolve)=>{
42
- const fd = createReadStream(path);
43
- const hash = createHash('sha1');
44
- hash.setEncoding('hex');
45
- fd.on('end', function() {
46
- hash.end();
47
- resolve(hash.read());
48
- });
49
- fd.pipe(hash);
50
- });
51
- }
52
- async #processDeployInputs({ inputs, root_path: rootPath, package_name: packageName }) {
53
- const [contractPath, initializer] = inputs.slice(0, 2).map((input)=>fromArray(input).map((char)=>String.fromCharCode(char.toNumber())).join(''));
54
- const decodedArgs = fromArray(inputs[3]);
55
- const secret = fromSingle(inputs[4]);
56
- const publicKeys = secret.equals(Fr.ZERO) ? PublicKeys.default() : (await deriveKeys(secret)).publicKeys;
57
- const publicKeysHash = await publicKeys.hash();
58
- let artifactPath = '';
59
- const { dir: contractDirectory, base: contractFilename } = parse(contractPath);
60
- if (contractDirectory) {
61
- if (contractDirectory.includes('@')) {
62
- // We're deploying a contract that belongs in a workspace
63
- // env.deploy("../path/to/workspace/root@packageName/contractName")
64
- const [workspace, pkg] = contractDirectory.split('@');
65
- const targetPath = join(rootPath, workspace, '/target');
66
- this.logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
67
- artifactPath = join(targetPath, `${pkg}-${contractFilename}.json`);
68
- } else {
69
- // We're deploying a standalone external contract
70
- // env.deploy("../path/to/contract/root/contractName")
71
- const targetPath = join(rootPath, contractDirectory, '/target');
72
- this.logger.debug(`Looking for compiled artifact in ${targetPath}`);
73
- [artifactPath] = (await readdir(targetPath)).filter((file)=>file.endsWith(`-${contractFilename}.json`));
74
- }
75
- } else {
76
- // We're deploying a local contract
77
- // env.deploy("contractName")
78
- artifactPath = join(rootPath, './target', `${packageName}-${contractFilename}.json`);
79
- }
80
- const fileHash = await this.fastHashFile(artifactPath);
81
- const cacheKey = `${contractDirectory ?? ''}-${contractFilename}-${initializer}-${decodedArgs.map((arg)=>arg.toString()).join('-')}-${publicKeysHash}-${fileHash}`;
82
- let instance;
83
- let artifact;
84
- if (TXEArtifactsCache.has(cacheKey)) {
85
- this.logger.debug(`Using cached artifact for ${cacheKey}`);
86
- ({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
87
- } else {
88
- this.logger.debug(`Loading compiled artifact ${artifactPath}`);
89
- const artifactJSON = JSON.parse(await readFile(artifactPath, 'utf-8'));
90
- const artifactWithoutHash = loadContractArtifact(artifactJSON);
91
- artifact = {
92
- ...artifactWithoutHash,
93
- // Artifact hash is *very* expensive to compute, so we do it here once
94
- // and the TXE contract data provider can cache it
95
- artifactHash: await computeArtifactHash(artifactWithoutHash)
96
- };
97
- this.logger.debug(`Deploy ${artifact.name} with initializer ${initializer}(${decodedArgs}) and public keys hash ${publicKeysHash.toString()}`);
98
- instance = await getContractInstanceFromInstantiationParams(artifact, {
99
- constructorArgs: decodedArgs,
100
- skipArgsDecoding: true,
101
- salt: Fr.ONE,
102
- publicKeys,
103
- constructorArtifact: initializer ? initializer : undefined,
104
- deployer: AztecAddress.ZERO
105
- });
106
- TXEArtifactsCache.set(cacheKey, {
107
- artifact,
108
- instance
109
- });
43
+ /**
44
+ * Clones the pre-populated LMDB at `contractStoreSourceDir` into a fresh per-instance tmpdir
45
+ * on first use, so this dispatcher has a writable store already containing the required
46
+ * protocol contracts + SchnorrAccount. Idempotent — subsequent calls are no-ops.
47
+ */ async warmUp() {
48
+ if (this.contractStore) {
49
+ return;
110
50
  }
111
- inputs.splice(0, 1, artifact, instance, toSingle(secret));
112
- }
113
- async #processAddAccountInputs({ inputs }) {
114
- const secret = fromSingle(inputs[0]);
115
- const cacheKey = `SchnorrAccountContract-${secret}`;
116
- let artifact;
117
- let instance;
118
- if (TXEArtifactsCache.has(cacheKey)) {
119
- this.logger.debug(`Using cached artifact for ${cacheKey}`);
120
- ({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
121
- } else {
122
- const keys = await deriveKeys(secret);
123
- const args = [
124
- keys.publicKeys.masterIncomingViewingPublicKey.x,
125
- keys.publicKeys.masterIncomingViewingPublicKey.y
126
- ];
127
- artifact = {
128
- ...SchnorrAccountContractArtifact,
129
- // Artifact hash is *very* expensive to compute, so we do it here once
130
- // and the TXE contract data provider can cache it
131
- artifactHash: await computeArtifactHash(SchnorrAccountContractArtifact)
132
- };
133
- instance = await getContractInstanceFromInstantiationParams(artifact, {
134
- constructorArgs: args,
135
- skipArgsDecoding: true,
136
- salt: Fr.ONE,
137
- publicKeys: keys.publicKeys,
138
- constructorArtifact: 'constructor',
139
- deployer: AztecAddress.ZERO
140
- });
141
- TXEArtifactsCache.set(cacheKey, {
142
- artifact,
143
- instance
144
- });
145
- }
146
- inputs.splice(0, 0, artifact, instance);
51
+ const t0 = Date.now();
52
+ const kvStore = await cloneEphemeralStoreFrom(join(this.contractStoreSourceDir, 'data.mdb'), 'txe-contracts', undefined, 2);
53
+ this.contractStore = new ContractStore(kvStore);
54
+ this.artifactResolver = new TXEArtifactResolver(this.contractStore, this.schnorrClassId);
55
+ this.logger.debug('Cloned shared protocol-contracts store', {
56
+ totalMs: Date.now() - t0
57
+ });
147
58
  }
148
59
  // eslint-disable-next-line camelcase
149
60
  async resolve_foreign_call(callData) {
150
- const { session_id: sessionId, function: functionName, inputs } = callData;
61
+ const { session_id: sessionId, function: functionName, inputs, root_path: rootPath, package_name: packageName } = callData;
151
62
  this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
152
63
  if (!sessions.has(sessionId)) {
153
64
  this.logger.debug(`Creating new session ${sessionId}`);
154
- if (!this.protocolContracts) {
155
- this.protocolContracts = await Promise.all(protocolContractNames.map((name)=>new BundledProtocolContractsProvider().getProtocolContractArtifact(name)));
156
- }
157
- sessions.set(sessionId, await TXESession.init(this.protocolContracts));
158
- }
159
- switch(functionName){
160
- case 'txeDeploy':
161
- {
162
- await this.#processDeployInputs(callData);
163
- break;
164
- }
165
- case 'txeAddAccount':
166
- {
167
- await this.#processAddAccountInputs(callData);
168
- break;
169
- }
65
+ await this.warmUp();
66
+ sessions.set(sessionId, await TXESession.init(this.contractStore, this.artifactResolver, rootPath, packageName));
170
67
  }
171
68
  return await sessions.get(sessionId).processFunction(functionName, inputs);
172
69
  }
70
+ /**
71
+ * Releases a session and its resources (per-session LMDB + `NativeWorldStateService`).
72
+ * Called by the dispatcher pool when nargo closes its TCP connection for a test (see
73
+ * `rpc_server.ts`'s socket tracker). No-op if the session was never created — that happens
74
+ * when nargo opens a connection but errors before sending a request.
75
+ */ async disposeSession(sessionId) {
76
+ const session = sessions.get(sessionId);
77
+ if (!session) {
78
+ return;
79
+ }
80
+ sessions.delete(sessionId);
81
+ await session.dispose();
82
+ }
173
83
  }
174
- const TXEDispatcherApiSchema = {
84
+ /** Diagnostic-only: number of sessions currently held by this worker. */ export function activeSessionCount() {
85
+ return sessions.size;
86
+ }
87
+ export const TXEDispatcherApiSchema = {
175
88
  // eslint-disable-next-line camelcase
176
- resolve_foreign_call: z.function().args(TXEForeignCallInputSchema).returns(ForeignCallResultSchema)
89
+ resolve_foreign_call: z.function({
90
+ input: z.tuple([
91
+ TXEForeignCallInputSchema
92
+ ]),
93
+ output: ForeignCallResultSchema
94
+ }),
95
+ // disposeSession is invoked over IPC from the worker, not via RPC; required by ApiSchemaFor.
96
+ disposeSession: z.function({
97
+ input: z.tuple([
98
+ z.number().nonnegative()
99
+ ]),
100
+ output: z.void()
101
+ })
177
102
  };
178
- /**
179
- * Creates an RPC server that forwards calls to the TXE.
180
- * @param logger - Logger to output to
181
- * @returns A TXE RPC server.
182
- */ export function createTXERpcServer(logger) {
183
- return createSafeJsonRpcServer(new TXEDispatcher(logger), TXEDispatcherApiSchema, {
184
- http200OnError: true
185
- });
186
- }