@aztec/end-to-end 0.0.1-commit.dbf9cec → 0.0.1-commit.df81a97b5

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 (106) hide show
  1. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.js +18 -10
  4. package/dest/bench/utils.d.ts +1 -1
  5. package/dest/bench/utils.d.ts.map +1 -1
  6. package/dest/bench/utils.js +6 -3
  7. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +1 -1
  8. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +14 -14
  10. package/dest/e2e_epochs/epochs_test.d.ts +3 -1
  11. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  12. package/dest/e2e_epochs/epochs_test.js +5 -2
  13. package/dest/e2e_fees/fees_test.d.ts +1 -1
  14. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  15. package/dest/e2e_fees/fees_test.js +12 -5
  16. package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
  17. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  18. package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
  19. package/dest/e2e_p2p/p2p_network.d.ts +4 -3
  20. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  21. package/dest/e2e_p2p/p2p_network.js +19 -16
  22. package/dest/e2e_p2p/reqresp/utils.d.ts +1 -1
  23. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  24. package/dest/e2e_p2p/reqresp/utils.js +15 -2
  25. package/dest/e2e_p2p/shared.d.ts +21 -1
  26. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  27. package/dest/e2e_p2p/shared.js +33 -2
  28. package/dest/e2e_token_contract/token_contract_test.d.ts +1 -1
  29. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  30. package/dest/e2e_token_contract/token_contract_test.js +11 -11
  31. package/dest/fixtures/authwit_proxy.d.ts +3 -3
  32. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  33. package/dest/fixtures/e2e_prover_test.d.ts +4 -3
  34. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  35. package/dest/fixtures/e2e_prover_test.js +9 -11
  36. package/dest/fixtures/get_bb_config.d.ts +1 -1
  37. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  38. package/dest/fixtures/get_bb_config.js +5 -5
  39. package/dest/fixtures/setup.d.ts +7 -2
  40. package/dest/fixtures/setup.d.ts.map +1 -1
  41. package/dest/fixtures/setup.js +16 -12
  42. package/dest/fixtures/token_utils.d.ts +1 -1
  43. package/dest/fixtures/token_utils.d.ts.map +1 -1
  44. package/dest/fixtures/token_utils.js +2 -2
  45. package/dest/shared/cross_chain_test_harness.d.ts +1 -1
  46. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  47. package/dest/shared/cross_chain_test_harness.js +13 -13
  48. package/dest/shared/gas_portal_test_harness.js +2 -2
  49. package/dest/shared/jest_setup.js +32 -1
  50. package/dest/shared/submit-transactions.d.ts +1 -1
  51. package/dest/shared/submit-transactions.d.ts.map +1 -1
  52. package/dest/shared/submit-transactions.js +1 -1
  53. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  54. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  55. package/dest/shared/uniswap_l1_l2.js +14 -17
  56. package/dest/simulators/lending_simulator.d.ts +1 -1
  57. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  58. package/dest/simulators/lending_simulator.js +4 -4
  59. package/dest/simulators/token_simulator.d.ts +1 -1
  60. package/dest/simulators/token_simulator.d.ts.map +1 -1
  61. package/dest/simulators/token_simulator.js +2 -2
  62. package/dest/spartan/setup_test_wallets.d.ts +4 -2
  63. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  64. package/dest/spartan/setup_test_wallets.js +28 -15
  65. package/dest/spartan/tx_metrics.js +1 -1
  66. package/dest/spartan/utils/config.d.ts +4 -1
  67. package/dest/spartan/utils/config.d.ts.map +1 -1
  68. package/dest/spartan/utils/config.js +1 -0
  69. package/dest/spartan/utils/index.d.ts +2 -1
  70. package/dest/spartan/utils/index.d.ts.map +1 -1
  71. package/dest/spartan/utils/index.js +2 -0
  72. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  73. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  74. package/dest/spartan/utils/pod_logs.js +74 -0
  75. package/dest/test-wallet/test_wallet.d.ts +10 -17
  76. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  77. package/dest/test-wallet/test_wallet.js +47 -48
  78. package/dest/test-wallet/worker_wallet_schema.d.ts +3 -3
  79. package/package.json +42 -44
  80. package/src/bench/client_flows/client_flows_benchmark.ts +40 -31
  81. package/src/bench/utils.ts +7 -2
  82. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +18 -14
  83. package/src/e2e_epochs/epochs_test.ts +14 -2
  84. package/src/e2e_fees/fees_test.ts +12 -5
  85. package/src/e2e_nested_contract/nested_contract_test.ts +6 -4
  86. package/src/e2e_p2p/p2p_network.ts +25 -21
  87. package/src/e2e_p2p/reqresp/utils.ts +23 -2
  88. package/src/e2e_p2p/shared.ts +55 -2
  89. package/src/e2e_token_contract/token_contract_test.ts +16 -8
  90. package/src/fixtures/e2e_prover_test.ts +16 -16
  91. package/src/fixtures/get_bb_config.ts +7 -6
  92. package/src/fixtures/setup.ts +22 -11
  93. package/src/fixtures/token_utils.ts +4 -2
  94. package/src/shared/cross_chain_test_harness.ts +13 -9
  95. package/src/shared/gas_portal_test_harness.ts +1 -1
  96. package/src/shared/jest_setup.ts +36 -1
  97. package/src/shared/submit-transactions.ts +1 -4
  98. package/src/shared/uniswap_l1_l2.ts +35 -28
  99. package/src/simulators/lending_simulator.ts +8 -4
  100. package/src/simulators/token_simulator.ts +6 -2
  101. package/src/spartan/setup_test_wallets.ts +51 -19
  102. package/src/spartan/tx_metrics.ts +1 -1
  103. package/src/spartan/utils/config.ts +1 -0
  104. package/src/spartan/utils/index.ts +3 -0
  105. package/src/spartan/utils/pod_logs.ts +99 -0
  106. package/src/test-wallet/test_wallet.ts +60 -65
@@ -14,7 +14,7 @@ export declare const WorkerWalletSchema: {
14
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>>;
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?: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "0.0.1-commit.dbf9cec",
3
+ "version": "0.0.1-commit.df81a97b5",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -12,12 +12,12 @@
12
12
  "build:dev": "../scripts/tsc.sh --watch",
13
13
  "clean": "rm -rf ./dest .tsbuildinfo",
14
14
  "test:with-alerts": "./scripts/test-with-alerts.sh",
15
- "test:e2e": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=300000 --forceExit",
15
+ "test:e2e": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=300000",
16
16
  "test:e2e-docker": "./scripts/run_test.sh simple",
17
17
  "test:e2e-no-docker": "echo 'The command test:e2e-no-docker is now the same as test:e2e. You can now run this dropping the no-docker suffix.'; yarn test:e2e",
18
- "test:profile": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 0x --output-dir \"flame_graph/{pid}.0x\" -- node --experimental-vm-modules ../node_modules/jest/bin/jest.js --runInBand --testTimeout=300000 --forceExit",
18
+ "test:profile": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 0x --output-dir \"flame_graph/{pid}.0x\" -- node --experimental-vm-modules ../node_modules/jest/bin/jest.js --runInBand --testTimeout=300000",
19
19
  "serve:flames": "python3 -m http.server --directory \"flame_graph\" 8000",
20
- "test:debug": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 node --inspect --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=300000 --forceExit",
20
+ "test:debug": "LOG_LEVEL=${LOG_LEVEL:-verbose} NODE_NO_WARNINGS=1 node --inspect --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=300000",
21
21
  "test:integration": "concurrently -k -s first -c reset,dim -n test,anvil \"yarn test:integration:run\" \"anvil\"",
22
22
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --no-cache --runInBand --config jest.integration.config.json",
23
23
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests src/fixtures",
@@ -26,45 +26,44 @@
26
26
  "formatting": "run -T prettier --check ./src && run -T eslint ./src"
27
27
  },
28
28
  "dependencies": {
29
- "@aztec/accounts": "0.0.1-commit.dbf9cec",
30
- "@aztec/archiver": "0.0.1-commit.dbf9cec",
31
- "@aztec/aztec": "0.0.1-commit.dbf9cec",
32
- "@aztec/aztec-node": "0.0.1-commit.dbf9cec",
33
- "@aztec/aztec.js": "0.0.1-commit.dbf9cec",
34
- "@aztec/bb-prover": "0.0.1-commit.dbf9cec",
35
- "@aztec/bb.js": "0.0.1-commit.dbf9cec",
36
- "@aztec/blob-client": "0.0.1-commit.dbf9cec",
37
- "@aztec/blob-lib": "0.0.1-commit.dbf9cec",
38
- "@aztec/bot": "0.0.1-commit.dbf9cec",
39
- "@aztec/cli": "0.0.1-commit.dbf9cec",
40
- "@aztec/constants": "0.0.1-commit.dbf9cec",
41
- "@aztec/entrypoints": "0.0.1-commit.dbf9cec",
42
- "@aztec/epoch-cache": "0.0.1-commit.dbf9cec",
43
- "@aztec/ethereum": "0.0.1-commit.dbf9cec",
44
- "@aztec/foundation": "0.0.1-commit.dbf9cec",
45
- "@aztec/kv-store": "0.0.1-commit.dbf9cec",
46
- "@aztec/l1-artifacts": "0.0.1-commit.dbf9cec",
47
- "@aztec/merkle-tree": "0.0.1-commit.dbf9cec",
48
- "@aztec/node-keystore": "0.0.1-commit.dbf9cec",
49
- "@aztec/noir-contracts.js": "0.0.1-commit.dbf9cec",
50
- "@aztec/noir-noirc_abi": "0.0.1-commit.dbf9cec",
51
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.dbf9cec",
52
- "@aztec/noir-test-contracts.js": "0.0.1-commit.dbf9cec",
53
- "@aztec/p2p": "0.0.1-commit.dbf9cec",
54
- "@aztec/protocol-contracts": "0.0.1-commit.dbf9cec",
55
- "@aztec/prover-client": "0.0.1-commit.dbf9cec",
56
- "@aztec/prover-node": "0.0.1-commit.dbf9cec",
57
- "@aztec/pxe": "0.0.1-commit.dbf9cec",
58
- "@aztec/sequencer-client": "0.0.1-commit.dbf9cec",
59
- "@aztec/simulator": "0.0.1-commit.dbf9cec",
60
- "@aztec/slasher": "0.0.1-commit.dbf9cec",
61
- "@aztec/stdlib": "0.0.1-commit.dbf9cec",
62
- "@aztec/telemetry-client": "0.0.1-commit.dbf9cec",
63
- "@aztec/validator-client": "0.0.1-commit.dbf9cec",
64
- "@aztec/validator-ha-signer": "0.0.1-commit.dbf9cec",
65
- "@aztec/wallet-sdk": "0.0.1-commit.dbf9cec",
66
- "@aztec/wallets": "0.0.1-commit.dbf9cec",
67
- "@aztec/world-state": "0.0.1-commit.dbf9cec",
29
+ "@aztec/accounts": "0.0.1-commit.df81a97b5",
30
+ "@aztec/archiver": "0.0.1-commit.df81a97b5",
31
+ "@aztec/aztec": "0.0.1-commit.df81a97b5",
32
+ "@aztec/aztec-node": "0.0.1-commit.df81a97b5",
33
+ "@aztec/aztec.js": "0.0.1-commit.df81a97b5",
34
+ "@aztec/bb-prover": "0.0.1-commit.df81a97b5",
35
+ "@aztec/bb.js": "0.0.1-commit.df81a97b5",
36
+ "@aztec/blob-client": "0.0.1-commit.df81a97b5",
37
+ "@aztec/blob-lib": "0.0.1-commit.df81a97b5",
38
+ "@aztec/bot": "0.0.1-commit.df81a97b5",
39
+ "@aztec/cli": "0.0.1-commit.df81a97b5",
40
+ "@aztec/constants": "0.0.1-commit.df81a97b5",
41
+ "@aztec/entrypoints": "0.0.1-commit.df81a97b5",
42
+ "@aztec/epoch-cache": "0.0.1-commit.df81a97b5",
43
+ "@aztec/ethereum": "0.0.1-commit.df81a97b5",
44
+ "@aztec/foundation": "0.0.1-commit.df81a97b5",
45
+ "@aztec/kv-store": "0.0.1-commit.df81a97b5",
46
+ "@aztec/l1-artifacts": "0.0.1-commit.df81a97b5",
47
+ "@aztec/node-keystore": "0.0.1-commit.df81a97b5",
48
+ "@aztec/noir-contracts.js": "0.0.1-commit.df81a97b5",
49
+ "@aztec/noir-noirc_abi": "0.0.1-commit.df81a97b5",
50
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.df81a97b5",
51
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.df81a97b5",
52
+ "@aztec/p2p": "0.0.1-commit.df81a97b5",
53
+ "@aztec/protocol-contracts": "0.0.1-commit.df81a97b5",
54
+ "@aztec/prover-client": "0.0.1-commit.df81a97b5",
55
+ "@aztec/prover-node": "0.0.1-commit.df81a97b5",
56
+ "@aztec/pxe": "0.0.1-commit.df81a97b5",
57
+ "@aztec/sequencer-client": "0.0.1-commit.df81a97b5",
58
+ "@aztec/simulator": "0.0.1-commit.df81a97b5",
59
+ "@aztec/slasher": "0.0.1-commit.df81a97b5",
60
+ "@aztec/stdlib": "0.0.1-commit.df81a97b5",
61
+ "@aztec/telemetry-client": "0.0.1-commit.df81a97b5",
62
+ "@aztec/validator-client": "0.0.1-commit.df81a97b5",
63
+ "@aztec/validator-ha-signer": "0.0.1-commit.df81a97b5",
64
+ "@aztec/wallet-sdk": "0.0.1-commit.df81a97b5",
65
+ "@aztec/wallets": "0.0.1-commit.df81a97b5",
66
+ "@aztec/world-state": "0.0.1-commit.df81a97b5",
68
67
  "@iarna/toml": "^2.2.5",
69
68
  "@jest/globals": "^30.0.0",
70
69
  "@noble/curves": "=1.0.0",
@@ -76,7 +75,6 @@
76
75
  "@types/koa-static": "^4.0.2",
77
76
  "@types/lodash.every": "^4.6.7",
78
77
  "@types/node": "^22.15.17",
79
- "@viem/anvil": "^0.0.9",
80
78
  "buffer": "^6.0.3",
81
79
  "crypto-browserify": "^3.12.1",
82
80
  "fs-extra": "^11.2.0",
@@ -1,10 +1,11 @@
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
1
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
3
  import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
3
4
  import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
4
5
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
6
  import type { AztecNode } from '@aztec/aztec.js/node';
6
7
  import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { CheatCodes } from '@aztec/aztec/testing';
8
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
8
9
  import { createExtendedL1Client } from '@aztec/ethereum/client';
9
10
  import { RollupContract } from '@aztec/ethereum/contracts';
10
11
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -130,11 +131,14 @@ export class ClientFlowsBenchmark {
130
131
 
131
132
  async setup() {
132
133
  this.logger.info('Setting up subsystems from fresh');
134
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
135
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
133
136
  this.context = await setup(0, {
134
137
  ...this.setupOptions,
135
138
  fundSponsoredFPC: true,
136
139
  skipAccountDeployment: true,
137
140
  l1ContractsArgs: this.setupOptions,
141
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
138
142
  });
139
143
  await this.applyBaseSetup();
140
144
 
@@ -148,6 +152,7 @@ export class ClientFlowsBenchmark {
148
152
 
149
153
  async teardown() {
150
154
  await this.chainMonitor.stop();
155
+ await this.userWallet?.stop();
151
156
  await teardown(this.context);
152
157
  }
153
158
 
@@ -161,11 +166,15 @@ export class ClientFlowsBenchmark {
161
166
 
162
167
  /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
163
168
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
164
- const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
169
+ const { result: balanceBefore } = await this.bananaCoin.methods
170
+ .balance_of_private(address)
171
+ .simulate({ from: address });
165
172
 
166
173
  await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
167
174
 
168
- const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
175
+ const { result: balanceAfter } = await this.bananaCoin.methods
176
+ .balance_of_private(address)
177
+ .simulate({ from: address });
169
178
  expect(balanceAfter).toEqual(balanceBefore + amount);
170
179
  }
171
180
 
@@ -241,13 +250,12 @@ export class ClientFlowsBenchmark {
241
250
 
242
251
  async applyDeployBananaToken() {
243
252
  this.logger.info('Applying banana token deployment');
244
- const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
245
- this.adminWallet,
246
- this.adminAddress,
247
- 'BC',
248
- 'BC',
249
- 18n,
250
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
253
+ const {
254
+ receipt: { contract: bananaCoin, instance: bananaCoinInstance },
255
+ } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
256
+ from: this.adminAddress,
257
+ wait: { returnReceipt: true },
258
+ });
251
259
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
252
260
  this.bananaCoin = bananaCoin;
253
261
  this.bananaCoinInstance = bananaCoinInstance;
@@ -255,13 +263,12 @@ export class ClientFlowsBenchmark {
255
263
 
256
264
  async applyDeployCandyBarToken() {
257
265
  this.logger.info('Applying candy bar token deployment');
258
- const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
259
- this.adminWallet,
260
- this.adminAddress,
261
- 'CBC',
262
- 'CBC',
263
- 18n,
264
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
266
+ const {
267
+ receipt: { contract: candyBarCoin, instance: candyBarCoinInstance },
268
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
269
+ from: this.adminAddress,
270
+ wait: { returnReceipt: true },
271
+ });
265
272
  this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
266
273
  this.candyBarCoin = candyBarCoin;
267
274
  this.candyBarCoinInstance = candyBarCoinInstance;
@@ -273,11 +280,12 @@ export class ClientFlowsBenchmark {
273
280
  expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
274
281
 
275
282
  const bananaCoin = this.bananaCoin;
276
- const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
277
- this.adminWallet,
278
- bananaCoin.address,
279
- this.adminAddress,
280
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
283
+ const {
284
+ receipt: { contract: bananaFPC, instance: bananaFPCInstance },
285
+ } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
286
+ from: this.adminAddress,
287
+ wait: { returnReceipt: true },
288
+ });
281
289
 
282
290
  this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
283
291
 
@@ -326,7 +334,7 @@ export class ClientFlowsBenchmark {
326
334
  const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
327
335
  const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
328
336
  await behchysDeployMethod.send({
329
- from: AztecAddress.ZERO,
337
+ from: NO_FROM,
330
338
  fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
331
339
  });
332
340
  // Register benchy on the user's Wallet, where we're going to be interacting from
@@ -340,14 +348,15 @@ export class ClientFlowsBenchmark {
340
348
 
341
349
  public async applyDeployAmm() {
342
350
  this.logger.info('Applying AMM deployment');
343
- const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
344
- this.adminWallet,
345
- this.adminAddress,
346
- 'LPT',
347
- 'LPT',
348
- 18n,
349
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
350
- const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
351
+ const {
352
+ receipt: { contract: liquidityToken, instance: liquidityTokenInstance },
353
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
354
+ from: this.adminAddress,
355
+ wait: { returnReceipt: true },
356
+ });
357
+ const {
358
+ receipt: { contract: amm, instance: ammInstance },
359
+ } = await AMMContract.deploy(
351
360
  this.adminWallet,
352
361
  this.bananaCoin.address,
353
362
  this.candyBarCoin.address,
@@ -25,7 +25,7 @@ export async function benchmarkSetup(
25
25
  ) {
26
26
  const context = await setup(1, { ...opts, telemetryConfig: { benchmark: true } });
27
27
  const defaultAccountAddress = context.accounts[0];
28
- const contract = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
28
+ const { contract } = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
29
29
  context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
30
30
  const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
31
31
  const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
@@ -149,7 +149,12 @@ export async function sendTxs(
149
149
  context.logger.info(`Creating ${txCount} txs`);
150
150
  const [from] = context.accounts;
151
151
  context.logger.info(`Sending ${txCount} txs`);
152
- return Promise.all(calls.map(call => call.send({ from, wait: NO_WAIT })));
152
+ return Promise.all(
153
+ calls.map(async call => {
154
+ const { txHash } = await call.send({ from, wait: NO_WAIT });
155
+ return txHash;
156
+ }),
157
+ );
153
158
  }
154
159
 
155
160
  export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
@@ -107,20 +107,24 @@ export class BlacklistTokenContractTest {
107
107
  await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
108
108
 
109
109
  this.logger.verbose(`Deploying TokenContract...`);
110
- this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
110
+ ({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
111
111
  from: this.adminAddress,
112
- });
112
+ }));
113
113
  this.logger.verbose(`Token deployed to ${this.asset.address}`);
114
114
 
115
115
  this.logger.verbose(`Deploying bad account...`);
116
- this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress });
116
+ ({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
117
+ from: this.adminAddress,
118
+ }));
117
119
  this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
118
120
 
119
121
  // Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
120
122
  // (so their notes are in scope), but msg_sender in the target must differ from the note owner
121
123
  // to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
122
124
  this.logger.verbose(`Deploying generic proxy...`);
123
- this.authwitProxy = await GenericProxyContract.deploy(this.wallet).send({ from: this.adminAddress });
125
+ ({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
126
+ from: this.adminAddress,
127
+ }));
124
128
  this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
125
129
 
126
130
  await this.crossTimestampOfChange();
@@ -133,9 +137,9 @@ export class BlacklistTokenContractTest {
133
137
  [this.adminAddress, this.otherAddress, this.blacklistedAddress],
134
138
  );
135
139
 
136
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
137
- new Role().withAdmin().toNoirStruct(),
138
- );
140
+ expect(
141
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
142
+ ).toEqual(new Role().withAdmin().toNoirStruct());
139
143
  }
140
144
 
141
145
  async setup() {
@@ -189,9 +193,9 @@ export class BlacklistTokenContractTest {
189
193
 
190
194
  await this.crossTimestampOfChange();
191
195
 
192
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
193
- adminMinterRole.toNoirStruct(),
194
- );
196
+ expect(
197
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
198
+ ).toEqual(adminMinterRole.toNoirStruct());
195
199
 
196
200
  this.logger.verbose(`Minting ${amount} publicly...`);
197
201
  await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
@@ -199,7 +203,7 @@ export class BlacklistTokenContractTest {
199
203
  this.logger.verbose(`Minting ${amount} privately...`);
200
204
  const secret = Fr.random();
201
205
  const secretHash = await computeSecretHash(secret);
202
- const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
206
+ const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
203
207
 
204
208
  await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
205
209
  await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
@@ -207,20 +211,20 @@ export class BlacklistTokenContractTest {
207
211
 
208
212
  tokenSim.mintPublic(this.adminAddress, amount);
209
213
 
210
- const publicBalance = await asset.methods
214
+ const { result: publicBalance } = await asset.methods
211
215
  .balance_of_public(this.adminAddress)
212
216
  .simulate({ from: this.adminAddress });
213
217
  this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
214
218
  expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
215
219
 
216
220
  tokenSim.mintPrivate(this.adminAddress, amount);
217
- const privateBalance = await asset.methods
221
+ const { result: privateBalance } = await asset.methods
218
222
  .balance_of_private(this.adminAddress)
219
223
  .simulate({ from: this.adminAddress });
220
224
  this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
221
225
  expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
222
226
 
223
- const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
227
+ const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
224
228
  this.logger.verbose(`Total supply: ${totalSupply}`);
225
229
  expect(totalSupply).toEqual(tokenSim.totalSupply);
226
230
  }
@@ -28,6 +28,7 @@ import { type SequencerClient, type SequencerEvents, SequencerState } from '@azt
28
28
  import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
29
29
  import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
30
30
  import { tryStop } from '@aztec/stdlib/interfaces/server';
31
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
31
32
 
32
33
  import { join } from 'path';
33
34
  import type { Hex } from 'viem';
@@ -181,6 +182,7 @@ export class EpochsTestContext {
181
182
  ethereumSlotDuration,
182
183
  proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
183
184
  targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
185
+ rollupManaLimit: Number(await this.rollup.getManaLimit()),
184
186
  };
185
187
 
186
188
  this.logger.info(
@@ -237,13 +239,21 @@ export class EpochsTestContext {
237
239
 
238
240
  public createValidatorNode(
239
241
  privateKeys: `0x${string}`[],
240
- opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {},
242
+ opts: Partial<AztecNodeConfig> & {
243
+ dontStartSequencer?: boolean;
244
+ slashingProtectionDb?: SlashingProtectionDatabase;
245
+ } = {},
241
246
  ) {
242
247
  this.logger.warn('Creating and syncing a validator node...');
243
248
  return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
244
249
  }
245
250
 
246
- private async createNode(opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {}) {
251
+ private async createNode(
252
+ opts: Partial<AztecNodeConfig> & {
253
+ dontStartSequencer?: boolean;
254
+ slashingProtectionDb?: SlashingProtectionDatabase;
255
+ } = {},
256
+ ) {
247
257
  const nodeIndex = this.nodes.length + 1;
248
258
  const actorPrefix = opts.disableValidator ? 'node' : 'validator';
249
259
  const { mockGossipSubNetwork } = this.context;
@@ -256,6 +266,7 @@ export class EpochsTestContext {
256
266
  ...resolvedConfig,
257
267
  dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
258
268
  validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
269
+ nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
259
270
  p2pEnabled,
260
271
  p2pIp,
261
272
  },
@@ -264,6 +275,7 @@ export class EpochsTestContext {
264
275
  p2pClientDeps: {
265
276
  p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
266
277
  },
278
+ slashingProtectionDb: opts.slashingProtectionDb,
267
279
  },
268
280
  {
269
281
  prefilledPublicData: this.context.prefilledPublicData,
@@ -1,7 +1,7 @@
1
1
  import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
- import { CheatCodes } from '@aztec/aztec/testing';
4
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
5
5
  import { createExtendedL1Client } from '@aztec/ethereum/client';
6
6
  import { RollupContract } from '@aztec/ethereum/contracts';
7
7
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -104,12 +104,15 @@ export class FeesTest {
104
104
 
105
105
  async setup() {
106
106
  this.logger.verbose('Setting up fresh context...');
107
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
108
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
107
109
  this.context = await setup(0, {
108
110
  startProverNode: true,
109
111
  ...this.setupOptions,
110
112
  fundSponsoredFPC: true,
111
113
  skipAccountDeployment: true,
112
114
  l1ContractsArgs: { ...this.setupOptions },
115
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
113
116
  });
114
117
 
115
118
  this.rollupContract = RollupContract.getFromConfig(this.context.config);
@@ -157,11 +160,15 @@ export class FeesTest {
157
160
 
158
161
  /** Alice mints bananaCoin tokens privately to the target address and redeems them. */
159
162
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
160
- const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
163
+ const { result: balanceBefore } = await this.bananaCoin.methods
164
+ .balance_of_private(address)
165
+ .simulate({ from: address });
161
166
 
162
167
  await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
163
168
 
164
- const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
169
+ const { result: balanceAfter } = await this.bananaCoin.methods
170
+ .balance_of_private(address)
171
+ .simulate({ from: address });
165
172
  expect(balanceAfter).toEqual(balanceBefore + amount);
166
173
  }
167
174
 
@@ -223,7 +230,7 @@ export class FeesTest {
223
230
  async applyDeployBananaToken() {
224
231
  this.logger.info('Applying deploy banana token setup');
225
232
 
226
- const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
233
+ const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
227
234
  from: this.aliceAddress,
228
235
  });
229
236
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
@@ -244,7 +251,7 @@ export class FeesTest {
244
251
  expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
245
252
 
246
253
  const bananaCoin = this.bananaCoin;
247
- const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
254
+ const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
248
255
  from: this.aliceAddress,
249
256
  });
250
257
 
@@ -65,9 +65,11 @@ export class NestedContractTest {
65
65
 
66
66
  async applyManual() {
67
67
  this.logger.info('Deploying parent and child contracts');
68
- const parentContract = await ParentContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
69
- const childContract = await ChildContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
70
- this.parentContract = parentContract;
71
- this.childContract = childContract;
68
+ ({ contract: this.parentContract } = await ParentContract.deploy(this.wallet).send({
69
+ from: this.defaultAccountAddress,
70
+ }));
71
+ ({ contract: this.childContract } = await ChildContract.deploy(this.wallet).send({
72
+ from: this.defaultAccountAddress,
73
+ }));
72
74
  }
73
75
  }
@@ -59,7 +59,7 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
59
59
  export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
60
60
  aztecSlotDuration: 12,
61
61
  ethereumSlotDuration: 4,
62
- aztecProofSubmissionWindow: 640,
62
+ aztecProofSubmissionEpochs: 640,
63
63
  };
64
64
 
65
65
  export class P2PNetworkTest {
@@ -323,8 +323,9 @@ export class P2PNetworkTest {
323
323
  throw new Error('Call setupAccount before deploying spam contract');
324
324
  }
325
325
 
326
- const spamContract = await SpamContract.deploy(this.wallet).send({ from: this.defaultAccountAddress! });
327
- this.spamContract = spamContract;
326
+ ({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
327
+ from: this.defaultAccountAddress!,
328
+ }));
328
329
  }
329
330
 
330
331
  async removeInitialNode() {
@@ -407,6 +408,7 @@ export class P2PNetworkTest {
407
408
  expectedNodeCount?: number,
408
409
  timeoutSeconds = 30,
409
410
  checkIntervalSeconds = 0.1,
411
+ topics: TopicType[] = [TopicType.tx],
410
412
  ) {
411
413
  const nodeCount = expectedNodeCount ?? nodes.length;
412
414
  const minPeerCount = nodeCount - 1;
@@ -433,26 +435,28 @@ export class P2PNetworkTest {
433
435
 
434
436
  this.logger.warn('All nodes connected to P2P mesh');
435
437
 
436
- // Wait for GossipSub mesh to form for the tx topic.
438
+ // Wait for GossipSub mesh to form for all specified topics.
437
439
  // We only require at least 1 mesh peer per node because GossipSub
438
440
  // stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
439
- this.logger.warn('Waiting for GossipSub mesh to form for tx topic...');
440
- await Promise.all(
441
- nodes.map(async (node, index) => {
442
- const p2p = node.getP2P();
443
- await retryUntil(
444
- async () => {
445
- const meshPeers = await p2p.getGossipMeshPeerCount(TopicType.tx);
446
- this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for tx topic`);
447
- return meshPeers >= 1 ? true : undefined;
448
- },
449
- `Node ${index} to have gossip mesh peers for tx topic`,
450
- timeoutSeconds,
451
- checkIntervalSeconds,
452
- );
453
- }),
454
- );
455
- this.logger.warn('All nodes have gossip mesh peers for tx topic');
441
+ for (const topic of topics) {
442
+ this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
443
+ await Promise.all(
444
+ nodes.map(async (node, index) => {
445
+ const p2p = node.getP2P();
446
+ await retryUntil(
447
+ async () => {
448
+ const meshPeers = await p2p.getGossipMeshPeerCount(topic);
449
+ this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
450
+ return meshPeers >= 1 ? true : undefined;
451
+ },
452
+ `Node ${index} to have gossip mesh peers for ${topic} topic`,
453
+ timeoutSeconds,
454
+ checkIntervalSeconds,
455
+ );
456
+ }),
457
+ );
458
+ this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
459
+ }
456
460
  }
457
461
 
458
462
  async teardown() {