@aztec/end-to-end 4.0.0-nightly.20260113 → 4.0.0-nightly.20260115

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 (80) hide show
  1. package/dest/bench/client_flows/client_flows_benchmark.d.ts +12 -13
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.js +104 -134
  4. package/dest/bench/utils.d.ts +1 -1
  5. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
  6. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  7. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +98 -113
  8. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +6 -7
  9. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  10. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +65 -62
  11. package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
  12. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  13. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  14. package/dest/e2e_epochs/epochs_test.js +1 -1
  15. package/dest/e2e_fees/bridging_race.notest.js +2 -4
  16. package/dest/e2e_fees/fees_test.d.ts +13 -13
  17. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  18. package/dest/e2e_fees/fees_test.js +122 -140
  19. package/dest/e2e_l1_publisher/write_json.d.ts +1 -1
  20. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  21. package/dest/e2e_l1_publisher/write_json.js +1 -0
  22. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  23. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  24. package/dest/e2e_nested_contract/nested_contract_test.js +32 -40
  25. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  26. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  27. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  28. package/dest/e2e_p2p/p2p_network.d.ts +7 -6
  29. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  30. package/dest/e2e_p2p/p2p_network.js +106 -103
  31. package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
  32. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  33. package/dest/e2e_token_contract/token_contract_test.js +90 -92
  34. package/dest/fixtures/e2e_prover_test.d.ts +8 -14
  35. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  36. package/dest/fixtures/e2e_prover_test.js +82 -93
  37. package/dest/fixtures/setup.d.ts +216 -0
  38. package/dest/fixtures/setup.d.ts.map +1 -0
  39. package/dest/fixtures/setup.js +683 -0
  40. package/dest/fixtures/utils.d.ts +5 -191
  41. package/dest/fixtures/utils.d.ts.map +1 -1
  42. package/dest/fixtures/utils.js +4 -615
  43. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  44. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  45. package/dest/quality_of_service/prometheus_client.js +67 -0
  46. package/dest/shared/cross_chain_test_harness.d.ts +12 -1
  47. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  48. package/dest/shared/gas_portal_test_harness.d.ts +11 -1
  49. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  50. package/dest/simulators/lending_simulator.d.ts +5 -1
  51. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  52. package/dest/spartan/tx_metrics.d.ts +4 -1
  53. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  54. package/dest/spartan/tx_metrics.js +21 -1
  55. package/dest/spartan/utils.d.ts +5 -1
  56. package/dest/spartan/utils.d.ts.map +1 -1
  57. package/dest/spartan/utils.js +25 -8
  58. package/package.json +39 -39
  59. package/src/bench/client_flows/client_flows_benchmark.ts +142 -195
  60. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +107 -142
  61. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +99 -106
  62. package/src/e2e_deploy_contract/deploy_test.ts +21 -14
  63. package/src/e2e_epochs/epochs_test.ts +1 -1
  64. package/src/e2e_fees/bridging_race.notest.ts +2 -5
  65. package/src/e2e_fees/fees_test.ts +171 -213
  66. package/src/e2e_l1_publisher/write_json.ts +1 -0
  67. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  68. package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
  69. package/src/e2e_p2p/p2p_network.ts +165 -167
  70. package/src/e2e_token_contract/token_contract_test.ts +105 -118
  71. package/src/fixtures/e2e_prover_test.ts +107 -136
  72. package/src/fixtures/setup.ts +1009 -0
  73. package/src/fixtures/utils.ts +27 -901
  74. package/src/quality_of_service/prometheus_client.ts +113 -0
  75. package/src/spartan/tx_metrics.ts +21 -1
  76. package/src/spartan/utils.ts +26 -8
  77. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  78. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  79. package/dest/fixtures/snapshot_manager.js +0 -488
  80. package/src/fixtures/snapshot_manager.ts +0 -646
@@ -0,0 +1,113 @@
1
+ export type PromteheusClientOptions = {
2
+ server: URL;
3
+ };
4
+
5
+ export class PrometheusClient {
6
+ constructor(
7
+ private config: PromteheusClientOptions,
8
+ private httpClient: typeof fetch = fetch,
9
+ ) {}
10
+
11
+ public async querySingleValue(query: string, time = new Date()): Promise<number> {
12
+ const resp = await this.queryRaw(query, time);
13
+ if (resp.status === 'success') {
14
+ if (resp.data.resultType === 'vector') {
15
+ if (resp.data.result.length === 0) {
16
+ return 0;
17
+ }
18
+ const [_, value] = resp.data.result[0].value;
19
+ return parseFloat(value);
20
+ }
21
+ }
22
+
23
+ throw new TypeError('Unsupported response body', { cause: JSON.stringify(resp) });
24
+ }
25
+
26
+ public queryRaw(query: string, time = new Date()): Promise<PrometheusResponse> {
27
+ const searchParams = new URLSearchParams();
28
+ searchParams.set('query', query);
29
+ searchParams.set('time', String(Math.trunc(time.getTime() / 1000)));
30
+ searchParams.set('limit', '10');
31
+
32
+ return this.callPrometheus('query', searchParams);
33
+ }
34
+
35
+ public queryRangeRaw(
36
+ query: string,
37
+ step: PrometheusDuration,
38
+ start: Date,
39
+ end = new Date(),
40
+ ): Promise<PrometheusResponse> {
41
+ const searchParams = new URLSearchParams();
42
+ searchParams.set('query', query);
43
+ searchParams.set('step', step);
44
+ searchParams.set('start', String(Math.trunc(start.getTime() / 1000)));
45
+ searchParams.set('end', String(Math.trunc(end.getTime() / 1000)));
46
+ searchParams.set('limit', '10');
47
+
48
+ return this.callPrometheus('query_range', searchParams);
49
+ }
50
+
51
+ private async callPrometheus(api: string, searchParams: URLSearchParams): Promise<PrometheusResponse> {
52
+ const url = new URL('api/v1/' + api, this.config.server);
53
+ for (const [name, value] of searchParams) {
54
+ url.searchParams.append(name, value);
55
+ }
56
+
57
+ const resp = await this.httpClient(url, { method: 'GET' });
58
+ if (!resp.ok || resp.status !== 200) {
59
+ throw new Error('Invalid HTTP response from Prometheus', {
60
+ cause: {
61
+ url,
62
+ status: resp.status,
63
+ statusText: resp.statusText,
64
+ },
65
+ });
66
+ }
67
+
68
+ const body = await resp.json();
69
+ if ('status' in body && (body.status === 'error' || body.status === 'success')) {
70
+ return body;
71
+ }
72
+
73
+ throw new Error('Invalid response from Prometheus', {
74
+ cause: {
75
+ url,
76
+ body,
77
+ },
78
+ });
79
+ }
80
+ }
81
+
82
+ export type PrometheusDuration = `${number}s` | `${number}m` | `${number}h`;
83
+
84
+ export type PrometheusData =
85
+ | {
86
+ resultType: 'vector';
87
+ result: Array<{
88
+ metric: unknown;
89
+ value: [unixTimestamp: number, value: string];
90
+ }>;
91
+ }
92
+ | {
93
+ resultType: 'matrix';
94
+ result: Array<{
95
+ metric: unknown;
96
+ values: [unixTimestamp: number, value: string];
97
+ }>;
98
+ }
99
+ | {
100
+ resultType: 'scalar' | 'string';
101
+ result: unknown;
102
+ };
103
+
104
+ export type PrometheusResponse =
105
+ | {
106
+ status: 'error';
107
+ errorType: string;
108
+ error: string;
109
+ }
110
+ | {
111
+ status: 'success';
112
+ data: PrometheusData;
113
+ };
@@ -1,5 +1,6 @@
1
1
  import type { AztecNode } from '@aztec/aztec.js/node';
2
2
  import type { L2Block } from '@aztec/stdlib/block';
3
+ import type { TopicType } from '@aztec/stdlib/p2p';
3
4
  import { Tx, type TxReceipt, TxStatus } from '@aztec/stdlib/tx';
4
5
 
5
6
  import { createHistogram } from 'perf_hooks';
@@ -21,6 +22,8 @@ export class TxInclusionMetrics {
21
22
  private groups = new Set<string>();
22
23
  private blocks = new Map<number, Promise<L2Block>>();
23
24
 
25
+ private p2pGossipLatencyByTopic: Partial<Record<TopicType, { p50: number; p95: number }>> = {};
26
+
24
27
  constructor(private aztecNode: AztecNode) {}
25
28
 
26
29
  recordSentTx(tx: Tx, group: string): void {
@@ -71,7 +74,7 @@ export class TxInclusionMetrics {
71
74
  } {
72
75
  const histogram = createHistogram({});
73
76
  for (const tx of this.data.values()) {
74
- if (!tx.blocknumber || tx.group !== group) {
77
+ if (!tx.blocknumber || tx.group !== group || tx.minedAt === -1) {
75
78
  continue;
76
79
  }
77
80
 
@@ -101,6 +104,10 @@ export class TxInclusionMetrics {
101
104
  };
102
105
  }
103
106
 
107
+ public recordP2PGossipLatency(topicName: TopicType, p50: number, p95: number): void {
108
+ this.p2pGossipLatencyByTopic[topicName] = { p50, p95 };
109
+ }
110
+
104
111
  toGithubActionBenchmarkJSON(): Array<{ name: string; unit: string; value: number; range?: number; extra?: string }> {
105
112
  const data: Array<{ name: string; unit: string; value: number; range?: number; extra?: string }> = [];
106
113
  for (const group of this.groups) {
@@ -125,6 +132,19 @@ export class TxInclusionMetrics {
125
132
  );
126
133
  }
127
134
 
135
+ for (const [topic, { p50, p95 }] of Object.entries(this.p2pGossipLatencyByTopic)) {
136
+ data.push({
137
+ name: `p2p_gossip_latency/${topic}/p50`,
138
+ unit: 'ms',
139
+ value: p50,
140
+ });
141
+ data.push({
142
+ name: `p2p_gossip_latency/${topic}/p95`,
143
+ unit: 'ms',
144
+ value: p95,
145
+ });
146
+ }
147
+
128
148
  return data;
129
149
  }
130
150
  }
@@ -117,7 +117,7 @@ export async function startPortForward({
117
117
  );
118
118
 
119
119
  let isResolved = false;
120
- const connected = new Promise<number>(resolve => {
120
+ const connected = new Promise<number>((resolve, reject) => {
121
121
  process.stdout?.on('data', data => {
122
122
  const str = data.toString() as string;
123
123
  if (!isResolved && str.includes('Forwarding from')) {
@@ -125,7 +125,8 @@ export async function startPortForward({
125
125
  logger.debug(`Port forward for ${resource}: ${str}`);
126
126
  const port = str.search(/:\d+/);
127
127
  if (port === -1) {
128
- throw new Error('Port not found in port forward output');
128
+ reject(new Error('Port not found in port forward output'));
129
+ return;
129
130
  }
130
131
  const portNumber = parseInt(str.slice(port + 1));
131
132
  logger.verbose(`Port forwarded for ${resource} at ${portNumber}:${containerPort}`);
@@ -145,17 +146,26 @@ export async function startPortForward({
145
146
  process.on('close', () => {
146
147
  if (!isResolved) {
147
148
  isResolved = true;
148
- logger.warn(`Port forward for ${resource} closed before connection established`);
149
- resolve(0);
149
+ const msg = `Port forward for ${resource} closed before connection established`;
150
+ logger.warn(msg);
151
+ reject(new Error(msg));
150
152
  }
151
153
  });
152
154
  process.on('error', error => {
153
- logger.error(`Port forward for ${resource} error: ${error}`);
154
- resolve(0);
155
+ if (!isResolved) {
156
+ isResolved = true;
157
+ const msg = `Port forward for ${resource} error: ${error}`;
158
+ logger.error(msg);
159
+ reject(new Error(msg));
160
+ }
155
161
  });
156
162
  process.on('exit', code => {
157
- logger.verbose(`Port forward for ${resource} exited with code ${code}`);
158
- resolve(0);
163
+ if (!isResolved) {
164
+ isResolved = true;
165
+ const msg = `Port forward for ${resource} exited with code ${code}`;
166
+ logger.verbose(msg);
167
+ reject(new Error(msg));
168
+ }
159
169
  });
160
170
  });
161
171
 
@@ -197,6 +207,14 @@ export function getExternalIP(namespace: string, serviceName: string): Promise<s
197
207
  return promise;
198
208
  }
199
209
 
210
+ export function startPortForwardForPrometeheus(namespace: string) {
211
+ return startPortForward({
212
+ resource: `svc/${namespace}-prometheus-server`,
213
+ namespace,
214
+ containerPort: 80,
215
+ });
216
+ }
217
+
200
218
  export function startPortForwardForRPC(namespace: string, index = 0) {
201
219
  return startPortForward({
202
220
  resource: `pod/${namespace}-rpc-aztec-node-${index}`,
@@ -1,93 +0,0 @@
1
- import { type InitialAccountData } from '@aztec/accounts/testing';
2
- import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
3
- import { AztecAddress } from '@aztec/aztec.js/addresses';
4
- import type { Logger } from '@aztec/aztec.js/log';
5
- import type { AztecNode } from '@aztec/aztec.js/node';
6
- import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
8
- import { type DeployAztecL1ContractsArgs, type DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
9
- import { TestDateProvider } from '@aztec/foundation/timer';
10
- import type { ProverNode } from '@aztec/prover-node';
11
- import type { SequencerClient } from '@aztec/sequencer-client';
12
- import { TestWallet } from '@aztec/test-wallet/server';
13
- import type { Anvil } from '@viem/anvil';
14
- import { type SetupOptions } from './utils.js';
15
- export type SubsystemsContext = {
16
- anvil: Anvil;
17
- acvmConfig: any;
18
- bbConfig: any;
19
- aztecNode: AztecNodeService;
20
- aztecNodeConfig: AztecNodeConfig;
21
- wallet: TestWallet;
22
- deployL1ContractsValues: DeployAztecL1ContractsReturnType;
23
- proverNode?: ProverNode;
24
- watcher: AnvilTestWatcher;
25
- cheatCodes: CheatCodes;
26
- sequencer: SequencerClient;
27
- dateProvider: TestDateProvider;
28
- initialFundedAccounts: InitialAccountData[];
29
- directoryToCleanup?: string;
30
- };
31
- export declare function createSnapshotManager(testName: string, dataPath?: string, config?: Partial<SetupOptions>, deployL1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>): MockSnapshotManager | SnapshotManager;
32
- export interface ISnapshotManager {
33
- snapshot<T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>): Promise<void>;
34
- setup(): Promise<SubsystemsContext>;
35
- teardown(): Promise<void>;
36
- }
37
- /** Snapshot manager that does not perform snapshotting, it just applies transition and restoration functions as it receives them. */
38
- declare class MockSnapshotManager implements ISnapshotManager {
39
- private config;
40
- private deployL1ContractsArgs;
41
- private context?;
42
- private logger;
43
- constructor(testName: string, config?: Partial<AztecNodeConfig>, deployL1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>);
44
- snapshot<T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>): Promise<void>;
45
- setup(): Promise<SubsystemsContext>;
46
- teardown(): Promise<void>;
47
- }
48
- /**
49
- * Snapshot engine for local e2e tests. Read more:
50
- * https://github.com/AztecProtocol/aztec-packages/pull/5526
51
- */
52
- declare class SnapshotManager implements ISnapshotManager {
53
- private dataPath;
54
- private config;
55
- private deployL1ContractsArgs;
56
- private snapshotStack;
57
- private context?;
58
- private livePath;
59
- private logger;
60
- constructor(testName: string, dataPath: string, config?: Partial<SetupOptions>, deployL1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>);
61
- snapshot<T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>): Promise<void>;
62
- /**
63
- * Creates and returns the subsystem context based on the current snapshot stack.
64
- * If the subsystem context already exists, just return it.
65
- * If you want to be sure to get a clean snapshot, be sure to call teardown() before calling setup().
66
- */
67
- setup(): Promise<SubsystemsContext>;
68
- /**
69
- * Destroys the current subsystem context.
70
- */
71
- teardown(): Promise<void>;
72
- }
73
- /**
74
- * Snapshot 'apply' helper function to add accounts.
75
- * The 'restore' function is not provided, as it must be a closure within the test context to capture the results.
76
- */
77
- export declare const deployAccounts: (numberOfAccounts: number, logger: Logger) => ({ wallet, initialFundedAccounts }: {
78
- wallet: TestWallet;
79
- initialFundedAccounts: InitialAccountData[];
80
- }) => Promise<{
81
- deployedAccounts: InitialAccountData[];
82
- }>;
83
- /**
84
- * Registers the contract class used for test accounts and publicly deploys the instances requested.
85
- * Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
86
- * @param sender - Wallet to send the deployment tx.
87
- * @param accountsToDeploy - Which accounts to publicly deploy.
88
- * @param waitUntilProven - Whether to wait for the tx to be proven.
89
- * @param node - AztecNode used to wait for proven tx.
90
- */
91
- export declare function publicDeployAccounts(wallet: Wallet, accountsToDeploy: AztecAddress[], waitUntilProven?: boolean, node?: AztecNode): Promise<void>;
92
- export {};
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3RfbWFuYWdlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL3NuYXBzaG90X21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQTJCLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLGdCQUFnQixFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUlyRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJcEUsT0FBTyxFQUNMLEtBQUssMEJBQTBCLEVBQy9CLEtBQUssZ0NBQWdDLEVBRXRDLE1BQU0sMkNBQTJDLENBQUM7QUFRbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWF6QyxPQUFPLEVBQ0wsS0FBSyxZQUFZLEVBTWxCLE1BQU0sWUFBWSxDQUFDO0FBR3BCLE1BQU0sTUFBTSxpQkFBaUIsR0FBRztJQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ2IsVUFBVSxF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
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot_manager.d.ts","sourceRoot":"","sources":["../../src/fixtures/snapshot_manager.ts"],"names":[],"mappings":"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"}