@aztec/end-to-end 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.77.0-testnet-ignition.17

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 (138) hide show
  1. package/README.md +2 -0
  2. package/dest/bench/utils.d.ts +70 -0
  3. package/dest/bench/utils.d.ts.map +1 -0
  4. package/dest/bench/utils.js +24 -8
  5. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +46 -0
  6. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -0
  7. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +17 -17
  8. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +47 -0
  9. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -0
  10. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +27 -16
  11. package/dest/e2e_deploy_contract/deploy_test.d.ts +28 -0
  12. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -0
  13. package/dest/e2e_deploy_contract/deploy_test.js +4 -7
  14. package/dest/e2e_epochs/epochs_test.d.ts +51 -0
  15. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -0
  16. package/dest/e2e_epochs/epochs_test.js +155 -0
  17. package/dest/e2e_fees/fees_test.d.ts +73 -0
  18. package/dest/e2e_fees/fees_test.d.ts.map +1 -0
  19. package/dest/e2e_fees/fees_test.js +75 -32
  20. package/dest/e2e_nested_contract/nested_contract_test.d.ts +26 -0
  21. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -0
  22. package/dest/e2e_nested_contract/nested_contract_test.js +14 -12
  23. package/dest/e2e_p2p/p2p_network.d.ts +61 -0
  24. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -0
  25. package/dest/e2e_p2p/p2p_network.js +54 -30
  26. package/dest/e2e_p2p/shared.d.ts +10 -0
  27. package/dest/e2e_p2p/shared.d.ts.map +1 -0
  28. package/dest/e2e_p2p/shared.js +7 -8
  29. package/dest/e2e_prover/e2e_prover_test.d.ts +56 -0
  30. package/dest/e2e_prover/e2e_prover_test.d.ts.map +1 -0
  31. package/dest/e2e_prover/e2e_prover_test.js +20 -24
  32. package/dest/e2e_token_contract/token_contract_test.d.ts +29 -0
  33. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -0
  34. package/dest/e2e_token_contract/token_contract_test.js +4 -7
  35. package/dest/fixtures/fixtures.d.ts +17 -0
  36. package/dest/fixtures/fixtures.d.ts.map +1 -0
  37. package/dest/fixtures/fixtures.js +2 -2
  38. package/dest/fixtures/get_acvm_config.d.ts +8 -0
  39. package/dest/fixtures/get_acvm_config.d.ts.map +1 -0
  40. package/dest/fixtures/get_acvm_config.js +10 -5
  41. package/dest/fixtures/get_bb_config.d.ts +6 -0
  42. package/dest/fixtures/get_bb_config.d.ts.map +1 -0
  43. package/dest/fixtures/get_bb_config.js +9 -4
  44. package/dest/fixtures/index.d.ts +6 -0
  45. package/dest/fixtures/index.d.ts.map +1 -0
  46. package/dest/fixtures/l1_to_l2_messaging.d.ts +13 -0
  47. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -0
  48. package/dest/fixtures/l1_to_l2_messaging.js +1 -1
  49. package/dest/fixtures/logging.d.ts +8 -0
  50. package/dest/fixtures/logging.d.ts.map +1 -0
  51. package/dest/fixtures/setup_l1_contracts.d.ts +6 -0
  52. package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -0
  53. package/dest/fixtures/setup_l1_contracts.js +6 -4
  54. package/dest/fixtures/setup_p2p_test.d.ts +22 -0
  55. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -0
  56. package/dest/fixtures/setup_p2p_test.js +5 -3
  57. package/dest/fixtures/snapshot_manager.d.ts +87 -0
  58. package/dest/fixtures/snapshot_manager.d.ts.map +1 -0
  59. package/dest/fixtures/snapshot_manager.js +67 -74
  60. package/dest/fixtures/token_utils.d.ts +6 -0
  61. package/dest/fixtures/token_utils.d.ts.map +1 -0
  62. package/dest/fixtures/token_utils.js +1 -1
  63. package/dest/fixtures/utils.d.ts +155 -0
  64. package/dest/fixtures/utils.d.ts.map +1 -0
  65. package/dest/fixtures/utils.js +97 -71
  66. package/dest/fixtures/with_telemetry_utils.d.ts +3 -0
  67. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -0
  68. package/dest/index.d.ts +2 -0
  69. package/dest/index.d.ts.map +1 -0
  70. package/dest/quality_of_service/alert_checker.d.ts +41 -0
  71. package/dest/quality_of_service/alert_checker.d.ts.map +1 -0
  72. package/dest/quality_of_service/alert_checker.js +4 -1
  73. package/dest/sample-dapp/index.js +1 -1
  74. package/dest/shared/cross_chain_test_harness.d.ts +124 -0
  75. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -0
  76. package/dest/shared/cross_chain_test_harness.js +6 -17
  77. package/dest/shared/gas_portal_test_harness.d.ts +80 -0
  78. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -0
  79. package/dest/shared/gas_portal_test_harness.js +11 -4
  80. package/dest/shared/index.d.ts +2 -0
  81. package/dest/shared/index.d.ts.map +1 -0
  82. package/dest/shared/index.js +0 -1
  83. package/dest/shared/jest_setup.d.ts +2 -0
  84. package/dest/shared/jest_setup.d.ts.map +1 -0
  85. package/dest/shared/submit-transactions.d.ts +4 -0
  86. package/dest/shared/submit-transactions.d.ts.map +1 -0
  87. package/dest/shared/submit-transactions.js +9 -17
  88. package/dest/shared/uniswap_l1_l2.d.ts +25 -0
  89. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -0
  90. package/dest/shared/uniswap_l1_l2.js +5 -10
  91. package/dest/simulators/index.d.ts +3 -0
  92. package/dest/simulators/index.d.ts.map +1 -0
  93. package/dest/simulators/lending_simulator.d.ts +69 -0
  94. package/dest/simulators/lending_simulator.d.ts.map +1 -0
  95. package/dest/simulators/lending_simulator.js +1 -3
  96. package/dest/simulators/token_simulator.d.ts +29 -0
  97. package/dest/simulators/token_simulator.d.ts.map +1 -0
  98. package/dest/spartan/setup_test_wallets.d.ts +20 -0
  99. package/dest/spartan/setup_test_wallets.d.ts.map +1 -0
  100. package/dest/spartan/setup_test_wallets.js +72 -38
  101. package/dest/spartan/utils.d.ts +485 -0
  102. package/dest/spartan/utils.d.ts.map +1 -0
  103. package/dest/spartan/utils.js +110 -2
  104. package/package.json +35 -40
  105. package/src/bench/utils.ts +30 -13
  106. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +40 -30
  107. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +34 -18
  108. package/src/e2e_deploy_contract/deploy_test.ts +6 -11
  109. package/src/e2e_epochs/epochs_test.ts +217 -0
  110. package/src/e2e_fees/fees_test.ts +84 -38
  111. package/src/e2e_nested_contract/nested_contract_test.ts +14 -16
  112. package/src/e2e_p2p/p2p_network.ts +67 -47
  113. package/src/e2e_p2p/shared.ts +16 -10
  114. package/src/e2e_prover/e2e_prover_test.ts +56 -37
  115. package/src/e2e_token_contract/token_contract_test.ts +10 -11
  116. package/src/fixtures/fixtures.ts +2 -2
  117. package/src/fixtures/get_acvm_config.ts +7 -3
  118. package/src/fixtures/get_bb_config.ts +6 -2
  119. package/src/fixtures/l1_to_l2_messaging.ts +6 -13
  120. package/src/fixtures/setup_l1_contracts.ts +8 -7
  121. package/src/fixtures/setup_p2p_test.ts +8 -6
  122. package/src/fixtures/snapshot_manager.ts +72 -79
  123. package/src/fixtures/token_utils.ts +2 -2
  124. package/src/fixtures/utils.ts +135 -97
  125. package/src/guides/up_quick_start.sh +10 -5
  126. package/src/quality_of_service/alert_checker.ts +6 -2
  127. package/src/sample-dapp/index.mjs +1 -1
  128. package/src/shared/cross_chain_test_harness.ts +17 -35
  129. package/src/shared/gas_portal_test_harness.ts +21 -11
  130. package/src/shared/index.ts +0 -1
  131. package/src/shared/submit-transactions.ts +16 -20
  132. package/src/shared/uniswap_l1_l2.ts +35 -26
  133. package/src/simulators/lending_simulator.ts +5 -6
  134. package/src/simulators/token_simulator.ts +1 -1
  135. package/src/spartan/setup_test_wallets.ts +111 -37
  136. package/src/spartan/utils.ts +88 -3
  137. package/dest/shared/browser.js +0 -163
  138. package/src/shared/browser.ts +0 -272
@@ -6,11 +6,27 @@ import { z } from 'zod';
6
6
  import { AlertChecker } from '../quality_of_service/alert_checker.js';
7
7
  const execAsync = promisify(exec);
8
8
  const logger = createLogger('e2e:k8s-utils');
9
+ const ethereumHostsSchema = z.string().refine((str)=>str.split(',').every((url)=>{
10
+ try {
11
+ new URL(url.trim());
12
+ return true;
13
+ } catch {
14
+ return false;
15
+ }
16
+ }), 'ETHEREUM_HOSTS must be a comma-separated list of valid URLs');
9
17
  const k8sLocalConfigSchema = z.object({
18
+ ETHEREUM_SLOT_DURATION: z.coerce.number().min(1, 'ETHEREUM_SLOT_DURATION env variable must be set'),
19
+ AZTEC_SLOT_DURATION: z.coerce.number().min(1, 'AZTEC_SLOT_DURATION env variable must be set'),
20
+ AZTEC_EPOCH_DURATION: z.coerce.number().min(1, 'AZTEC_EPOCH_DURATION env variable must be set'),
21
+ AZTEC_PROOF_SUBMISSION_WINDOW: z.coerce.number().min(1, 'AZTEC_PROOF_SUBMISSION_WINDOW env variable must be set'),
10
22
  INSTANCE_NAME: z.string().min(1, 'INSTANCE_NAME env variable must be set'),
11
23
  NAMESPACE: z.string().min(1, 'NAMESPACE env variable must be set'),
12
24
  HOST_NODE_PORT: z.coerce.number().min(1, 'HOST_NODE_PORT env variable must be set'),
13
25
  CONTAINER_NODE_PORT: z.coerce.number().default(8080),
26
+ HOST_SEQUENCER_PORT: z.coerce.number().min(1, 'HOST_SEQUENCER_PORT env variable must be set'),
27
+ CONTAINER_SEQUENCER_PORT: z.coerce.number().default(8080),
28
+ HOST_PROVER_NODE_PORT: z.coerce.number().min(1, 'HOST_PROVER_NODE_PORT env variable must be set'),
29
+ CONTAINER_PROVER_NODE_PORT: z.coerce.number().default(8080),
14
30
  HOST_PXE_PORT: z.coerce.number().min(1, 'HOST_PXE_PORT env variable must be set'),
15
31
  CONTAINER_PXE_PORT: z.coerce.number().default(8080),
16
32
  HOST_ETHEREUM_PORT: z.coerce.number().min(1, 'HOST_ETHEREUM_PORT env variable must be set'),
@@ -20,6 +36,9 @@ const k8sLocalConfigSchema = z.object({
20
36
  GRAFANA_PASSWORD: z.string().optional(),
21
37
  METRICS_API_PATH: z.string().default('/api/datasources/proxy/uid/spartan-metrics-prometheus/api/v1'),
22
38
  SPARTAN_DIR: z.string().min(1, 'SPARTAN_DIR env variable must be set'),
39
+ ETHEREUM_HOSTS: ethereumHostsSchema.optional(),
40
+ L1_ACCOUNT_MNEMONIC: z.string().default('test test test test test test test test test test test junk'),
41
+ SEPOLIA_RUN: z.string().default('false'),
23
42
  K8S: z.literal('local')
24
43
  });
25
44
  const k8sGCloudConfigSchema = k8sLocalConfigSchema.extend({
@@ -30,7 +49,7 @@ const k8sGCloudConfigSchema = k8sLocalConfigSchema.extend({
30
49
  const directConfigSchema = z.object({
31
50
  PXE_URL: z.string().url('PXE_URL must be a valid URL'),
32
51
  NODE_URL: z.string().url('NODE_URL must be a valid URL'),
33
- ETHEREUM_HOST: z.string().url('ETHEREUM_HOST must be a valid URL'),
52
+ ETHEREUM_HOSTS: ethereumHostsSchema,
34
53
  K8S: z.literal('false')
35
54
  });
36
55
  const envSchema = z.discriminatedUnion('K8S', [
@@ -86,7 +105,7 @@ export async function startPortForward({ resource, namespace, containerPort, hos
86
105
  if (str.includes('Starting port forward')) {
87
106
  logger.info(str);
88
107
  } else {
89
- logger.debug(str);
108
+ logger.silent(str);
90
109
  }
91
110
  });
92
111
  process.stderr?.on('data', (data)=>{
@@ -196,6 +215,26 @@ export function applyProverFailure({ namespace, spartanDir, durationSeconds, log
196
215
  logger
197
216
  });
198
217
  }
218
+ export function applyProverKill({ namespace, spartanDir, logger }) {
219
+ return installChaosMeshChart({
220
+ instanceName: 'prover-kill',
221
+ targetNamespace: namespace,
222
+ valuesFile: 'prover-kill.yaml',
223
+ helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
224
+ clean: true,
225
+ logger
226
+ });
227
+ }
228
+ export function applyProverBrokerKill({ namespace, spartanDir, logger }) {
229
+ return installChaosMeshChart({
230
+ instanceName: 'prover-broker-kill',
231
+ targetNamespace: namespace,
232
+ valuesFile: 'prover-broker-kill.yaml',
233
+ helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
234
+ clean: true,
235
+ logger
236
+ });
237
+ }
199
238
  export function applyBootNodeFailure({ namespace, spartanDir, durationSeconds, logger }) {
200
239
  return installChaosMeshChart({
201
240
  instanceName: 'boot-node-failure',
@@ -317,3 +356,72 @@ export async function updateSequencersConfig(env, config) {
317
356
  await updateSequencerConfig(env.NODE_URL, config);
318
357
  }
319
358
  }
359
+ /**
360
+ * Rolls the Aztec pods in the given namespace.
361
+ * @param namespace - The namespace to roll the Aztec pods in.
362
+ * @dev - IMPORTANT: This function DOES NOT delete the underlying PVCs.
363
+ * This means that the pods will be restarted with the same persistent storage.
364
+ * This is useful for testing, but you should be aware of the implications.
365
+ */ export async function rollAztecPods(namespace) {
366
+ await deleteResourceByLabel({
367
+ resource: 'pods',
368
+ namespace: namespace,
369
+ label: 'app=boot-node'
370
+ });
371
+ await deleteResourceByLabel({
372
+ resource: 'pods',
373
+ namespace: namespace,
374
+ label: 'app=prover-node'
375
+ });
376
+ await deleteResourceByLabel({
377
+ resource: 'pods',
378
+ namespace: namespace,
379
+ label: 'app=prover-broker'
380
+ });
381
+ await deleteResourceByLabel({
382
+ resource: 'pods',
383
+ namespace: namespace,
384
+ label: 'app=prover-agent'
385
+ });
386
+ await deleteResourceByLabel({
387
+ resource: 'pods',
388
+ namespace: namespace,
389
+ label: 'app=validator'
390
+ });
391
+ await deleteResourceByLabel({
392
+ resource: 'pods',
393
+ namespace: namespace,
394
+ label: 'app=pxe'
395
+ });
396
+ await sleep(10 * 1000);
397
+ await waitForResourceByLabel({
398
+ resource: 'pods',
399
+ namespace: namespace,
400
+ label: 'app=boot-node'
401
+ });
402
+ await waitForResourceByLabel({
403
+ resource: 'pods',
404
+ namespace: namespace,
405
+ label: 'app=prover-node'
406
+ });
407
+ await waitForResourceByLabel({
408
+ resource: 'pods',
409
+ namespace: namespace,
410
+ label: 'app=prover-broker'
411
+ });
412
+ await waitForResourceByLabel({
413
+ resource: 'pods',
414
+ namespace: namespace,
415
+ label: 'app=prover-agent'
416
+ });
417
+ await waitForResourceByLabel({
418
+ resource: 'pods',
419
+ namespace: namespace,
420
+ label: 'app=validator'
421
+ });
422
+ await waitForResourceByLabel({
423
+ resource: 'pods',
424
+ namespace: namespace,
425
+ label: 'app=pxe'
426
+ });
427
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
3
+ "version": "0.77.0-testnet-ignition.17",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -8,8 +8,7 @@
8
8
  "./package.local.json"
9
9
  ],
10
10
  "scripts": {
11
- "build": "yarn clean && tsc -b && webpack",
12
- "build:e2e": "yarn clean && tsc -b",
11
+ "build": "yarn clean && tsc -b",
13
12
  "build:dev": "tsc -b --watch",
14
13
  "clean": "rm -rf ./dest .tsbuildinfo",
15
14
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
@@ -27,36 +26,36 @@
27
26
  "formatting": "run -T prettier --check ./src && run -T eslint ./src"
28
27
  },
29
28
  "dependencies": {
30
- "@aztec/accounts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
31
- "@aztec/archiver": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
32
- "@aztec/aztec-node": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
33
- "@aztec/aztec.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
34
- "@aztec/bb-prover": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
35
- "@aztec/blob-lib": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
36
- "@aztec/blob-sink": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
37
- "@aztec/bot": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
38
- "@aztec/circuit-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
39
- "@aztec/circuits.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
40
- "@aztec/entrypoints": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
41
- "@aztec/epoch-cache": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
42
- "@aztec/ethereum": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
43
- "@aztec/foundation": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
44
- "@aztec/kv-store": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
45
- "@aztec/l1-artifacts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
46
- "@aztec/merkle-tree": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
47
- "@aztec/noir-contracts.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
48
- "@aztec/noir-protocol-circuits-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
49
- "@aztec/p2p": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
50
- "@aztec/protocol-contracts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
51
- "@aztec/prover-client": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
52
- "@aztec/prover-node": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
53
- "@aztec/pxe": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
54
- "@aztec/sequencer-client": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
55
- "@aztec/simulator": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
56
- "@aztec/telemetry-client": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
57
- "@aztec/types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
58
- "@aztec/validator-client": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
59
- "@aztec/world-state": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
29
+ "@aztec/accounts": "0.77.0-testnet-ignition.17",
30
+ "@aztec/archiver": "0.77.0-testnet-ignition.17",
31
+ "@aztec/aztec": "0.77.0-testnet-ignition.17",
32
+ "@aztec/aztec-node": "0.77.0-testnet-ignition.17",
33
+ "@aztec/aztec.js": "0.77.0-testnet-ignition.17",
34
+ "@aztec/bb-prover": "0.77.0-testnet-ignition.17",
35
+ "@aztec/blob-lib": "0.77.0-testnet-ignition.17",
36
+ "@aztec/blob-sink": "0.77.0-testnet-ignition.17",
37
+ "@aztec/bot": "0.77.0-testnet-ignition.17",
38
+ "@aztec/constants": "0.77.0-testnet-ignition.17",
39
+ "@aztec/entrypoints": "0.77.0-testnet-ignition.17",
40
+ "@aztec/epoch-cache": "0.77.0-testnet-ignition.17",
41
+ "@aztec/ethereum": "0.77.0-testnet-ignition.17",
42
+ "@aztec/foundation": "0.77.0-testnet-ignition.17",
43
+ "@aztec/kv-store": "0.77.0-testnet-ignition.17",
44
+ "@aztec/l1-artifacts": "0.77.0-testnet-ignition.17",
45
+ "@aztec/merkle-tree": "0.77.0-testnet-ignition.17",
46
+ "@aztec/noir-contracts.js": "0.77.0-testnet-ignition.17",
47
+ "@aztec/noir-protocol-circuits-types": "0.77.0-testnet-ignition.17",
48
+ "@aztec/p2p": "0.77.0-testnet-ignition.17",
49
+ "@aztec/protocol-contracts": "0.77.0-testnet-ignition.17",
50
+ "@aztec/prover-client": "0.77.0-testnet-ignition.17",
51
+ "@aztec/prover-node": "0.77.0-testnet-ignition.17",
52
+ "@aztec/pxe": "0.77.0-testnet-ignition.17",
53
+ "@aztec/sequencer-client": "0.77.0-testnet-ignition.17",
54
+ "@aztec/simulator": "0.77.0-testnet-ignition.17",
55
+ "@aztec/stdlib": "0.77.0-testnet-ignition.17",
56
+ "@aztec/telemetry-client": "0.77.0-testnet-ignition.17",
57
+ "@aztec/validator-client": "0.77.0-testnet-ignition.17",
58
+ "@aztec/world-state": "0.77.0-testnet-ignition.17",
60
59
  "@iarna/toml": "^2.2.5",
61
60
  "@jest/globals": "^29.5.0",
62
61
  "@noble/curves": "^1.0.0",
@@ -85,6 +84,7 @@
85
84
  "lodash.chunk": "^4.2.0",
86
85
  "lodash.compact": "^3.0.1",
87
86
  "lodash.every": "^4.6.0",
87
+ "lodash.omit": "^4.5.0",
88
88
  "memdown": "^6.1.1",
89
89
  "process": "^0.11.10",
90
90
  "stream-browserify": "^3.0.0",
@@ -145,19 +145,14 @@
145
145
  ]
146
146
  },
147
147
  "reporters": [
148
- [
149
- "summary",
150
- {
151
- "summaryThreshold": 0
152
- }
153
- ]
148
+ "default"
154
149
  ],
155
150
  "moduleNameMapper": {
156
151
  "^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
157
152
  },
158
153
  "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
159
154
  "rootDir": "./src",
160
- "testTimeout": 30000,
155
+ "testTimeout": 120000,
161
156
  "setupFiles": [
162
157
  "../../foundation/src/jest/setup.mjs"
163
158
  ]
@@ -1,15 +1,11 @@
1
- import { type AztecNodeService } from '@aztec/aztec-node';
1
+ import type { AztecNodeService } from '@aztec/aztec-node';
2
2
  import { type AztecNode, BatchCall, INITIAL_L2_BLOCK_NUM, type SentTx, type WaitOpts } from '@aztec/aztec.js';
3
3
  import { mean, stdDev, timesParallel } from '@aztec/foundation/collection';
4
4
  import { randomInt } from '@aztec/foundation/crypto';
5
5
  import { BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking';
6
6
  import { type PXEService, type PXEServiceConfig, createPXEService } from '@aztec/pxe';
7
- import { type MetricsType } from '@aztec/telemetry-client';
8
- import {
9
- type BenchmarkDataPoint,
10
- type BenchmarkMetricsType,
11
- type BenchmarkTelemetryClient,
12
- } from '@aztec/telemetry-client/bench';
7
+ import type { MetricsType } from '@aztec/telemetry-client';
8
+ import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
13
9
 
14
10
  import { writeFileSync } from 'fs';
15
11
  import { mkdirpSync } from 'fs-extra';
@@ -127,15 +123,27 @@ export function getFolderSize(path: string): number {
127
123
  * @param index - Index of the call within a block.
128
124
  * @param context - End to end context.
129
125
  * @param contract - Benchmarking contract.
126
+ * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
130
127
  * @returns A BatchCall instance.
131
128
  */
132
- export async function makeCall(index: number, context: EndToEndContext, contract: BenchmarkingContract) {
129
+ export async function makeCall(
130
+ index: number,
131
+ context: EndToEndContext,
132
+ contract: BenchmarkingContract,
133
+ heavyPublicCompute: boolean,
134
+ ) {
133
135
  const owner = context.wallet.getAddress();
134
136
  const sender = owner;
135
- return new BatchCall(context.wallet, [
136
- await contract.methods.create_note(owner, sender, index + 1).request(),
137
- await contract.methods.increment_balance(owner, index + 1).request(),
138
- ]);
137
+ if (heavyPublicCompute) {
138
+ return new BatchCall(context.wallet, [
139
+ await contract.methods.sha256_hash_2048(randomBytesAsBigInts(2048)).request(),
140
+ ]);
141
+ } else {
142
+ return new BatchCall(context.wallet, [
143
+ await contract.methods.create_note(owner, sender, index + 1).request(),
144
+ await contract.methods.increment_balance(owner, index + 1).request(),
145
+ ]);
146
+ }
139
147
  }
140
148
 
141
149
  /**
@@ -144,14 +152,16 @@ export async function makeCall(index: number, context: EndToEndContext, contract
144
152
  * @param txCount - How many txs to send
145
153
  * @param context - End to end context.
146
154
  * @param contract - Target contract.
155
+ * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
147
156
  * @returns Array of sent txs.
148
157
  */
149
158
  export async function sendTxs(
150
159
  txCount: number,
151
160
  context: EndToEndContext,
152
161
  contract: BenchmarkingContract,
162
+ heavyPublicCompute: boolean = false,
153
163
  ): Promise<SentTx[]> {
154
- const calls = await timesParallel(txCount, index => makeCall(index, context, contract));
164
+ const calls = await timesParallel(txCount, index => makeCall(index, context, contract, heavyPublicCompute));
155
165
  context.logger.info(`Creating ${txCount} txs`);
156
166
  const provenTxs = await Promise.all(calls.map(call => call.prove({ skipPublicSimulation: true })));
157
167
  context.logger.info(`Sending ${txCount} txs`);
@@ -177,14 +187,21 @@ export async function createNewPXE(
177
187
  startingBlock: number = INITIAL_L2_BLOCK_NUM,
178
188
  ): Promise<PXEService> {
179
189
  const l1Contracts = await node.getL1ContractAddresses();
190
+ const { l1ChainId, protocolVersion } = await node.getNodeInfo();
180
191
  const pxeConfig = {
181
192
  l2StartingBlock: startingBlock,
182
193
  l2BlockPollingIntervalMS: 100,
183
194
  dataDirectory: undefined,
184
195
  dataStoreMapSizeKB: 1024 * 1024,
185
196
  l1Contracts,
197
+ l1ChainId,
198
+ version: protocolVersion,
186
199
  } as PXEServiceConfig;
187
200
  const pxe = await createPXEService(node, pxeConfig);
188
201
  await pxe.registerContract(contract);
189
202
  return pxe;
190
203
  }
204
+
205
+ function randomBytesAsBigInts(length: number): bigint[] {
206
+ return [...Array(length)].map(_ => BigInt(Math.floor(Math.random() * 255)));
207
+ }
@@ -1,17 +1,16 @@
1
- import { getSchnorrAccount } from '@aztec/accounts/schnorr';
1
+ import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
2
  import {
3
3
  type AccountWallet,
4
4
  type CompleteAddress,
5
- ExtendedNote,
6
5
  Fr,
7
6
  type Logger,
8
- Note,
9
7
  type TxHash,
10
8
  computeSecretHash,
11
9
  createLogger,
12
10
  } from '@aztec/aztec.js';
11
+ import { MAX_NOTE_HASHES_PER_TX } from '@aztec/constants';
13
12
  import { DocsExampleContract } from '@aztec/noir-contracts.js/DocsExample';
14
- import { type TokenContract } from '@aztec/noir-contracts.js/Token';
13
+ import type { TokenContract } from '@aztec/noir-contracts.js/Token';
15
14
  import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
16
15
 
17
16
  import { jest } from '@jest/globals';
@@ -19,8 +18,8 @@ import { jest } from '@jest/globals';
19
18
  import {
20
19
  type ISnapshotManager,
21
20
  type SubsystemsContext,
22
- addAccounts,
23
21
  createSnapshotManager,
22
+ deployAccounts,
24
23
  publicDeployAccounts,
25
24
  } from '../fixtures/snapshot_manager.js';
26
25
  import { TokenSimulator } from '../simulators/token_simulator.js';
@@ -91,18 +90,17 @@ export class BlacklistTokenContractTest {
91
90
  // Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
92
91
  jest.setTimeout(120_000);
93
92
 
94
- await this.snapshotManager.snapshot('3_accounts', addAccounts(3, this.logger), async ({ accountKeys }, { pxe }) => {
95
- this.wallets = await Promise.all(
96
- accountKeys.map(async ak => {
97
- const account = await getSchnorrAccount(pxe, ak[0], ak[1], 1);
98
- return account.getWallet();
99
- }),
100
- );
101
- this.admin = this.wallets[0];
102
- this.other = this.wallets[1];
103
- this.blacklisted = this.wallets[2];
104
- this.accounts = this.wallets.map(w => w.getCompleteAddress());
105
- });
93
+ await this.snapshotManager.snapshot(
94
+ '3_accounts',
95
+ deployAccounts(3, this.logger),
96
+ async ({ deployedAccounts }, { pxe }) => {
97
+ this.wallets = await Promise.all(deployedAccounts.map(a => getSchnorrWallet(pxe, a.address, a.signingKey)));
98
+ this.admin = this.wallets[0];
99
+ this.other = this.wallets[1];
100
+ this.blacklisted = this.wallets[2];
101
+ this.accounts = this.wallets.map(w => w.getCompleteAddress());
102
+ },
103
+ );
106
104
 
107
105
  await this.snapshotManager.snapshot(
108
106
  'e2e_blacklist_token_contract',
@@ -160,24 +158,36 @@ export class BlacklistTokenContractTest {
160
158
  await this.snapshotManager.teardown();
161
159
  }
162
160
 
163
- async addPendingShieldNoteToPXE(accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) {
164
- const note = new Note([new Fr(amount), secretHash]);
165
- const extendedNote = new ExtendedNote(
166
- note,
167
- this.accounts[accountIndex].address,
168
- this.asset.address,
169
- TokenBlacklistContract.storage.pending_shields.slot,
170
- TokenBlacklistContract.notes.TransparentNote.id,
171
- txHash,
172
- );
173
- await this.wallets[accountIndex].addNote(extendedNote);
161
+ #toBoundedVec(arr: Fr[], maxLen: number) {
162
+ return { len: arr.length, storage: arr.concat(new Array(maxLen - arr.length).fill(new Fr(0))) };
163
+ }
164
+
165
+ async addPendingShieldNoteToPXE(
166
+ contract: TokenBlacklistContract,
167
+ wallet: AccountWallet,
168
+ amount: bigint,
169
+ secretHash: Fr,
170
+ txHash: TxHash,
171
+ ) {
172
+ const txEffects = await wallet.getTxEffect(txHash);
173
+ await contract.methods
174
+ .deliver_transparent_note(
175
+ contract.address,
176
+ amount,
177
+ secretHash,
178
+ txHash.hash,
179
+ this.#toBoundedVec(txEffects!.data.noteHashes, MAX_NOTE_HASHES_PER_TX),
180
+ txEffects!.data.nullifiers[0],
181
+ wallet.getAddress(),
182
+ )
183
+ .simulate();
174
184
  }
175
185
 
176
186
  async applyMintSnapshot() {
177
187
  await this.snapshotManager.snapshot(
178
188
  'mint',
179
189
  async () => {
180
- const { asset, accounts } = this;
190
+ const { asset, accounts, wallets } = this;
181
191
  const amount = 10000n;
182
192
 
183
193
  const adminMinterRole = new Role().withAdmin().withMinter();
@@ -208,7 +218,7 @@ export class BlacklistTokenContractTest {
208
218
  const secretHash = await computeSecretHash(secret);
209
219
  const receipt = await asset.methods.mint_private(amount, secretHash).send().wait();
210
220
 
211
- await this.addPendingShieldNoteToPXE(0, amount, secretHash, receipt.txHash);
221
+ await this.addPendingShieldNoteToPXE(asset, wallets[0], amount, secretHash, receipt.txHash);
212
222
  const txClaim = asset.methods.redeem_shield(accounts[0].address, amount, secret).send();
213
223
  await txClaim.wait({ debug: true });
214
224
  this.logger.verbose(`Minting complete.`);
@@ -1,28 +1,29 @@
1
- import { getSchnorrAccount } from '@aztec/accounts/schnorr';
2
- import { type AztecNodeConfig } from '@aztec/aztec-node';
1
+ import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
+ import type { AztecNodeConfig } from '@aztec/aztec-node';
3
3
  import {
4
4
  type AccountWallet,
5
5
  AztecAddress,
6
6
  type AztecNode,
7
+ CheatCodes,
7
8
  type CompleteAddress,
8
9
  EthAddress,
9
10
  type Logger,
10
11
  type PXE,
11
12
  createLogger,
12
13
  } from '@aztec/aztec.js';
13
- import { createL1Clients } from '@aztec/ethereum';
14
- import { InboxAbi, OutboxAbi, RollupAbi } from '@aztec/l1-artifacts';
14
+ import { type ViemPublicClient, createL1Clients, deployL1Contract } from '@aztec/ethereum';
15
+ import { InboxAbi, OutboxAbi, RollupAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
15
16
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
16
17
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
17
18
 
18
- import { type Chain, type HttpTransport, type PublicClient, getContract } from 'viem';
19
+ import { getContract } from 'viem';
19
20
 
20
21
  import { MNEMONIC } from '../fixtures/fixtures.js';
21
22
  import {
22
23
  type ISnapshotManager,
23
24
  type SubsystemsContext,
24
- addAccounts,
25
25
  createSnapshotManager,
26
+ deployAccounts,
26
27
  publicDeployAccounts,
27
28
  } from '../fixtures/snapshot_manager.js';
28
29
  import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
@@ -38,7 +39,7 @@ export class CrossChainMessagingTest {
38
39
  pxe!: PXE;
39
40
  aztecNodeConfig!: AztecNodeConfig;
40
41
 
41
- publicClient!: PublicClient<HttpTransport, Chain> | undefined;
42
+ publicClient!: ViemPublicClient | undefined;
42
43
 
43
44
  user1Wallet!: AccountWallet;
44
45
  user2Wallet!: AccountWallet;
@@ -51,6 +52,7 @@ export class CrossChainMessagingTest {
51
52
  rollup!: any; // GetContractReturnType<typeof RollupAbi> | undefined;
52
53
  inbox!: any; // GetContractReturnType<typeof InboxAbi> | undefined;
53
54
  outbox!: any; // GetContractReturnType<typeof OutboxAbi> | undefined;
55
+ cheatcodes!: CheatCodes;
54
56
 
55
57
  constructor(testName: string) {
56
58
  this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
@@ -58,7 +60,7 @@ export class CrossChainMessagingTest {
58
60
  }
59
61
 
60
62
  async assumeProven() {
61
- await this.rollup.write.setAssumeProvenThroughBlockNumber([await this.rollup.read.getPendingBlockNumber()]);
63
+ await this.cheatcodes.rollup.markAsProven(await this.rollup.read.getPendingBlockNumber());
62
64
  }
63
65
 
64
66
  async setup() {
@@ -66,6 +68,7 @@ export class CrossChainMessagingTest {
66
68
  this.aztecNode = aztecNode;
67
69
  this.pxe = pxe;
68
70
  this.aztecNodeConfig = aztecNodeConfig;
71
+ this.cheatcodes = await CheatCodes.create(this.aztecNodeConfig.l1RpcUrls, this.pxe);
69
72
  }
70
73
 
71
74
  snapshot = <T>(
@@ -84,14 +87,9 @@ export class CrossChainMessagingTest {
84
87
 
85
88
  await this.snapshotManager.snapshot(
86
89
  '3_accounts',
87
- addAccounts(3, this.logger),
88
- async ({ accountKeys }, { pxe, aztecNodeConfig, aztecNode, deployL1ContractsValues }) => {
89
- this.wallets = await Promise.all(
90
- accountKeys.map(async ak => {
91
- const account = await getSchnorrAccount(pxe, ak[0], ak[1], 1);
92
- return account.getWallet();
93
- }),
94
- );
90
+ deployAccounts(3, this.logger),
91
+ async ({ deployedAccounts }, { pxe, aztecNodeConfig, aztecNode, deployL1ContractsValues }) => {
92
+ this.wallets = await Promise.all(deployedAccounts.map(a => getSchnorrWallet(pxe, a.address, a.signingKey)));
95
93
  this.accounts = this.wallets.map(w => w.getCompleteAddress());
96
94
  this.wallets.forEach((w, i) => this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
97
95
 
@@ -118,7 +116,24 @@ export class CrossChainMessagingTest {
118
116
  this.logger.verbose(`Public deploy accounts...`);
119
117
  await publicDeployAccounts(this.wallets[0], this.accounts.slice(0, 3));
120
118
 
121
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrl, MNEMONIC);
119
+ const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
120
+
121
+ const underlyingERC20Address = await deployL1Contract(
122
+ walletClient,
123
+ publicClient,
124
+ TestERC20Abi,
125
+ TestERC20Bytecode,
126
+ ['Underlying', 'UND', walletClient.account.address],
127
+ ).then(({ address }) => address);
128
+
129
+ const underlyingERC20 = getContract({
130
+ address: underlyingERC20Address!.toString(),
131
+ abi: TestERC20Abi,
132
+ client: walletClient,
133
+ });
134
+
135
+ // allow anyone to mint
136
+ await underlyingERC20.write.setFreeForAll([true], {} as any);
122
137
 
123
138
  this.logger.verbose(`Setting up cross chain harness...`);
124
139
  this.crossChainTestHarness = await CrossChainTestHarness.new(
@@ -128,6 +143,7 @@ export class CrossChainMessagingTest {
128
143
  walletClient,
129
144
  this.wallets[0],
130
145
  this.logger,
146
+ underlyingERC20Address,
131
147
  );
132
148
 
133
149
  this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
@@ -143,7 +159,7 @@ export class CrossChainMessagingTest {
143
159
  this.ownerAddress = AztecAddress.fromString(crossChainContext.ownerAddress.toString());
144
160
  const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
145
161
 
146
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrl, MNEMONIC);
162
+ const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
147
163
 
148
164
  const inbox = getContract({
149
165
  address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(),
@@ -1,4 +1,4 @@
1
- import { getSchnorrAccount } from '@aztec/accounts/schnorr';
1
+ import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
2
  import {
3
3
  type AccountWallet,
4
4
  type AztecAddress,
@@ -13,9 +13,9 @@ import {
13
13
  createLogger,
14
14
  getContractInstanceFromDeployParams,
15
15
  } from '@aztec/aztec.js';
16
- import { type StatefulTestContract } from '@aztec/noir-contracts.js/StatefulTest';
16
+ import type { StatefulTestContract } from '@aztec/noir-contracts.js/StatefulTest';
17
17
 
18
- import { type ISnapshotManager, addAccounts, createSnapshotManager } from '../fixtures/snapshot_manager.js';
18
+ import { type ISnapshotManager, createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
19
19
 
20
20
  const { E2E_DATA_PATH: dataPath } = process.env;
21
21
 
@@ -47,14 +47,9 @@ export class DeployTest {
47
47
  private async applyInitialAccountSnapshot() {
48
48
  await this.snapshotManager.snapshot(
49
49
  'initial_account',
50
- addAccounts(1, this.logger),
51
- async ({ accountKeys }, { pxe }) => {
52
- this.wallets = await Promise.all(
53
- accountKeys.map(async ak => {
54
- const account = await getSchnorrAccount(pxe, ak[0], ak[1], 1);
55
- return account.getWallet();
56
- }),
57
- );
50
+ deployAccounts(1, this.logger),
51
+ async ({ deployedAccounts }, { pxe }) => {
52
+ this.wallets = await Promise.all(deployedAccounts.map(a => getSchnorrWallet(pxe, a.address, a.signingKey)));
58
53
  this.wallets.forEach((w, i) => this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
59
54
  this.wallet = this.wallets[0];
60
55
  },