@aztec/txe 0.0.0-test.1 → 0.0.1-commit.017a351

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 (182) 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.d.ts +1 -1
  15. package/dest/bin/index.js +3 -29
  16. package/dest/bin/index.js.map +7 -0
  17. package/dest/bin/oracle_test_server.d.ts +3 -0
  18. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  19. package/dest/bin/oracle_test_server.js +41 -0
  20. package/dest/chunk-BA54BEZH.js +265 -0
  21. package/dest/chunk-BA54BEZH.js.map +7 -0
  22. package/dest/chunk-BJVAAXNA.js +3 -0
  23. package/dest/chunk-BJVAAXNA.js.map +7 -0
  24. package/dest/chunk-ZKW35DT6.js +304 -0
  25. package/dest/chunk-ZKW35DT6.js.map +7 -0
  26. package/dest/constants.d.ts +7 -0
  27. package/dest/constants.d.ts.map +1 -0
  28. package/dest/constants.js +10 -0
  29. package/dest/dispatcher_pool.d.ts +67 -0
  30. package/dest/dispatcher_pool.d.ts.map +1 -0
  31. package/dest/dispatcher_pool.js +284 -0
  32. package/dest/index.d.ts +185 -7
  33. package/dest/index.d.ts.map +1 -1
  34. package/dest/index.js +76 -132
  35. package/dest/metafile.json +38691 -0
  36. package/dest/msgpackr_fr_extension.d.ts +2 -0
  37. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  38. package/dest/msgpackr_fr_extension.js +21 -0
  39. package/dest/oracle/interfaces.d.ts +83 -0
  40. package/dest/oracle/interfaces.d.ts.map +1 -0
  41. package/dest/oracle/interfaces.js +3 -0
  42. package/dest/oracle/test-resolver/fixtures.d.ts +43 -0
  43. package/dest/oracle/test-resolver/fixtures.d.ts.map +1 -0
  44. package/dest/oracle/test-resolver/fixtures.js +39 -0
  45. package/dest/oracle/test-resolver/index.d.ts +9 -0
  46. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  47. package/dest/oracle/test-resolver/index.js +33 -0
  48. package/dest/oracle/test-resolver/resolver.d.ts +34 -0
  49. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  50. package/dest/oracle/test-resolver/resolver.js +114 -0
  51. package/dest/oracle/txe_oracle_public_context.d.ts +58 -0
  52. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -0
  53. package/dest/oracle/txe_oracle_public_context.js +164 -0
  54. package/dest/oracle/txe_oracle_registry.d.ts +147 -0
  55. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  56. package/dest/oracle/txe_oracle_registry.js +562 -0
  57. package/dest/oracle/txe_oracle_top_level_context.d.ts +85 -0
  58. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -0
  59. package/dest/oracle/txe_oracle_top_level_context.js +634 -0
  60. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  61. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  62. package/dest/oracle/txe_oracle_version.js +14 -0
  63. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  64. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  65. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  66. package/dest/rpc_server.d.ts +14 -0
  67. package/dest/rpc_server.d.ts.map +1 -0
  68. package/dest/rpc_server.js +78 -0
  69. package/dest/rpc_translator.d.ts +120 -0
  70. package/dest/rpc_translator.d.ts.map +1 -0
  71. package/dest/rpc_translator.js +882 -0
  72. package/dest/server.bundle.js +3 -0
  73. package/dest/server.bundle.js.map +7 -0
  74. package/dest/state_machine/archiver.d.ts +32 -0
  75. package/dest/state_machine/archiver.d.ts.map +1 -0
  76. package/dest/state_machine/archiver.js +96 -0
  77. package/dest/state_machine/dummy_p2p_client.d.ts +65 -0
  78. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -0
  79. package/dest/state_machine/dummy_p2p_client.js +165 -0
  80. package/dest/state_machine/global_variable_builder.d.ts +16 -0
  81. package/dest/state_machine/global_variable_builder.d.ts.map +1 -0
  82. package/dest/state_machine/global_variable_builder.js +28 -0
  83. package/dest/state_machine/index.d.ts +20 -0
  84. package/dest/state_machine/index.d.ts.map +1 -0
  85. package/dest/state_machine/index.js +86 -0
  86. package/dest/state_machine/mock_epoch_cache.d.ts +42 -0
  87. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -0
  88. package/dest/state_machine/mock_epoch_cache.js +85 -0
  89. package/dest/state_machine/synchronizer.d.ts +33 -0
  90. package/dest/state_machine/synchronizer.d.ts.map +1 -0
  91. package/dest/state_machine/synchronizer.js +59 -0
  92. package/dest/txe_session.d.ts +140 -0
  93. package/dest/txe_session.d.ts.map +1 -0
  94. package/dest/txe_session.js +499 -0
  95. package/dest/utils/block_creation.d.ts +28 -0
  96. package/dest/utils/block_creation.d.ts.map +1 -0
  97. package/dest/utils/block_creation.js +58 -0
  98. package/dest/utils/encoding.d.ts +191 -0
  99. package/dest/utils/encoding.d.ts.map +1 -0
  100. package/dest/utils/encoding.js +136 -0
  101. package/dest/utils/expected_failure_error.d.ts +4 -0
  102. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  103. package/dest/utils/tx_effect_creation.d.ts +5 -0
  104. package/dest/utils/tx_effect_creation.d.ts.map +1 -0
  105. package/dest/utils/tx_effect_creation.js +13 -0
  106. package/dest/utils/txe_account_store.d.ts +10 -0
  107. package/dest/utils/txe_account_store.d.ts.map +1 -0
  108. package/dest/{util/txe_account_data_provider.js → utils/txe_account_store.js} +1 -1
  109. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  110. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  111. package/dest/utils/txe_artifact_resolver.js +161 -0
  112. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  113. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  114. package/dest/utils/txe_public_contract_data_source.js +48 -0
  115. package/dest/worker.bundle.js +3 -0
  116. package/dest/worker.bundle.js.map +7 -0
  117. package/dest/worker.d.ts +2 -0
  118. package/dest/worker.d.ts.map +1 -0
  119. package/dest/worker.js +92 -0
  120. package/package.json +52 -29
  121. package/src/bin/check_txe_oracle_version.ts +70 -0
  122. package/src/bin/index.ts +14 -4
  123. package/src/bin/oracle_test_server.ts +51 -0
  124. package/src/constants.ts +13 -0
  125. package/src/dispatcher_pool.ts +316 -0
  126. package/src/index.ts +113 -175
  127. package/src/msgpackr_fr_extension.ts +23 -0
  128. package/src/oracle/interfaces.ts +109 -0
  129. package/src/oracle/test-resolver/fixtures.ts +84 -0
  130. package/src/oracle/test-resolver/index.ts +45 -0
  131. package/src/oracle/test-resolver/resolver.ts +165 -0
  132. package/src/oracle/txe_oracle_public_context.ts +218 -0
  133. package/src/oracle/txe_oracle_registry.ts +401 -0
  134. package/src/oracle/txe_oracle_top_level_context.ts +898 -0
  135. package/src/oracle/txe_oracle_version.ts +17 -0
  136. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  137. package/src/rpc_server.ts +87 -0
  138. package/src/rpc_translator.ts +1103 -0
  139. package/src/state_machine/archiver.ts +119 -0
  140. package/src/state_machine/dummy_p2p_client.ts +247 -0
  141. package/src/state_machine/global_variable_builder.ts +53 -0
  142. package/src/state_machine/index.ts +135 -0
  143. package/src/state_machine/mock_epoch_cache.ts +107 -0
  144. package/src/state_machine/synchronizer.ts +88 -0
  145. package/src/txe_session.ts +799 -0
  146. package/src/utils/block_creation.ts +97 -0
  147. package/src/utils/encoding.ts +172 -0
  148. package/src/utils/tx_effect_creation.ts +30 -0
  149. package/src/{util/txe_account_data_provider.ts → utils/txe_account_store.ts} +1 -1
  150. package/src/utils/txe_artifact_resolver.ts +217 -0
  151. package/src/utils/txe_public_contract_data_source.ts +58 -0
  152. package/src/worker.ts +98 -0
  153. package/dest/node/txe_node.d.ts +0 -358
  154. package/dest/node/txe_node.d.ts.map +0 -1
  155. package/dest/node/txe_node.js +0 -504
  156. package/dest/oracle/txe_oracle.d.ts +0 -152
  157. package/dest/oracle/txe_oracle.d.ts.map +0 -1
  158. package/dest/oracle/txe_oracle.js +0 -833
  159. package/dest/txe_service/txe_service.d.ts +0 -212
  160. package/dest/txe_service/txe_service.d.ts.map +0 -1
  161. package/dest/txe_service/txe_service.js +0 -572
  162. package/dest/util/encoding.d.ts +0 -103
  163. package/dest/util/encoding.d.ts.map +0 -1
  164. package/dest/util/encoding.js +0 -76
  165. package/dest/util/expected_failure_error.d.ts +0 -4
  166. package/dest/util/expected_failure_error.d.ts.map +0 -1
  167. package/dest/util/txe_account_data_provider.d.ts +0 -10
  168. package/dest/util/txe_account_data_provider.d.ts.map +0 -1
  169. package/dest/util/txe_public_contract_data_source.d.ts +0 -20
  170. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  171. package/dest/util/txe_public_contract_data_source.js +0 -88
  172. package/dest/util/txe_world_state_db.d.ts +0 -14
  173. package/dest/util/txe_world_state_db.d.ts.map +0 -1
  174. package/dest/util/txe_world_state_db.js +0 -27
  175. package/src/node/txe_node.ts +0 -725
  176. package/src/oracle/txe_oracle.ts +0 -1241
  177. package/src/txe_service/txe_service.ts +0 -749
  178. package/src/util/encoding.ts +0 -92
  179. package/src/util/txe_public_contract_data_source.ts +0 -101
  180. package/src/util/txe_world_state_db.ts +0 -38
  181. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  182. /package/src/{util → utils}/expected_failure_error.ts +0 -0
package/dest/index.js CHANGED
@@ -1,156 +1,100 @@
1
- import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
2
- import { AztecAddress, Fr, PublicKeys, deriveKeys, getContractInstanceFromDeployParams, loadContractArtifact } from '@aztec/aztec.js';
3
- import { createSafeJsonRpcServer } from '@aztec/foundation/json-rpc/server';
4
- import { protocolContractNames } from '@aztec/protocol-contracts';
5
- import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
6
- import { readFile, readdir } from 'fs/promises';
1
+ import { Fr } from '@aztec/aztec.js/fields';
2
+ import { cloneEphemeralStoreFrom } from '@aztec/kv-store/lmdb-v2';
3
+ import { ContractStore } from '@aztec/pxe/client/lazy';
4
+ import { zodFor } from '@aztec/stdlib/schemas';
7
5
  import { join } from 'path';
8
6
  import { z } from 'zod';
9
- import { TXEService } from './txe_service/txe_service.js';
10
- import { ForeignCallArgsSchema, ForeignCallResultSchema, fromArray, fromSingle, toForeignCallResult, toSingle } from './util/encoding.js';
11
- const TXESessions = new Map();
12
- const TXEArtifactsCache = new Map();
13
- const TXEForeignCallInputSchema = z.object({
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';
10
+ import { TXESession } from './txe_session.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 = [];
16
+ const sessions = new Map();
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).
14
21
  // eslint-disable-next-line camelcase
15
- session_id: z.number().int().nonnegative(),
22
+ session_id: z.number().nonnegative(),
16
23
  function: z.string(),
17
24
  // eslint-disable-next-line camelcase
18
25
  root_path: z.string(),
19
26
  // eslint-disable-next-line camelcase
20
27
  package_name: z.string(),
21
28
  inputs: ForeignCallArgsSchema
22
- });
23
- class TXEDispatcher {
29
+ }));
30
+ export class TXEDispatcher {
24
31
  logger;
25
- protocolContracts;
26
- constructor(logger){
32
+ contractStore;
33
+ artifactResolver;
34
+ contractStoreSourceDir;
35
+ schnorrClassId;
36
+ constructor(logger, opts){
27
37
  this.logger = logger;
38
+ this.contractStoreSourceDir = opts.contractStoreSourceDir;
39
+ this.schnorrClassId = Fr.fromString(opts.schnorrClassId);
28
40
  }
29
- async #processDeployInputs({ inputs, root_path: rootPath, package_name: packageName }) {
30
- const [pathStr, contractName, initializer] = inputs.slice(0, 3).map((input)=>fromArray(input).map((char)=>String.fromCharCode(char.toNumber())).join(''));
31
- const decodedArgs = fromArray(inputs[4]);
32
- const secret = fromSingle(inputs[5]);
33
- const publicKeys = secret.equals(Fr.ZERO) ? PublicKeys.default() : (await deriveKeys(secret)).publicKeys;
34
- const publicKeysHash = await publicKeys.hash();
35
- const cacheKey = `${pathStr}-${contractName}-${initializer}-${decodedArgs.map((arg)=>arg.toString()).join('-')}-${publicKeysHash.toString()}`;
36
- let artifact;
37
- let instance;
38
- if (TXEArtifactsCache.has(cacheKey)) {
39
- this.logger.debug(`Using cached artifact for ${cacheKey}`);
40
- ({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
41
- } else {
42
- let artifactPath = '';
43
- // We're deploying the contract under test
44
- // env.deploy_self("contractName")
45
- if (!pathStr) {
46
- artifactPath = join(rootPath, './target', `${packageName}-${contractName}.json`);
47
- } else {
48
- // We're deploying a contract that belongs in a workspace
49
- // env.deploy("../path/to/workspace/root@packageName", "contractName")
50
- if (pathStr.includes('@')) {
51
- const [workspace, pkg] = pathStr.split('@');
52
- const targetPath = join(rootPath, workspace, './target');
53
- this.logger.debug(`Looking for compiled artifact in workspace ${targetPath}`);
54
- artifactPath = join(targetPath, `${pkg}-${contractName}.json`);
55
- } else {
56
- // We're deploying a standalone contract
57
- // env.deploy("../path/to/contract/root", "contractName")
58
- const targetPath = join(rootPath, pathStr, './target');
59
- this.logger.debug(`Looking for compiled artifact in ${targetPath}`);
60
- [artifactPath] = (await readdir(targetPath)).filter((file)=>file.endsWith(`-${contractName}.json`));
61
- }
62
- }
63
- this.logger.debug(`Loading compiled artifact ${artifactPath}`);
64
- artifact = loadContractArtifact(JSON.parse(await readFile(artifactPath, 'utf-8')));
65
- this.logger.debug(`Deploy ${artifact.name} with initializer ${initializer}(${decodedArgs}) and public keys hash ${publicKeysHash.toString()}`);
66
- instance = await getContractInstanceFromDeployParams(artifact, {
67
- constructorArgs: decodedArgs,
68
- skipArgsDecoding: true,
69
- salt: Fr.ONE,
70
- publicKeys,
71
- constructorArtifact: initializer ? initializer : undefined,
72
- deployer: AztecAddress.ZERO
73
- });
74
- TXEArtifactsCache.set(cacheKey, {
75
- artifact,
76
- instance
77
- });
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;
78
48
  }
79
- inputs.splice(0, 2, artifact, instance, toSingle(secret));
80
- }
81
- async #processAddAccountInputs({ inputs }) {
82
- const secret = fromSingle(inputs[0]);
83
- const cacheKey = `SchnorrAccountContract-${secret}`;
84
- let artifact;
85
- let instance;
86
- if (TXEArtifactsCache.has(cacheKey)) {
87
- this.logger.debug(`Using cached artifact for ${cacheKey}`);
88
- ({ artifact, instance } = TXEArtifactsCache.get(cacheKey));
89
- } else {
90
- const keys = await deriveKeys(secret);
91
- const args = [
92
- keys.publicKeys.masterIncomingViewingPublicKey.x,
93
- keys.publicKeys.masterIncomingViewingPublicKey.y
94
- ];
95
- artifact = SchnorrAccountContractArtifact;
96
- instance = await getContractInstanceFromDeployParams(artifact, {
97
- constructorArgs: args,
98
- skipArgsDecoding: true,
99
- salt: Fr.ONE,
100
- publicKeys: keys.publicKeys,
101
- constructorArtifact: 'constructor',
102
- deployer: AztecAddress.ZERO
103
- });
104
- TXEArtifactsCache.set(cacheKey, {
105
- artifact,
106
- instance
107
- });
108
- }
109
- 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
+ });
110
56
  }
111
57
  // eslint-disable-next-line camelcase
112
58
  async resolve_foreign_call(callData) {
113
- const { session_id: sessionId, function: functionName, inputs } = callData;
59
+ const { session_id: sessionId, function: functionName, inputs, root_path: rootPath, package_name: packageName } = callData;
114
60
  this.logger.debug(`Calling ${functionName} on session ${sessionId}`);
115
- if (!TXESessions.has(sessionId) && functionName != 'reset') {
61
+ if (!sessions.has(sessionId)) {
116
62
  this.logger.debug(`Creating new session ${sessionId}`);
117
- if (!this.protocolContracts) {
118
- this.protocolContracts = await Promise.all(protocolContractNames.map((name)=>new BundledProtocolContractsProvider().getProtocolContractArtifact(name)));
119
- }
120
- TXESessions.set(sessionId, await TXEService.init(this.logger, this.protocolContracts));
63
+ await this.warmUp();
64
+ sessions.set(sessionId, await TXESession.init(this.contractStore, this.artifactResolver, rootPath, packageName));
121
65
  }
122
- switch(functionName){
123
- case 'reset':
124
- {
125
- TXESessions.delete(sessionId) && this.logger.debug(`Called reset on session ${sessionId}, yeeting it out of existence`);
126
- return toForeignCallResult([]);
127
- }
128
- case 'deploy':
129
- {
130
- await this.#processDeployInputs(callData);
131
- break;
132
- }
133
- case 'addAccount':
134
- {
135
- await this.#processAddAccountInputs(callData);
136
- break;
137
- }
66
+ return await sessions.get(sessionId).processFunction(functionName, inputs);
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;
138
77
  }
139
- const txeService = TXESessions.get(sessionId);
140
- const response = await txeService[functionName](...inputs);
141
- return response;
78
+ sessions.delete(sessionId);
79
+ await session.dispose();
142
80
  }
143
81
  }
144
- 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 = {
145
86
  // eslint-disable-next-line camelcase
146
- 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
+ })
147
100
  };
148
- /**
149
- * Creates an RPC server that forwards calls to the TXE.
150
- * @param logger - Logger to output to
151
- * @returns A TXE RPC server.
152
- */ export function createTXERpcServer(logger) {
153
- return createSafeJsonRpcServer(new TXEDispatcher(logger), TXEDispatcherApiSchema, {
154
- http200OnError: true
155
- });
156
- }