@aztec/end-to-end 0.0.1-commit.ff7989d6c → 0.0.1-commit.fff30aa

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 (116) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.js +18 -11
  5. package/dest/bench/utils.d.ts +1 -1
  6. package/dest/bench/utils.d.ts.map +1 -1
  7. package/dest/bench/utils.js +6 -3
  8. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +3 -2
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  10. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +15 -15
  11. package/dest/e2e_epochs/epochs_test.d.ts +3 -1
  12. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  13. package/dest/e2e_epochs/epochs_test.js +5 -2
  14. package/dest/e2e_fees/fees_test.d.ts +1 -1
  15. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  16. package/dest/e2e_fees/fees_test.js +14 -7
  17. package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
  18. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  19. package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
  20. package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
  21. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  22. package/dest/e2e_p2p/inactivity_slash_test.js +1 -0
  23. package/dest/e2e_p2p/p2p_network.d.ts +3 -2
  24. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  25. package/dest/e2e_p2p/p2p_network.js +18 -15
  26. package/dest/e2e_p2p/shared.d.ts +33 -1
  27. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  28. package/dest/e2e_p2p/shared.js +56 -2
  29. package/dest/e2e_token_contract/token_contract_test.d.ts +1 -1
  30. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  31. package/dest/e2e_token_contract/token_contract_test.js +11 -11
  32. package/dest/fixtures/authwit_proxy.d.ts +3 -3
  33. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  34. package/dest/fixtures/authwit_proxy.js +4 -0
  35. package/dest/fixtures/e2e_prover_test.d.ts +1 -1
  36. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  37. package/dest/fixtures/e2e_prover_test.js +6 -6
  38. package/dest/fixtures/setup.d.ts +10 -7
  39. package/dest/fixtures/setup.d.ts.map +1 -1
  40. package/dest/fixtures/setup.js +16 -12
  41. package/dest/fixtures/token_utils.d.ts +1 -1
  42. package/dest/fixtures/token_utils.d.ts.map +1 -1
  43. package/dest/fixtures/token_utils.js +2 -2
  44. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  45. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  46. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  47. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  48. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  49. package/dest/forward-compatibility/wallet_service.js +109 -0
  50. package/dest/install_legacy_contracts.d.cts +10 -0
  51. package/dest/install_legacy_contracts.d.cts.map +1 -0
  52. package/dest/legacy-jest-resolver.d.cts +3 -0
  53. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  54. package/dest/shared/cross_chain_test_harness.d.ts +1 -1
  55. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  56. package/dest/shared/cross_chain_test_harness.js +13 -13
  57. package/dest/shared/gas_portal_test_harness.js +2 -2
  58. package/dest/shared/submit-transactions.js +1 -1
  59. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  60. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  61. package/dest/shared/uniswap_l1_l2.js +14 -17
  62. package/dest/simulators/lending_simulator.d.ts +1 -1
  63. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  64. package/dest/simulators/lending_simulator.js +4 -4
  65. package/dest/simulators/token_simulator.d.ts +1 -1
  66. package/dest/simulators/token_simulator.d.ts.map +1 -1
  67. package/dest/simulators/token_simulator.js +2 -2
  68. package/dest/spartan/setup_test_wallets.d.ts +4 -2
  69. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  70. package/dest/spartan/setup_test_wallets.js +28 -15
  71. package/dest/spartan/utils/index.d.ts +2 -1
  72. package/dest/spartan/utils/index.d.ts.map +1 -1
  73. package/dest/spartan/utils/index.js +2 -0
  74. package/dest/spartan/utils/nodes.d.ts +5 -4
  75. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  76. package/dest/spartan/utils/nodes.js +5 -4
  77. package/dest/test-wallet/test_wallet.d.ts +24 -23
  78. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  79. package/dest/test-wallet/test_wallet.js +115 -80
  80. package/dest/test-wallet/wallet_worker_script.js +41 -33
  81. package/dest/test-wallet/worker_wallet.d.ts +4 -4
  82. package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
  83. package/dest/test-wallet/worker_wallet.js +51 -3
  84. package/dest/test-wallet/worker_wallet_schema.d.ts +4 -4
  85. package/package.json +41 -40
  86. package/src/bench/client_flows/client_flows_benchmark.ts +40 -32
  87. package/src/bench/utils.ts +7 -2
  88. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +21 -20
  89. package/src/e2e_epochs/epochs_test.ts +14 -2
  90. package/src/e2e_fees/fees_test.ts +14 -7
  91. package/src/e2e_nested_contract/nested_contract_test.ts +6 -4
  92. package/src/e2e_p2p/inactivity_slash_test.ts +1 -0
  93. package/src/e2e_p2p/p2p_network.ts +24 -20
  94. package/src/e2e_p2p/shared.ts +97 -2
  95. package/src/e2e_token_contract/token_contract_test.ts +16 -8
  96. package/src/fixtures/authwit_proxy.ts +4 -0
  97. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  98. package/src/fixtures/e2e_prover_test.ts +11 -5
  99. package/src/fixtures/setup.ts +27 -18
  100. package/src/fixtures/token_utils.ts +4 -2
  101. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  102. package/src/forward-compatibility/wallet_service.ts +104 -0
  103. package/src/install_legacy_contracts.cjs +75 -0
  104. package/src/legacy-jest-resolver.cjs +101 -0
  105. package/src/shared/cross_chain_test_harness.ts +13 -9
  106. package/src/shared/gas_portal_test_harness.ts +1 -1
  107. package/src/shared/submit-transactions.ts +1 -1
  108. package/src/shared/uniswap_l1_l2.ts +35 -28
  109. package/src/simulators/lending_simulator.ts +8 -4
  110. package/src/simulators/token_simulator.ts +6 -2
  111. package/src/spartan/setup_test_wallets.ts +51 -19
  112. package/src/spartan/utils/index.ts +3 -0
  113. package/src/spartan/utils/nodes.ts +6 -3
  114. package/src/test-wallet/test_wallet.ts +144 -99
  115. package/src/test-wallet/wallet_worker_script.ts +47 -30
  116. package/src/test-wallet/worker_wallet.ts +54 -5
@@ -1,16 +1,19 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
- import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
- import { SignerlessAccount } from '@aztec/aztec.js/account';
3
+ import { StubEcdsaAccountContractArtifact, createStubEcdsaAccount } from '@aztec/accounts/stub/ecdsa';
4
+ import { StubSchnorrAccountContractArtifact, createStubSchnorrAccount } from '@aztec/accounts/stub/schnorr';
5
+ import { NO_FROM } from '@aztec/aztec.js/account';
5
6
  import { SetPublicAuthwitContractInteraction, computeInnerAuthWitHashFromAction, isContractFunctionInteractionCallIntent, lookupValidity } from '@aztec/aztec.js/authorization';
6
7
  import { AccountManager } from '@aztec/aztec.js/wallet';
8
+ import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
9
+ import { DefaultEntrypoint } from '@aztec/entrypoints/default';
7
10
  import { Fr } from '@aztec/foundation/curves/bn254';
8
11
  import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
9
12
  import { getPXEConfig } from '@aztec/pxe/config';
10
13
  import { createPXE } from '@aztec/pxe/server';
11
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
14
  import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
13
15
  import { deriveSigningKey } from '@aztec/stdlib/keys';
16
+ import { SimulationOverrides } from '@aztec/stdlib/tx';
14
17
  import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
15
18
  import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
16
19
  import { AztecNodeProxy, ProvenTx } from './utils.js';
@@ -21,7 +24,7 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
21
24
  */ export class TestWallet extends BaseWallet {
22
25
  nodeRef;
23
26
  constructor(pxe, nodeRef){
24
- super(pxe, nodeRef), this.nodeRef = nodeRef, this.accounts = new Map(), this.simulatedSimulations = false;
27
+ super(pxe, nodeRef), this.nodeRef = nodeRef, this.accounts = new Map(), this.simulationMode = 'kernelless';
25
28
  }
26
29
  static async create(node, overridePXEConfig, options = {
27
30
  loggers: {}
@@ -42,94 +45,111 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
42
45
  }
43
46
  createSchnorrAccount(secret, salt, signingKey) {
44
47
  signingKey = signingKey ?? deriveSigningKey(secret);
45
- const accountData = {
48
+ return this.createAccount({
46
49
  secret,
47
50
  salt,
51
+ type: 'schnorr',
48
52
  contract: new SchnorrAccountContract(signingKey)
49
- };
50
- return this.createAccount(accountData);
53
+ });
51
54
  }
52
55
  createECDSARAccount(secret, salt, signingKey) {
53
- const accountData = {
56
+ return this.createAccount({
54
57
  secret,
55
58
  salt,
59
+ type: 'ecdsasecp256r1',
56
60
  contract: new EcdsaRAccountContract(signingKey)
57
- };
58
- return this.createAccount(accountData);
61
+ });
59
62
  }
60
63
  createECDSAKAccount(secret, salt, signingKey) {
61
- const accountData = {
64
+ return this.createAccount({
62
65
  secret,
63
66
  salt,
67
+ type: 'ecdsasecp256k1',
64
68
  contract: new EcdsaKAccountContract(signingKey)
65
- };
66
- return this.createAccount(accountData);
69
+ });
67
70
  }
68
- async getFakeAccountDataFor(address) {
69
- const originalAccount = await this.getAccountFromAddress(address);
70
- if (originalAccount instanceof SignerlessAccount) {
71
- throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
72
- }
73
- const originalAddress = originalAccount.getCompleteAddress();
74
- const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
75
- if (!contractInstance) {
76
- throw new Error(`No contract instance found for address: ${originalAddress.address}`);
71
+ /**
72
+ * Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
73
+ */ async buildAccountOverrides(addresses) {
74
+ const accounts = await this.getAccounts();
75
+ const contracts = {};
76
+ const filtered = accounts.filter((acc)=>addresses.some((addr)=>addr.equals(acc.item)));
77
+ for (const account of filtered){
78
+ const address = account.item;
79
+ const originalAccount = await this.getAccountFromAddress(address);
80
+ const completeAddress = originalAccount.getCompleteAddress();
81
+ const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
82
+ if (!contractInstance) {
83
+ throw new Error(`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`);
84
+ }
85
+ const stubArtifact = this.getStubArtifactFor(address);
86
+ const stubConstructorArgs = this.getTypeFor(address) === 'schnorr' ? [
87
+ Fr.ZERO,
88
+ Fr.ZERO
89
+ ] : [
90
+ Buffer.alloc(32),
91
+ Buffer.alloc(32)
92
+ ];
93
+ const stubInstance = await getContractInstanceFromInstantiationParams(stubArtifact, {
94
+ salt: Fr.random(),
95
+ constructorArgs: stubConstructorArgs
96
+ });
97
+ contracts[address.toString()] = {
98
+ instance: stubInstance,
99
+ artifact: stubArtifact
100
+ };
77
101
  }
78
- const stubAccount = createStubAccount(originalAddress);
79
- const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
80
- salt: Fr.random()
81
- });
82
- return {
83
- account: stubAccount,
84
- instance,
85
- artifact: StubAccountContractArtifact
86
- };
102
+ return contracts;
87
103
  }
88
104
  accounts;
105
+ getTypeFor(address) {
106
+ return this.accounts.get(address.toString())?.type ?? 'schnorr';
107
+ }
108
+ getStubArtifactFor(address) {
109
+ return this.getTypeFor(address) === 'schnorr' ? StubSchnorrAccountContractArtifact : StubEcdsaAccountContractArtifact;
110
+ }
111
+ getStubAccountFor(address, completeAddress) {
112
+ return this.getTypeFor(address) === 'schnorr' ? createStubSchnorrAccount(completeAddress) : createStubEcdsaAccount(completeAddress);
113
+ }
89
114
  /**
90
- * Toggle for running "simulated simulations" when calling simulateTx.
91
- *
92
- * When this flag is true, simulateViaEntrypoint constructs a request using a fake account
93
- * (and accepts contract overrides on the input) and the PXE emulates kernel effects without
94
- * generating kernel witnesses. When false, simulateViaEntrypoint defers to the standard
95
- * simulation path via the real account entrypoint.
96
- */ simulatedSimulations;
97
- enableSimulatedSimulations() {
98
- this.simulatedSimulations = true;
99
- }
100
- disableSimulatedSimulations() {
101
- this.simulatedSimulations = false;
115
+ * Controls how the test wallet simulates transactions:
116
+ * - `kernelless`: Skips kernel circuits but uses the real account contract. Default.
117
+ * - `kernelless-override`: Skips kernels and replaces the account with a stub that doesn't do authwit validation.
118
+ * - `full`: Uses real kernel circuits and real account contracts. Slow!
119
+ */ simulationMode;
120
+ setSimulationMode(mode) {
121
+ this.simulationMode = mode;
102
122
  }
103
123
  setMinFeePadding(value) {
104
124
  this.minFeePadding = value ?? 0.5;
105
125
  }
106
126
  getAccountFromAddress(address) {
107
- let account;
108
- if (address.equals(AztecAddress.ZERO)) {
109
- account = new SignerlessAccount();
110
- } else {
111
- account = this.accounts.get(address?.toString() ?? '');
112
- }
113
- if (!account) {
127
+ const entry = this.accounts.get(address?.toString() ?? '');
128
+ if (!entry) {
114
129
  throw new Error(`Account not found in wallet for address: ${address}`);
115
130
  }
116
- return Promise.resolve(account);
131
+ return Promise.resolve(entry.account);
117
132
  }
118
133
  getAccounts() {
119
- return Promise.resolve(Array.from(this.accounts.values()).map((acc)=>({
134
+ return Promise.resolve(Array.from(this.accounts.values()).map((entry)=>({
120
135
  alias: '',
121
- item: acc.getAddress()
136
+ item: entry.account.getAddress()
122
137
  })));
123
138
  }
124
139
  async createAccount(accountData) {
125
140
  const secret = accountData?.secret ?? Fr.random();
126
141
  const salt = accountData?.salt ?? Fr.random();
142
+ const type = accountData?.type ?? 'schnorr';
127
143
  const contract = accountData?.contract ?? new SchnorrAccountContract(GrumpkinScalar.random());
128
144
  const accountManager = await AccountManager.create(this, secret, contract, salt);
129
145
  const instance = accountManager.getInstance();
130
146
  const artifact = await contract.getContractArtifact();
131
147
  await this.registerContract(instance, artifact, secret);
132
- this.accounts.set(accountManager.address.toString(), await accountManager.getAccount());
148
+ const address = accountManager.address.toString();
149
+ this.accounts.set(address, {
150
+ account: await accountManager.getAccount(),
151
+ type
152
+ });
133
153
  return accountManager;
134
154
  }
135
155
  lookupValidity(onBehalfOf, intent, witness) {
@@ -154,44 +174,59 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
154
174
  }
155
175
  return account.createAuthWit(intentInnerHash, chainInfo);
156
176
  }
157
- /**
158
- * Override simulateViaEntrypoint to use fake accounts for kernelless simulation
159
- * when simulatedSimulations is enabled. Otherwise falls through to the real entrypoint path.
160
- */ async simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement) {
161
- if (!this.simulatedSimulations) {
162
- return super.simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement);
163
- }
177
+ async simulateViaEntrypoint(executionPayload, opts) {
178
+ const { from, feeOptions, additionalScopes, skipTxValidation, skipFeeEnforcement } = opts;
179
+ const scopes = this.scopesFrom(from, additionalScopes);
180
+ const skipKernels = this.simulationMode !== 'full';
181
+ const useOverride = this.simulationMode === 'kernelless-override';
164
182
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
165
- const executionOptions = {
166
- txNonce: Fr.random(),
167
- cancellable: this.cancellableTransactions,
168
- feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
169
- };
170
183
  const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
171
184
  feeExecutionPayload,
172
185
  executionPayload
173
186
  ]) : executionPayload;
174
- const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(from);
175
187
  const chainInfo = await this.getChainInfo();
176
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
177
- const contractOverrides = {
178
- [from.toString()]: {
179
- instance,
180
- artifact
188
+ let overrides;
189
+ let txRequest;
190
+ if (useOverride) {
191
+ const accountOverrides = await this.buildAccountOverrides(scopes);
192
+ overrides = new SimulationOverrides(accountOverrides);
193
+ }
194
+ if (from === NO_FROM) {
195
+ const entrypoint = new DefaultEntrypoint();
196
+ txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
197
+ } else {
198
+ let fromAccount;
199
+ if (useOverride) {
200
+ const originalAccount = await this.getAccountFromAddress(from);
201
+ fromAccount = this.getStubAccountFor(from, originalAccount.getCompleteAddress());
202
+ } else {
203
+ fromAccount = await this.getAccountFromAddress(from);
181
204
  }
182
- };
183
- return this.pxe.simulateTx(txRequest, {
205
+ const executionOptions = {
206
+ txNonce: Fr.random(),
207
+ cancellable: this.cancellableTransactions,
208
+ // If from is an address, feeOptions include the way the account contract should handle the fee payment
209
+ feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
210
+ };
211
+ txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
212
+ }
213
+ const result = await this.pxe.simulateTx(txRequest, {
184
214
  simulatePublic: true,
185
- skipFeeEnforcement: true,
186
- skipTxValidation: true,
187
- overrides: {
188
- contracts: contractOverrides
189
- },
215
+ skipKernels,
216
+ skipFeeEnforcement,
217
+ skipTxValidation,
218
+ overrides,
190
219
  scopes
191
220
  });
221
+ const appCallOffset = await this.computeAppCallOffset(from, feeOptions);
222
+ return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
192
223
  }
193
224
  async proveTx(exec, opts) {
194
- const fee = await this.completeFeeOptions(opts.from, exec.feePayer, opts.fee?.gasSettings);
225
+ const fee = await this.completeFeeOptions({
226
+ from: opts.from,
227
+ feePayer: exec.feePayer,
228
+ gasSettings: opts.fee?.gasSettings
229
+ });
195
230
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
196
231
  const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
197
232
  return new ProvenTx(this.aztecNode, await txProvingResult.toTx(), txProvingResult.getOffchainEffects(), txProvingResult.stats);
@@ -1,40 +1,48 @@
1
1
  import { createAztecNodeClient } from '@aztec/aztec.js/node';
2
2
  import { jsonStringify } from '@aztec/foundation/json-rpc';
3
+ import { createLogger } from '@aztec/foundation/log';
3
4
  import { parseWithOptionals, schemaHasMethod } from '@aztec/foundation/schemas';
4
5
  import { NodeListener, TransportServer } from '@aztec/foundation/transport';
6
+ import { Tx } from '@aztec/stdlib/tx';
5
7
  import { workerData } from 'worker_threads';
6
8
  import { TestWallet } from './test_wallet.js';
7
9
  import { WorkerWalletSchema } from './worker_wallet_schema.js';
8
- const { nodeUrl, pxeConfig } = workerData;
9
- const node = createAztecNodeClient(nodeUrl);
10
- const wallet = await TestWallet.create(node, pxeConfig);
11
- /** Handlers for methods that need custom implementation (not direct wallet passthrough). */ const handlers = {
12
- proveTx: async (exec, opts)=>{
13
- const provenTx = await wallet.proveTx(exec, opts);
14
- // ProvenTx has non-serializable fields (node proxy, etc.) — extract only Tx-compatible fields
15
- const { data, chonkProof, contractClassLogFields, publicFunctionCalldata } = provenTx;
16
- return {
17
- data,
18
- chonkProof,
19
- contractClassLogFields,
20
- publicFunctionCalldata
21
- };
22
- },
23
- registerAccount: async (secret, salt)=>{
24
- const manager = await wallet.createSchnorrAccount(secret, salt);
25
- return manager.address;
26
- }
27
- };
28
- const schema = WorkerWalletSchema;
29
- const listener = new NodeListener();
30
- const server = new TransportServer(listener, async (msg)=>{
31
- if (!schemaHasMethod(schema, msg.fn)) {
32
- throw new Error(`Unknown method: ${msg.fn}`);
33
- }
34
- const jsonParams = JSON.parse(msg.args);
35
- const args = await parseWithOptionals(jsonParams, schema[msg.fn].parameters());
36
- const handler = handlers[msg.fn];
37
- const result = handler ? await handler(...args) : await wallet[msg.fn](...args);
38
- return jsonStringify(result);
39
- });
40
- server.start();
10
+ const logger = createLogger('e2e:test-wallet:worker');
11
+ try {
12
+ const { nodeUrl, pxeConfig } = workerData;
13
+ logger.info('Initializing worker wallet', {
14
+ nodeUrl
15
+ });
16
+ const node = createAztecNodeClient(nodeUrl);
17
+ const wallet = await TestWallet.create(node, pxeConfig);
18
+ logger.info('Worker wallet initialized');
19
+ const customMethods = {
20
+ proveTx: async (exec, opts)=>{
21
+ const provenTx = await wallet.proveTx(exec, opts);
22
+ return new Tx(provenTx.getTxHash(), provenTx.data, provenTx.chonkProof, provenTx.contractClassLogFields, provenTx.publicFunctionCalldata);
23
+ },
24
+ registerAccount: async (secret, salt)=>{
25
+ const manager = await wallet.createSchnorrAccount(secret, salt);
26
+ return manager.address;
27
+ }
28
+ };
29
+ const schema = WorkerWalletSchema;
30
+ const listener = new NodeListener();
31
+ const server = new TransportServer(listener, async (msg)=>{
32
+ if (!schemaHasMethod(schema, msg.fn)) {
33
+ throw new Error(`Unknown method: ${msg.fn}`);
34
+ }
35
+ const jsonParams = JSON.parse(msg.args);
36
+ const args = await parseWithOptionals(jsonParams, schema[msg.fn].parameters());
37
+ // we have to erase the fn type in order to be able to spread ...args
38
+ const handler = msg.fn in customMethods ? customMethods[msg.fn] : undefined;
39
+ const result = handler ? await handler(...args) : await wallet[msg.fn](...args);
40
+ return jsonStringify(result);
41
+ });
42
+ server.start();
43
+ } catch (err) {
44
+ logger.error('Worker wallet initialization failed', {
45
+ error: err instanceof Error ? err.stack : String(err)
46
+ });
47
+ process.exit(1);
48
+ }
@@ -1,6 +1,6 @@
1
1
  import type { CallIntent, IntentInnerHash } from '@aztec/aztec.js/authorization';
2
2
  import type { InteractionWaitOptions, SendReturn } from '@aztec/aztec.js/contracts';
3
- import type { Aliased, AppCapabilities, BatchResults, BatchedMethod, ContractClassMetadata, ContractMetadata, ExecuteUtilityOptions, PrivateEvent, PrivateEventFilter, ProfileOptions, SendOptions, SimulateOptions, Wallet, WalletCapabilities } from '@aztec/aztec.js/wallet';
3
+ import type { Aliased, AppCapabilities, BatchResults, BatchedMethod, ContractClassMetadata, ContractMetadata, ExecuteUtilityOptions, PrivateEvent, PrivateEventFilter, ProfileOptions, SendOptions, SimulateOptions, TxSimulationResultWithAppOffset, Wallet, WalletCapabilities } from '@aztec/aztec.js/wallet';
4
4
  import type { ChainInfo } from '@aztec/entrypoints/interfaces';
5
5
  import type { Fr } from '@aztec/foundation/curves/bn254';
6
6
  import type { PXEConfig } from '@aztec/pxe/config';
@@ -8,7 +8,7 @@ import type { ContractArtifact, EventMetadataDefinition, FunctionCall } from '@a
8
8
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
9
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
10
10
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
11
- import type { ExecutionPayload, TxProfileResult, TxSimulationResult, UtilityExecutionResult } from '@aztec/stdlib/tx';
11
+ import type { ExecutionPayload, TxProfileResult, UtilityExecutionResult } from '@aztec/stdlib/tx';
12
12
  import { Tx } from '@aztec/stdlib/tx';
13
13
  /**
14
14
  * Wallet implementation that offloads all work to a worker thread.
@@ -36,7 +36,7 @@ export declare class WorkerWallet implements Wallet {
36
36
  getAddressBook(): Promise<Aliased<AztecAddress>[]>;
37
37
  getAccounts(): Promise<Aliased<AztecAddress>[]>;
38
38
  registerContract(instance: ContractInstanceWithAddress, artifact?: ContractArtifact, secretKey?: Fr): Promise<ContractInstanceWithAddress>;
39
- simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
39
+ simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResultWithAppOffset>;
40
40
  executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
41
41
  profileTx(exec: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
42
42
  sendTx<W extends InteractionWaitOptions = undefined>(exec: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
@@ -49,4 +49,4 @@ export declare class WorkerWallet implements Wallet {
49
49
  /** Shuts down the worker thread and closes the transport. */
50
50
  stop(): Promise<void>;
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX3dhbGxldC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qtd2FsbGV0L3dvcmtlcl93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sS0FBSyxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsZUFBZSxFQUNmLE1BQU0sRUFDTixrQkFBa0IsRUFDbkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RILE9BQU8s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
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX3dhbGxldC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qtd2FsbGV0L3dvcmtlcl93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sS0FBSyxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsZUFBZSxFQUNmLCtCQUErQixFQUMvQixNQUFNLEVBQ04sa0JBQWtCLEVBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPekQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakcsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRyxPQUFP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
@@ -1 +1 @@
1
- {"version":3,"file":"worker_wallet.d.ts","sourceRoot":"","sources":["../../src/test-wallet/worker_wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker_wallet.d.ts","sourceRoot":"","sources":["../../src/test-wallet/worker_wallet.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,12 @@
1
1
  import { jsonStringify } from '@aztec/foundation/json-rpc';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { promiseWithResolvers } from '@aztec/foundation/promise';
4
+ import { sleep } from '@aztec/foundation/sleep';
2
5
  import { NodeConnector, TransportClient } from '@aztec/foundation/transport';
3
6
  import { Worker } from 'worker_threads';
4
7
  import { WorkerWalletSchema } from './worker_wallet_schema.js';
8
+ const log = createLogger('e2e:test-wallet:worker-wallet');
9
+ const WORKER_READY_TIMEOUT_MS = 120_000;
5
10
  /**
6
11
  * Wallet implementation that offloads all work to a worker thread.
7
12
  * Implements the Wallet interface by proxying calls over a transport layer
@@ -19,18 +24,61 @@ import { WorkerWalletSchema } from './worker_wallet_schema.js';
19
24
  * @param pxeConfig - Optional PXE configuration overrides.
20
25
  * @returns A WorkerWallet ready to use.
21
26
  */ static async create(nodeUrl, pxeConfig) {
22
- const worker = new Worker(new URL('./wallet_worker_script.js', import.meta.url), {
27
+ // replace stc/ with dest/ so the wallet works in Jest tests
28
+ const workerUrl = new URL('./wallet_worker_script.js', import.meta.url);
29
+ workerUrl.pathname = workerUrl.pathname.replace('/src/', '/dest/');
30
+ // remove JEST_WORKER_ID so the worker uses pino-pretty transport instead of Jest's raw output.
31
+ const { JEST_WORKER_ID: _, ...parentEnv } = process.env;
32
+ const worker = new Worker(workerUrl, {
23
33
  workerData: {
24
34
  nodeUrl,
25
35
  pxeConfig
36
+ },
37
+ env: {
38
+ ...parentEnv,
39
+ ...process.stderr.isTTY || process.env.FORCE_COLOR ? {
40
+ FORCE_COLOR: '1'
41
+ } : {},
42
+ LOG_LEVEL: process.env.WORKER_LOG_LEVEL ?? 'warn'
26
43
  }
27
44
  });
28
45
  const connector = new NodeConnector(worker);
29
46
  const client = new TransportClient(connector);
30
47
  await client.open();
31
48
  const wallet = new WorkerWallet(worker, client);
32
- // Warmup / readiness check blocks until the worker has finished creating the TestWallet.
33
- await wallet.getChainInfo();
49
+ const { promise: workerDied, reject: rejectWorkerDied } = promiseWithResolvers();
50
+ // reject if the worker exits or errors before the warmup completes.
51
+ const onError = (err)=>{
52
+ worker.off('exit', onExit);
53
+ rejectWorkerDied(new Error(`Worker wallet thread error: ${err.message}`));
54
+ };
55
+ const onExit = (code)=>{
56
+ worker.off('error', onError);
57
+ rejectWorkerDied(new Error(`Worker wallet thread exited with code ${code} before becoming ready`));
58
+ };
59
+ worker.once('error', onError);
60
+ worker.once('exit', onExit);
61
+ const timeout = sleep(WORKER_READY_TIMEOUT_MS).then(()=>{
62
+ throw new Error(`Worker wallet creation timed out after ${WORKER_READY_TIMEOUT_MS / 1000}s`);
63
+ });
64
+ try {
65
+ // wait for worker wallet to start
66
+ await Promise.race([
67
+ wallet.getChainInfo(),
68
+ workerDied,
69
+ timeout
70
+ ]);
71
+ } catch (err) {
72
+ log.error('Worker wallet creation failed, cleaning up', {
73
+ error: String(err)
74
+ });
75
+ client.close();
76
+ await worker.terminate();
77
+ throw err;
78
+ } finally{
79
+ worker.off('error', onError);
80
+ worker.off('exit', onExit);
81
+ }
34
82
  return wallet;
35
83
  }
36
84
  async callRaw(fn, ...args) {
@@ -11,10 +11,10 @@ export declare const WorkerWalletSchema: {
11
11
  getAddressBook: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodType<import("@aztec/aztec.js/wallet").Aliased<AztecAddress>[], z.ZodTypeDef, any>>;
12
12
  getAccounts: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodType<import("@aztec/aztec.js/wallet").Aliased<AztecAddress>[], z.ZodTypeDef, any>>;
13
13
  registerContract: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/contract").ContractInstanceWithAddress, z.ZodTypeDef, any>, artifact?: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodType<import("@aztec/stdlib/abi").ContractArtifact | undefined, z.ZodTypeDef, any>> | undefined, secretKey?: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodType<import("@aztec/foundation/schemas").Fr | undefined, z.ZodTypeDef, any>> | undefined], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/contract").ContractInstanceWithAddress, z.ZodTypeDef, any>>;
14
- simulateTx: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/tx").ExecutionPayload, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").SimulateOptions, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/tx").TxSimulationResult, z.ZodTypeDef, any>>;
14
+ simulateTx: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/tx").ExecutionPayload, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").SimulateOptions, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/aztec.js/wallet").TxSimulationResultWithAppOffset, z.ZodTypeDef, any>>;
15
15
  executeUtility: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/abi").FunctionCall, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").ExecuteUtilityOptions, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/tx").UtilityExecutionResult, z.ZodTypeDef, any>>;
16
16
  profileTx: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/tx").ExecutionPayload, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").ProfileOptions, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/tx").TxProfileResult, z.ZodTypeDef, any>>;
17
- sendTx: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/tx").ExecutionPayload, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").SendOptions<import("@aztec/aztec.js/contracts").InteractionWaitOptions>, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/tx").TxHash | import("@aztec/stdlib/tx").TxReceipt, z.ZodTypeDef, any>>;
17
+ sendTx: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/stdlib/tx").ExecutionPayload, z.ZodTypeDef, any>, opts: z.ZodType<import("@aztec/aztec.js/wallet").SendOptions<import("@aztec/aztec.js/contracts").InteractionWaitOptions>, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/aztec.js/contracts").TxSendResultImmediate | import("@aztec/aztec.js/contracts").TxSendResultMined<import("@aztec/stdlib/tx").TxReceipt>, z.ZodTypeDef, any>>;
18
18
  createAuthWit: z.ZodFunction<z.ZodTuple<[z.ZodType<AztecAddress, z.ZodTypeDef, any>, messageHashOrIntent: z.ZodType<import("@aztec/aztec.js/authorization").CallIntent | import("@aztec/aztec.js/authorization").IntentInnerHash, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/stdlib/auth-witness").AuthWitness, z.ZodTypeDef, any>>;
19
19
  requestCapabilities: z.ZodFunction<z.ZodTuple<[z.ZodType<import("@aztec/aztec.js/wallet").AppCapabilities, z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<import("@aztec/aztec.js/wallet").WalletCapabilities, z.ZodTypeDef, any>>;
20
20
  batch: z.ZodFunction<z.ZodTuple<[z.ZodType<readonly import("@aztec/aztec.js/wallet").BatchedMethod[], z.ZodTypeDef, any>], z.ZodUnknown>, z.ZodType<readonly import("@aztec/aztec.js/wallet").BatchedMethodResultWrapper<import("@aztec/aztec.js/wallet").BatchedMethod>[], z.ZodTypeDef, any>>;
@@ -82,7 +82,7 @@ export declare const WorkerWalletSchema: {
82
82
  extraHashedArgs: any[];
83
83
  feePayer?: any;
84
84
  }>, z.ZodObject<{
85
- from: import("@aztec/foundation/schemas").ZodFor<AztecAddress>;
85
+ from: z.ZodUnion<[import("@aztec/foundation/schemas").ZodFor<AztecAddress>, z.ZodLiteral<"NO_FROM">]>;
86
86
  authWitnesses: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodArray<z.ZodType<import("@aztec/stdlib/auth-witness").AuthWitness, any, string>, "many">>;
87
87
  capsules: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodArray<z.ZodType<import("@aztec/stdlib/tx").Capsule, any, string>, "many">>;
88
88
  fee: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodObject<{
@@ -213,7 +213,7 @@ export declare const WorkerWalletSchema: {
213
213
  }>]>>;
214
214
  additionalScopes: import("@aztec/foundation/schemas").ZodNullableOptional<z.ZodArray<import("@aztec/foundation/schemas").ZodFor<AztecAddress>, "many">>;
215
215
  }, "strip", z.ZodTypeAny, {
216
- from: AztecAddress;
216
+ from: "NO_FROM" | AztecAddress;
217
217
  authWitnesses?: import("@aztec/stdlib/auth-witness").AuthWitness[] | undefined;
218
218
  capsules?: import("@aztec/stdlib/tx").Capsule[] | undefined;
219
219
  fee?: {