@aztec/end-to-end 0.0.1-commit.d117d021b → 0.0.1-commit.d1da697d6

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 (76) 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 +13 -28
  5. package/dest/e2e_epochs/epochs_test.d.ts +3 -1
  6. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  7. package/dest/e2e_epochs/epochs_test.js +5 -2
  8. package/dest/e2e_fees/fees_test.js +1 -1
  9. package/dest/e2e_p2p/inactivity_slash_test.js +1 -1
  10. package/dest/e2e_p2p/reqresp/utils.d.ts +1 -1
  11. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  12. package/dest/e2e_p2p/reqresp/utils.js +15 -2
  13. package/dest/e2e_p2p/shared.d.ts +12 -6
  14. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  15. package/dest/e2e_p2p/shared.js +17 -9
  16. package/dest/fixtures/authwit_proxy.d.ts +1 -1
  17. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  18. package/dest/fixtures/authwit_proxy.js +4 -0
  19. package/dest/fixtures/e2e_prover_test.d.ts +4 -3
  20. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  21. package/dest/fixtures/e2e_prover_test.js +5 -10
  22. package/dest/fixtures/get_bb_config.d.ts +1 -1
  23. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  24. package/dest/fixtures/get_bb_config.js +5 -5
  25. package/dest/fixtures/setup.d.ts +6 -1
  26. package/dest/fixtures/setup.d.ts.map +1 -1
  27. package/dest/fixtures/setup.js +13 -9
  28. package/dest/fixtures/token_utils.d.ts +1 -1
  29. package/dest/fixtures/token_utils.d.ts.map +1 -1
  30. package/dest/fixtures/token_utils.js +2 -5
  31. package/dest/legacy-jest-resolver.d.cts +3 -0
  32. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  33. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  34. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  35. package/dest/shared/uniswap_l1_l2.js +9 -12
  36. package/dest/simulators/lending_simulator.d.ts +1 -1
  37. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  38. package/dest/simulators/lending_simulator.js +2 -2
  39. package/dest/simulators/token_simulator.js +1 -1
  40. package/dest/spartan/setup_test_wallets.d.ts +4 -2
  41. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  42. package/dest/spartan/setup_test_wallets.js +77 -16
  43. package/dest/spartan/utils/config.d.ts +4 -1
  44. package/dest/spartan/utils/config.d.ts.map +1 -1
  45. package/dest/spartan/utils/config.js +1 -0
  46. package/dest/spartan/utils/index.d.ts +2 -1
  47. package/dest/spartan/utils/index.d.ts.map +1 -1
  48. package/dest/spartan/utils/index.js +2 -0
  49. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  50. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  51. package/dest/spartan/utils/pod_logs.js +74 -0
  52. package/dest/test-wallet/test_wallet.d.ts +15 -23
  53. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  54. package/dest/test-wallet/test_wallet.js +72 -64
  55. package/dest/test-wallet/worker_wallet_schema.d.ts +2 -2
  56. package/package.json +40 -40
  57. package/src/bench/client_flows/client_flows_benchmark.ts +31 -22
  58. package/src/e2e_epochs/epochs_test.ts +14 -2
  59. package/src/e2e_fees/fees_test.ts +1 -1
  60. package/src/e2e_p2p/inactivity_slash_test.ts +1 -1
  61. package/src/e2e_p2p/reqresp/utils.ts +23 -2
  62. package/src/e2e_p2p/shared.ts +20 -10
  63. package/src/fixtures/authwit_proxy.ts +4 -0
  64. package/src/fixtures/e2e_prover_test.ts +7 -15
  65. package/src/fixtures/get_bb_config.ts +7 -6
  66. package/src/fixtures/setup.ts +17 -8
  67. package/src/fixtures/token_utils.ts +1 -4
  68. package/src/legacy-jest-resolver.cjs +135 -0
  69. package/src/shared/uniswap_l1_l2.ts +29 -24
  70. package/src/simulators/lending_simulator.ts +4 -2
  71. package/src/simulators/token_simulator.ts +1 -1
  72. package/src/spartan/setup_test_wallets.ts +102 -14
  73. package/src/spartan/utils/config.ts +1 -0
  74. package/src/spartan/utils/index.ts +3 -0
  75. package/src/spartan/utils/pod_logs.ts +99 -0
  76. package/src/test-wallet/test_wallet.ts +99 -79
@@ -1,7 +1,7 @@
1
1
  import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
2
2
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
3
3
  import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
4
- import { type Account, type AccountContract, SignerlessAccount } from '@aztec/aztec.js/account';
4
+ import { type Account, type AccountContract, NO_FROM } from '@aztec/aztec.js/account';
5
5
  import {
6
6
  type CallIntent,
7
7
  type ContractFunctionInteractionCallIntent,
@@ -14,9 +14,10 @@ import {
14
14
  import type { AztecNode } from '@aztec/aztec.js/node';
15
15
  import { AccountManager, type SendOptions } from '@aztec/aztec.js/wallet';
16
16
  import type { DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
17
+ import { DefaultEntrypoint } from '@aztec/entrypoints/default';
17
18
  import { Fq, Fr } from '@aztec/foundation/curves/bn254';
18
19
  import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
19
- import type { AccessScopes, NotesFilter } from '@aztec/pxe/client/lazy';
20
+ import type { NotesFilter } from '@aztec/pxe/client/lazy';
20
21
  import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
21
22
  import { PXE, type PXECreationOptions, createPXE } from '@aztec/pxe/server';
22
23
  import { AuthWitness } from '@aztec/stdlib/auth-witness';
@@ -24,9 +25,17 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
24
25
  import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
25
26
  import { deriveSigningKey } from '@aztec/stdlib/keys';
26
27
  import type { NoteDao } from '@aztec/stdlib/note';
27
- import type { BlockHeader, TxHash, TxReceipt, TxSimulationResult } from '@aztec/stdlib/tx';
28
+ import {
29
+ type BlockHeader,
30
+ type ContractOverrides,
31
+ SimulationOverrides,
32
+ type TxExecutionRequest,
33
+ type TxHash,
34
+ type TxReceipt,
35
+ type TxSimulationResult,
36
+ } from '@aztec/stdlib/tx';
28
37
  import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
29
- import { BaseWallet, type FeeOptions } from '@aztec/wallet-sdk/base-wallet';
38
+ import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
30
39
 
31
40
  import { AztecNodeProxy, ProvenTx } from './utils.js';
32
41
 
@@ -102,44 +111,51 @@ export class TestWallet extends BaseWallet {
102
111
  return this.createAccount(accountData);
103
112
  }
104
113
 
105
- async getFakeAccountDataFor(address: AztecAddress) {
106
- const originalAccount = await this.getAccountFromAddress(address);
107
- if (originalAccount instanceof SignerlessAccount) {
108
- throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
109
- }
110
- const originalAddress = (originalAccount as Account).getCompleteAddress();
111
- const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
112
- if (!contractInstance) {
113
- throw new Error(`No contract instance found for address: ${originalAddress.address}`);
114
+ /**
115
+ * Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
116
+ */
117
+ protected async buildAccountOverrides(addresses: AztecAddress[]): Promise<ContractOverrides> {
118
+ const accounts = await this.getAccounts();
119
+ const contracts: ContractOverrides = {};
120
+
121
+ const filtered = accounts.filter(acc => addresses.some(addr => addr.equals(acc.item)));
122
+
123
+ for (const account of filtered) {
124
+ const address = account.item;
125
+ const originalAccount = await this.getAccountFromAddress(address);
126
+ const completeAddress = originalAccount.getCompleteAddress();
127
+ const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
128
+ if (!contractInstance) {
129
+ throw new Error(
130
+ `No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`,
131
+ );
132
+ }
133
+
134
+ const stubInstance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
135
+ salt: Fr.random(),
136
+ });
137
+
138
+ contracts[address.toString()] = {
139
+ instance: stubInstance,
140
+ artifact: StubAccountContractArtifact,
141
+ };
114
142
  }
115
- const stubAccount = createStubAccount(originalAddress);
116
- const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
117
- salt: Fr.random(),
118
- });
119
- return {
120
- account: stubAccount,
121
- instance,
122
- artifact: StubAccountContractArtifact,
123
- };
143
+
144
+ return contracts;
124
145
  }
146
+
125
147
  protected accounts: Map<string, Account> = new Map();
126
148
 
127
149
  /**
128
- * Toggle for running "simulated simulations" when calling simulateTx.
129
- *
130
- * When this flag is true, simulateViaEntrypoint constructs a request using a fake account
131
- * (and accepts contract overrides on the input) and the PXE emulates kernel effects without
132
- * generating kernel witnesses. When false, simulateViaEntrypoint defers to the standard
133
- * simulation path via the real account entrypoint.
150
+ * Controls how the test wallet simulates transactions:
151
+ * - `kernelless`: Skips kernel circuits but uses the real account contract. Default.
152
+ * - `kernelless-override`: Skips kernels and replaces the account with a stub that doesn't do authwit validation.
153
+ * - `full`: Uses real kernel circuits and real account contracts. Slow!
134
154
  */
135
- private simulatedSimulations = false;
136
-
137
- enableSimulatedSimulations() {
138
- this.simulatedSimulations = true;
139
- }
155
+ private simulationMode: 'kernelless' | 'kernelless-override' | 'full' = 'kernelless';
140
156
 
141
- disableSimulatedSimulations() {
142
- this.simulatedSimulations = false;
157
+ setSimulationMode(mode: 'kernelless' | 'kernelless-override' | 'full') {
158
+ this.simulationMode = mode;
143
159
  }
144
160
 
145
161
  setMinFeePadding(value?: number) {
@@ -147,12 +163,7 @@ export class TestWallet extends BaseWallet {
147
163
  }
148
164
 
149
165
  protected getAccountFromAddress(address: AztecAddress): Promise<Account> {
150
- let account: Account | undefined;
151
- if (address.equals(AztecAddress.ZERO)) {
152
- account = new SignerlessAccount();
153
- } else {
154
- account = this.accounts.get(address?.toString() ?? '');
155
- }
166
+ const account = this.accounts.get(address?.toString() ?? '');
156
167
 
157
168
  if (!account) {
158
169
  throw new Error(`Account not found in wallet for address: ${address}`);
@@ -220,60 +231,69 @@ export class TestWallet extends BaseWallet {
220
231
  return account.createAuthWit(intentInnerHash, chainInfo);
221
232
  }
222
233
 
223
- /**
224
- * Override simulateViaEntrypoint to use fake accounts for kernelless simulation
225
- * when simulatedSimulations is enabled. Otherwise falls through to the real entrypoint path.
226
- */
227
234
  protected override async simulateViaEntrypoint(
228
235
  executionPayload: ExecutionPayload,
229
- from: AztecAddress,
230
- feeOptions: FeeOptions,
231
- scopes: AccessScopes,
232
- skipTxValidation?: boolean,
233
- skipFeeEnforcement?: boolean,
236
+ opts: SimulateViaEntrypointOptions,
234
237
  ): Promise<TxSimulationResult> {
235
- if (!this.simulatedSimulations) {
236
- return super.simulateViaEntrypoint(
237
- executionPayload,
238
- from,
239
- feeOptions,
240
- scopes,
241
- skipTxValidation,
242
- skipFeeEnforcement,
243
- );
244
- }
238
+ const { from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement } = opts;
239
+ const skipKernels = this.simulationMode !== 'full';
240
+ const useOverride = this.simulationMode === 'kernelless-override';
245
241
 
246
242
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
247
- const executionOptions: DefaultAccountEntrypointOptions = {
248
- txNonce: Fr.random(),
249
- cancellable: this.cancellableTransactions,
250
- feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions,
251
- };
252
243
  const finalExecutionPayload = feeExecutionPayload
253
244
  ? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
254
245
  : executionPayload;
255
- const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(from);
256
246
  const chainInfo = await this.getChainInfo();
257
- const txRequest = await fromAccount.createTxExecutionRequest(
258
- finalExecutionPayload,
259
- feeOptions.gasSettings,
260
- chainInfo,
261
- executionOptions,
262
- );
263
- const contractOverrides = {
264
- [from.toString()]: { instance, artifact },
265
- };
247
+
248
+ let overrides: SimulationOverrides | undefined;
249
+ let txRequest: TxExecutionRequest;
250
+ if (useOverride) {
251
+ const accountOverrides = await this.buildAccountOverrides(this.scopesFrom(from, opts.additionalScopes));
252
+ overrides = new SimulationOverrides(accountOverrides);
253
+ }
254
+
255
+ if (from === NO_FROM) {
256
+ const entrypoint = new DefaultEntrypoint();
257
+ txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
258
+ } else {
259
+ let fromAccount: Account;
260
+ if (useOverride) {
261
+ const originalAccount = await this.getAccountFromAddress(from);
262
+ const completeAddress = originalAccount.getCompleteAddress();
263
+ fromAccount = createStubAccount(completeAddress);
264
+ } else {
265
+ fromAccount = await this.getAccountFromAddress(from);
266
+ }
267
+ const executionOptions: DefaultAccountEntrypointOptions = {
268
+ txNonce: Fr.random(),
269
+ cancellable: this.cancellableTransactions,
270
+ // If from is an address, feeOptions include the way the account contract should handle the fee payment
271
+ feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions!,
272
+ };
273
+ txRequest = await fromAccount.createTxExecutionRequest(
274
+ finalExecutionPayload,
275
+ feeOptions.gasSettings,
276
+ chainInfo,
277
+ executionOptions,
278
+ );
279
+ }
280
+
266
281
  return this.pxe.simulateTx(txRequest, {
267
282
  simulatePublic: true,
268
- skipFeeEnforcement: true,
269
- skipTxValidation: true,
270
- overrides: { contracts: contractOverrides },
283
+ skipKernels,
284
+ skipFeeEnforcement,
285
+ skipTxValidation,
286
+ overrides,
271
287
  scopes,
272
288
  });
273
289
  }
274
290
 
275
291
  async proveTx(exec: ExecutionPayload, opts: Omit<SendOptions, 'wait'>): Promise<ProvenTx> {
276
- const fee = await this.completeFeeOptions(opts.from, exec.feePayer, opts.fee?.gasSettings);
292
+ const fee = await this.completeFeeOptions({
293
+ from: opts.from,
294
+ feePayer: exec.feePayer,
295
+ gasSettings: opts.fee?.gasSettings,
296
+ });
277
297
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
278
298
  const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
279
299
  return new ProvenTx(