@aztec/txe 0.0.1-commit.181e2d196 → 0.0.1-commit.189eedb3

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