@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52

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 (167) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +21 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +21 -15
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +116 -121
  7. package/dest/bench/client_flows/config.d.ts +1 -1
  8. package/dest/bench/client_flows/data_extractor.d.ts +1 -1
  9. package/dest/bench/client_flows/data_extractor.js +7 -27
  10. package/dest/bench/utils.d.ts +5 -5
  11. package/dest/bench/utils.d.ts.map +1 -1
  12. package/dest/bench/utils.js +18 -11
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +98 -113
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +91 -70
  19. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  21. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  22. package/dest/e2e_epochs/epochs_test.d.ts +11 -9
  23. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  24. package/dest/e2e_epochs/epochs_test.js +19 -16
  25. package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
  26. package/dest/e2e_fees/bridging_race.notest.js +4 -6
  27. package/dest/e2e_fees/fees_test.d.ts +20 -16
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +127 -139
  30. package/dest/e2e_l1_publisher/write_json.d.ts +3 -3
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +23 -18
  33. package/dest/e2e_multi_validator/utils.d.ts +1 -1
  34. package/dest/e2e_multi_validator/utils.js +1 -1
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  36. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  37. package/dest/e2e_nested_contract/nested_contract_test.js +32 -39
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  40. package/dest/e2e_p2p/inactivity_slash_test.js +7 -6
  41. package/dest/e2e_p2p/p2p_network.d.ts +225 -18
  42. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  43. package/dest/e2e_p2p/p2p_network.js +117 -110
  44. package/dest/e2e_p2p/shared.d.ts +6 -6
  45. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  46. package/dest/e2e_p2p/shared.js +6 -5
  47. package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
  48. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  49. package/dest/e2e_token_contract/token_contract_test.js +90 -92
  50. package/dest/fixtures/e2e_prover_test.d.ts +12 -18
  51. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  52. package/dest/fixtures/e2e_prover_test.js +98 -109
  53. package/dest/fixtures/fixtures.d.ts +2 -3
  54. package/dest/fixtures/fixtures.d.ts.map +1 -1
  55. package/dest/fixtures/fixtures.js +2 -3
  56. package/dest/fixtures/get_acvm_config.d.ts +1 -1
  57. package/dest/fixtures/get_acvm_config.js +1 -1
  58. package/dest/fixtures/get_bb_config.d.ts +1 -1
  59. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  60. package/dest/fixtures/index.d.ts +1 -1
  61. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  62. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  63. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  64. package/dest/fixtures/logging.d.ts +1 -1
  65. package/dest/fixtures/setup.d.ts +216 -0
  66. package/dest/fixtures/setup.d.ts.map +1 -0
  67. package/dest/fixtures/setup.js +684 -0
  68. package/dest/fixtures/setup_p2p_test.d.ts +4 -4
  69. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  70. package/dest/fixtures/setup_p2p_test.js +18 -10
  71. package/dest/fixtures/token_utils.d.ts +5 -2
  72. package/dest/fixtures/token_utils.d.ts.map +1 -1
  73. package/dest/fixtures/token_utils.js +7 -4
  74. package/dest/fixtures/utils.d.ts +5 -192
  75. package/dest/fixtures/utils.d.ts.map +1 -1
  76. package/dest/fixtures/utils.js +4 -648
  77. package/dest/fixtures/web3signer.d.ts +1 -1
  78. package/dest/fixtures/web3signer.js +1 -1
  79. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  80. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  81. package/dest/fixtures/with_telemetry_utils.js +2 -2
  82. package/dest/index.d.ts +1 -1
  83. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  84. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  85. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  86. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  87. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  88. package/dest/quality_of_service/prometheus_client.js +67 -0
  89. package/dest/shared/cross_chain_test_harness.d.ts +5 -3
  90. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  91. package/dest/shared/cross_chain_test_harness.js +3 -3
  92. package/dest/shared/gas_portal_test_harness.d.ts +2 -2
  93. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  94. package/dest/shared/gas_portal_test_harness.js +1 -1
  95. package/dest/shared/index.d.ts +2 -2
  96. package/dest/shared/index.d.ts.map +1 -1
  97. package/dest/shared/jest_setup.d.ts +1 -1
  98. package/dest/shared/submit-transactions.d.ts +1 -1
  99. package/dest/shared/submit-transactions.d.ts.map +1 -1
  100. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  101. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  102. package/dest/shared/uniswap_l1_l2.js +43 -23
  103. package/dest/simulators/index.d.ts +1 -1
  104. package/dest/simulators/lending_simulator.d.ts +2 -2
  105. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  106. package/dest/simulators/lending_simulator.js +5 -3
  107. package/dest/simulators/token_simulator.d.ts +1 -1
  108. package/dest/simulators/token_simulator.d.ts.map +1 -1
  109. package/dest/spartan/setup_test_wallets.d.ts +8 -5
  110. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  111. package/dest/spartan/setup_test_wallets.js +45 -10
  112. package/dest/spartan/tx_metrics.d.ts +52 -0
  113. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  114. package/dest/spartan/tx_metrics.js +248 -0
  115. package/dest/spartan/utils.d.ts +66 -24
  116. package/dest/spartan/utils.d.ts.map +1 -1
  117. package/dest/spartan/utils.js +326 -133
  118. package/package.json +43 -40
  119. package/src/bench/client_flows/benchmark.ts +24 -2
  120. package/src/bench/client_flows/client_flows_benchmark.ts +157 -162
  121. package/src/bench/client_flows/data_extractor.ts +6 -28
  122. package/src/bench/utils.ts +22 -14
  123. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +107 -142
  124. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -124
  125. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  126. package/src/e2e_epochs/epochs_test.ts +39 -25
  127. package/src/e2e_fees/bridging_race.notest.ts +4 -7
  128. package/src/e2e_fees/fees_test.ts +180 -215
  129. package/src/e2e_l1_publisher/write_json.ts +26 -20
  130. package/src/e2e_multi_validator/utils.ts +1 -1
  131. package/src/e2e_nested_contract/nested_contract_test.ts +35 -55
  132. package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
  133. package/src/e2e_p2p/p2p_network.ts +175 -180
  134. package/src/e2e_p2p/shared.ts +15 -7
  135. package/src/e2e_token_contract/token_contract_test.ts +105 -118
  136. package/src/fixtures/e2e_prover_test.ts +120 -153
  137. package/src/fixtures/fixtures.ts +2 -5
  138. package/src/fixtures/get_acvm_config.ts +1 -1
  139. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  140. package/src/fixtures/setup.ts +1010 -0
  141. package/src/fixtures/setup_p2p_test.ts +23 -9
  142. package/src/fixtures/token_utils.ts +4 -4
  143. package/src/fixtures/utils.ts +27 -947
  144. package/src/fixtures/web3signer.ts +1 -1
  145. package/src/fixtures/with_telemetry_utils.ts +2 -2
  146. package/src/guides/up_quick_start.sh +1 -1
  147. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  148. package/src/quality_of_service/prometheus_client.ts +113 -0
  149. package/src/shared/cross_chain_test_harness.ts +6 -9
  150. package/src/shared/gas_portal_test_harness.ts +2 -2
  151. package/src/shared/index.ts +1 -1
  152. package/src/shared/uniswap_l1_l2.ts +53 -67
  153. package/src/simulators/lending_simulator.ts +6 -4
  154. package/src/spartan/DEVELOP.md +7 -0
  155. package/src/spartan/setup_test_wallets.ts +56 -13
  156. package/src/spartan/tx_metrics.ts +231 -0
  157. package/src/spartan/utils.ts +379 -75
  158. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  159. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  160. package/dest/fixtures/setup_l1_contracts.js +0 -17
  161. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  162. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  163. package/dest/fixtures/snapshot_manager.js +0 -505
  164. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  165. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  166. package/src/fixtures/setup_l1_contracts.ts +0 -26
  167. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -1,6 +1,4 @@
1
- import type { Logger } from '@aztec/aztec.js/log';
2
- import { BBNativePrivateKernelProver } from '@aztec/bb-prover/client/native';
3
- import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
1
+ import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
4
2
  import { createLogger, logger } from '@aztec/foundation/log';
5
3
  import { Timer } from '@aztec/foundation/timer';
6
4
  import { WASMSimulator } from '@aztec/simulator/client';
@@ -11,26 +9,7 @@ import { Decoder } from 'msgpackr';
11
9
  import { readFile, readdir, writeFile } from 'node:fs/promises';
12
10
  import { join } from 'node:path';
13
11
 
14
- import { type Log, type ProverType, ProxyLogger, generateBenchmark } from './benchmark.js';
15
-
16
- type NativeProverConfig = { bbBinaryPath?: string; bbWorkingDirectory?: string };
17
-
18
- async function createProver(config: NativeProverConfig = {}, log: Logger) {
19
- const simulator = new WASMSimulator();
20
- if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
21
- return { prover: new BBWASMBundlePrivateKernelProver(simulator, 16, log), type: 'wasm' as ProverType };
22
- } else {
23
- const bbConfig = config as Required<NativeProverConfig>;
24
- return {
25
- prover: await BBNativePrivateKernelProver.new(
26
- { bbSkipCleanup: false, numConcurrentIVCVerifiers: 1, bbIVCConcurrency: 1, ...bbConfig },
27
- simulator,
28
- log,
29
- ),
30
- type: 'native' as ProverType,
31
- };
32
- }
33
- }
12
+ import { type Log, ProxyLogger, generateBenchmark } from './benchmark.js';
34
13
 
35
14
  async function main() {
36
15
  ProxyLogger.create();
@@ -41,10 +20,9 @@ async function main() {
41
20
  }
42
21
  const flows = await readdir(ivcFolder);
43
22
  logger.info(`Flows in ${ivcFolder}: \n${flows.map(flowName => `\t- ${flowName}`).join('\n')}`);
44
- const { prover, type: proverType } = await createProver(
45
- { bbBinaryPath: process.env.BB_BINARY_PATH, bbWorkingDirectory: process.env.BB_WORKING_DIRECTORY },
46
- proxyLogger.createLogger('bb:prover'),
47
- );
23
+ const simulator = new WASMSimulator();
24
+ const log = proxyLogger.createLogger('bb:prover');
25
+ const prover = new BBBundlePrivateKernelProver(simulator, { logger: log });
48
26
 
49
27
  const userLog = createLogger('chonk_flows:data_processor');
50
28
 
@@ -96,7 +74,7 @@ async function main() {
96
74
  if (!(profile.stats.timings as ProvingTimings).proving) {
97
75
  (profile.stats.timings as ProvingTimings).proving = provingTime;
98
76
  }
99
- const benchmark = generateBenchmark(flow, currentLogs, profile.stats, privateExecutionSteps, proverType, error);
77
+ const benchmark = generateBenchmark(flow, currentLogs, profile.stats, privateExecutionSteps, 'native', error);
100
78
  await writeFile(join(ivcFolder, flow, 'benchmark.json'), JSON.stringify(benchmark, null, 2));
101
79
  proxyLogger.flushLogs();
102
80
  }
@@ -1,8 +1,9 @@
1
1
  import type { AztecNodeService } from '@aztec/aztec-node';
2
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
2
3
  import { BatchCall, type SentTx, type WaitOpts } from '@aztec/aztec.js/contracts';
3
4
  import { mean, stdDev, times } from '@aztec/foundation/collection';
4
5
  import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
5
- import type { MetricsType } from '@aztec/telemetry-client';
6
+ import type { MetricDefinition } from '@aztec/telemetry-client';
6
7
  import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
7
8
 
8
9
  import { mkdirSync, writeFileSync } from 'fs';
@@ -15,7 +16,7 @@ import { type EndToEndContext, type SetupOptions, setup } from '../fixtures/util
15
16
  */
16
17
  export async function benchmarkSetup(
17
18
  opts: Partial<SetupOptions> & {
18
- /** What metrics to export */ metrics: (MetricsType | MetricFilter)[];
19
+ /** What metrics to export */ metrics: (MetricDefinition | MetricFilter)[];
19
20
  /** Where to output the benchmark data (defaults to BENCH_OUTPUT or bench.json) */
20
21
  benchOutput?: string;
21
22
  },
@@ -46,7 +47,7 @@ export async function benchmarkSetup(
46
47
  }
47
48
 
48
49
  type MetricFilter = {
49
- source: MetricsType;
50
+ source: MetricDefinition;
50
51
  transform: (value: number) => number;
51
52
  name: string;
52
53
  unit?: string;
@@ -61,17 +62,21 @@ export type GithubActionBenchmarkResult = {
61
62
  extra?: string;
62
63
  };
63
64
 
65
+ function isMetricDefinition(f: MetricDefinition | MetricFilter): f is MetricDefinition {
66
+ return 'description' in f;
67
+ }
68
+
64
69
  function formatMetricsForGithubBenchmarkAction(
65
70
  data: BenchmarkMetricsType,
66
- filter: (MetricsType | MetricFilter)[],
71
+ filter: (MetricDefinition | MetricFilter)[],
67
72
  ): GithubActionBenchmarkResult[] {
68
73
  const allFilters: MetricFilter[] = filter.map(f =>
69
- typeof f === 'string' ? { name: f, source: f, transform: (x: number) => x, unit: undefined } : f,
74
+ isMetricDefinition(f) ? { name: f.name, source: f, transform: (x: number) => x, unit: f.unit } : f,
70
75
  );
71
76
  return data.flatMap(meter => {
72
77
  return meter.metrics
73
- .filter(metric => allFilters.map(f => f.source).includes(metric.name as MetricsType))
74
- .map(metric => [metric, allFilters.find(f => f.source === metric.name)!] as const)
78
+ .filter(metric => allFilters.map(f => f.source.name).includes(metric.name))
79
+ .map(metric => [metric, allFilters.find(f => f.source.name === metric.name)!] as const)
75
80
  .map(([metric, filter]) => ({
76
81
  name: `${meter.name}/${filter.name}`,
77
82
  unit: filter.unit ?? metric.unit ?? 'unknown',
@@ -103,19 +108,22 @@ function getMetricValues(points: BenchmarkDataPoint[]) {
103
108
  * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
104
109
  * @returns A BatchCall instance.
105
110
  */
106
- function makeCall(
111
+ async function makeCall(
107
112
  index: number,
108
113
  context: EndToEndContext,
109
114
  contract: BenchmarkingContract,
110
115
  heavyPublicCompute: boolean,
111
116
  ) {
112
- const [owner] = context.accounts;
113
117
  if (heavyPublicCompute) {
114
118
  return new BatchCall(context.wallet, [contract.methods.sha256_hash_1024(randomBytesAsBigInts(1024))]);
115
119
  } else {
120
+ // We use random address for the new note owner because we can emit at most UNFINALIZED_TAGGING_INDEXES_WINDOW_LEN
121
+ // logs for a given sender-recipient-contract tuple.
122
+ const ownerOfNewNote = await AztecAddress.random();
123
+ const [ownerOfBalance] = context.accounts;
116
124
  return new BatchCall(context.wallet, [
117
- contract.methods.create_note(owner, index + 1),
118
- contract.methods.increment_balance(owner, index + 1),
125
+ contract.methods.create_note(ownerOfNewNote, index + 1),
126
+ contract.methods.increment_balance(ownerOfBalance, index + 1),
119
127
  ]);
120
128
  }
121
129
  }
@@ -129,13 +137,13 @@ function makeCall(
129
137
  * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
130
138
  * @returns Array of sent txs.
131
139
  */
132
- export function sendTxs(
140
+ export async function sendTxs(
133
141
  txCount: number,
134
142
  context: EndToEndContext,
135
143
  contract: BenchmarkingContract,
136
144
  heavyPublicCompute: boolean = false,
137
- ): SentTx[] {
138
- const calls = times(txCount, index => makeCall(index, context, contract, heavyPublicCompute));
145
+ ): Promise<SentTx[]> {
146
+ const calls = await Promise.all(times(txCount, index => makeCall(index, context, contract, heavyPublicCompute)));
139
147
  context.logger.info(`Creating ${txCount} txs`);
140
148
  const [from] = context.accounts;
141
149
  context.logger.info(`Sending ${txCount} txs`);
@@ -13,17 +13,9 @@ import type { TestWallet } from '@aztec/test-wallet/server';
13
13
 
14
14
  import { jest } from '@jest/globals';
15
15
 
16
- import {
17
- type ISnapshotManager,
18
- type SubsystemsContext,
19
- createSnapshotManager,
20
- deployAccounts,
21
- publicDeployAccounts,
22
- } from '../fixtures/snapshot_manager.js';
16
+ import { type EndToEndContext, deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
23
17
  import { TokenSimulator } from '../simulators/token_simulator.js';
24
18
 
25
- const { E2E_DATA_PATH: dataPath } = process.env;
26
-
27
19
  export class Role {
28
20
  private isAdmin = false;
29
21
  private isMinter = false;
@@ -55,7 +47,7 @@ export class BlacklistTokenContractTest {
55
47
  // This value MUST match the same value that we have in the contract
56
48
  static CHANGE_ROLES_DELAY = 86400;
57
49
 
58
- private snapshotManager: ISnapshotManager;
50
+ context!: EndToEndContext;
59
51
  logger: Logger;
60
52
  wallet!: TestWallet;
61
53
  asset!: TokenBlacklistContract;
@@ -71,7 +63,6 @@ export class BlacklistTokenContractTest {
71
63
 
72
64
  constructor(testName: string) {
73
65
  this.logger = createLogger(`e2e:e2e_blacklist_token_contract:${testName}`);
74
- this.snapshotManager = createSnapshotManager(`e2e_blacklist_token_contract/${testName}`, dataPath);
75
66
  }
76
67
 
77
68
  async crossTimestampOfChange() {
@@ -83,86 +74,72 @@ export class BlacklistTokenContractTest {
83
74
  }
84
75
 
85
76
  /**
86
- * Adds two state shifts to snapshot manager.
77
+ * Applies base setup:
87
78
  * 1. Add 3 accounts.
88
79
  * 2. Publicly deploy accounts, deploy token contract and a "bad account".
89
80
  */
90
- async applyBaseSnapshots() {
81
+ async applyBaseSetup() {
91
82
  // Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
92
83
  jest.setTimeout(120_000);
93
84
 
94
- await this.snapshotManager.snapshot(
95
- '3_accounts',
96
- deployAccounts(3, this.logger),
97
- ({ deployedAccounts }, { cheatCodes, aztecNode, sequencer, wallet }) => {
98
- this.cheatCodes = cheatCodes;
99
- this.aztecNode = aztecNode;
100
- this.sequencer = sequencer;
101
- this.wallet = wallet;
102
- this.adminAddress = deployedAccounts[0].address;
103
- this.otherAddress = deployedAccounts[1].address;
104
- this.blacklistedAddress = deployedAccounts[2].address;
105
- return Promise.resolve();
106
- },
85
+ this.logger.info('Deploying 3 accounts');
86
+ const { deployedAccounts } = await deployAccounts(
87
+ 3,
88
+ this.logger,
89
+ )({
90
+ wallet: this.context.wallet,
91
+ initialFundedAccounts: this.context.initialFundedAccounts,
92
+ });
93
+
94
+ this.cheatCodes = this.context.cheatCodes;
95
+ this.aztecNode = this.context.aztecNodeService!;
96
+ this.sequencer = this.context.sequencer!;
97
+ this.wallet = this.context.wallet;
98
+ this.adminAddress = deployedAccounts[0].address;
99
+ this.otherAddress = deployedAccounts[1].address;
100
+ this.blacklistedAddress = deployedAccounts[2].address;
101
+
102
+ this.logger.info('Setting up blacklist token contract');
103
+ // Create the token contract state.
104
+ this.logger.verbose(`Public deploy accounts...`);
105
+ await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
106
+
107
+ this.logger.verbose(`Deploying TokenContract...`);
108
+ this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress)
109
+ .send({ from: this.adminAddress })
110
+ .deployed();
111
+ this.logger.verbose(`Token deployed to ${this.asset.address}`);
112
+
113
+ this.logger.verbose(`Deploying bad account...`);
114
+ this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress }).deployed();
115
+ this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
116
+
117
+ await this.crossTimestampOfChange();
118
+
119
+ this.tokenSim = new TokenSimulator(
120
+ this.asset as unknown as TokenContract,
121
+ this.wallet,
122
+ this.adminAddress,
123
+ this.logger,
124
+ [this.adminAddress, this.otherAddress, this.blacklistedAddress],
107
125
  );
108
126
 
109
- await this.snapshotManager.snapshot(
110
- 'e2e_blacklist_token_contract',
111
- async () => {
112
- // Create the token contract state.
113
- // Move this account thing to addAccounts above?
114
- this.logger.verbose(`Public deploy accounts...`);
115
- await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
116
-
117
- this.logger.verbose(`Deploying TokenContract...`);
118
- this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress)
119
- .send({ from: this.adminAddress })
120
- .deployed();
121
- this.logger.verbose(`Token deployed to ${this.asset.address}`);
122
-
123
- this.logger.verbose(`Deploying bad account...`);
124
- this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress }).deployed();
125
- this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
126
-
127
- await this.crossTimestampOfChange();
128
-
129
- return { tokenContractAddress: this.asset.address, badAccountAddress: this.badAccount.address };
130
- },
131
- async ({ tokenContractAddress, badAccountAddress }) => {
132
- // Restore the token contract state.
133
- this.asset = await TokenBlacklistContract.at(tokenContractAddress, this.wallet);
134
- this.logger.verbose(`Token contract address: ${this.asset.address}`);
135
-
136
- this.tokenSim = new TokenSimulator(
137
- this.asset as unknown as TokenContract,
138
- this.wallet,
139
- this.adminAddress,
140
- this.logger,
141
- [this.adminAddress, this.otherAddress, this.blacklistedAddress],
142
- );
143
-
144
- this.badAccount = await InvalidAccountContract.at(badAccountAddress, this.wallet);
145
- this.logger.verbose(`Bad account address: ${this.badAccount.address}`);
146
-
147
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
148
- new Role().withAdmin().toNoirStruct(),
149
- );
150
- },
127
+ expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
128
+ new Role().withAdmin().toNoirStruct(),
151
129
  );
152
130
  }
153
131
 
154
132
  async setup() {
155
- await this.snapshotManager.setup();
133
+ this.logger.info('Setting up fresh context');
134
+ this.context = await setup(0, {
135
+ fundSponsoredFPC: true,
136
+ skipAccountDeployment: true,
137
+ });
138
+ await this.applyBaseSetup();
156
139
  }
157
140
 
158
- snapshot = <T>(
159
- name: string,
160
- apply: (context: SubsystemsContext) => Promise<T>,
161
- restore: (snapshotData: T, context: SubsystemsContext) => Promise<void> = () => Promise.resolve(),
162
- ): Promise<void> => this.snapshotManager.snapshot(name, apply, restore);
163
-
164
141
  async teardown() {
165
- await this.snapshotManager.teardown();
142
+ await teardown(this.context);
166
143
  }
167
144
 
168
145
  async addPendingShieldNoteToPXE(
@@ -174,7 +151,7 @@ export class BlacklistTokenContractTest {
174
151
  ) {
175
152
  const txEffects = await this.aztecNode.getTxEffect(txHash);
176
153
  await contract.methods
177
- .deliver_transparent_note(
154
+ .process_transparent_note(
178
155
  contract.address,
179
156
  amount,
180
157
  secretHash,
@@ -186,71 +163,59 @@ export class BlacklistTokenContractTest {
186
163
  .simulate({ from: recipient });
187
164
  }
188
165
 
189
- async applyMintSnapshot() {
190
- await this.snapshotManager.snapshot(
191
- 'mint',
192
- async () => {
193
- const { asset } = this;
194
- const amount = 10000n;
195
-
196
- const adminMinterRole = new Role().withAdmin().withMinter();
197
- await this.asset.methods
198
- .update_roles(this.adminAddress, adminMinterRole.toNoirStruct())
199
- .send({ from: this.adminAddress })
200
- .wait();
201
-
202
- const blacklistRole = new Role().withBlacklisted();
203
- await this.asset.methods
204
- .update_roles(this.blacklistedAddress, blacklistRole.toNoirStruct())
205
- .send({ from: this.adminAddress })
206
- .wait();
207
-
208
- await this.crossTimestampOfChange();
209
-
210
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
211
- adminMinterRole.toNoirStruct(),
212
- );
213
-
214
- this.logger.verbose(`Minting ${amount} publicly...`);
215
- await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress }).wait();
216
-
217
- this.logger.verbose(`Minting ${amount} privately...`);
218
- const secret = Fr.random();
219
- const secretHash = await computeSecretHash(secret);
220
- const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress }).wait();
221
-
222
- await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
223
- const txClaim = asset.methods
224
- .redeem_shield(this.adminAddress, amount, secret)
225
- .send({ from: this.adminAddress });
226
- await txClaim.wait();
227
- this.logger.verbose(`Minting complete.`);
228
-
229
- return { amount };
230
- },
231
- async ({ amount }) => {
232
- const { asset, tokenSim } = this;
233
- tokenSim.mintPublic(this.adminAddress, amount);
234
-
235
- const publicBalance = await asset.methods
236
- .balance_of_public(this.adminAddress)
237
- .simulate({ from: this.adminAddress });
238
- this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
239
- expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
240
-
241
- tokenSim.mintPrivate(this.adminAddress, amount);
242
- const privateBalance = await asset.methods
243
- .balance_of_private(this.adminAddress)
244
- .simulate({ from: this.adminAddress });
245
- this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
246
- expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
247
-
248
- const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
249
- this.logger.verbose(`Total supply: ${totalSupply}`);
250
- expect(totalSupply).toEqual(tokenSim.totalSupply);
251
-
252
- return Promise.resolve();
253
- },
166
+ async applyMint() {
167
+ this.logger.info('Applying mint setup');
168
+ const { asset, tokenSim } = this;
169
+ const amount = 10000n;
170
+
171
+ const adminMinterRole = new Role().withAdmin().withMinter();
172
+ await this.asset.methods
173
+ .update_roles(this.adminAddress, adminMinterRole.toNoirStruct())
174
+ .send({ from: this.adminAddress })
175
+ .wait();
176
+
177
+ const blacklistRole = new Role().withBlacklisted();
178
+ await this.asset.methods
179
+ .update_roles(this.blacklistedAddress, blacklistRole.toNoirStruct())
180
+ .send({ from: this.adminAddress })
181
+ .wait();
182
+
183
+ await this.crossTimestampOfChange();
184
+
185
+ expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
186
+ adminMinterRole.toNoirStruct(),
254
187
  );
188
+
189
+ this.logger.verbose(`Minting ${amount} publicly...`);
190
+ await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress }).wait();
191
+
192
+ this.logger.verbose(`Minting ${amount} privately...`);
193
+ const secret = Fr.random();
194
+ const secretHash = await computeSecretHash(secret);
195
+ const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress }).wait();
196
+
197
+ await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
198
+ const txClaim = asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
199
+ await txClaim.wait();
200
+ this.logger.verbose(`Minting complete.`);
201
+
202
+ tokenSim.mintPublic(this.adminAddress, amount);
203
+
204
+ const publicBalance = await asset.methods
205
+ .balance_of_public(this.adminAddress)
206
+ .simulate({ from: this.adminAddress });
207
+ this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
208
+ expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
209
+
210
+ tokenSim.mintPrivate(this.adminAddress, amount);
211
+ const privateBalance = await asset.methods
212
+ .balance_of_private(this.adminAddress)
213
+ .simulate({ from: this.adminAddress });
214
+ this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
215
+ expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
216
+
217
+ const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
218
+ this.logger.verbose(`Total supply: ${totalSupply}`);
219
+ expect(totalSupply).toEqual(tokenSim.totalSupply);
255
220
  }
256
221
  }