@aztec/aztec 0.0.1-commit.cf93bcc56 → 0.0.1-commit.d1cd2107c

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 (102) hide show
  1. package/dest/bin/index.js +7 -3
  2. package/dest/cli/admin_api_key_store.d.ts +3 -3
  3. package/dest/cli/admin_api_key_store.d.ts.map +1 -1
  4. package/dest/cli/admin_api_key_store.js +3 -3
  5. package/dest/cli/aztec_start_action.d.ts +1 -1
  6. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  7. package/dest/cli/aztec_start_action.js +9 -7
  8. package/dest/cli/aztec_start_options.js +6 -6
  9. package/dest/cli/cli.d.ts +1 -1
  10. package/dest/cli/cli.d.ts.map +1 -1
  11. package/dest/cli/cli.js +3 -4
  12. package/dest/cli/cmds/compile.d.ts +4 -0
  13. package/dest/cli/cmds/compile.d.ts.map +1 -0
  14. package/dest/cli/cmds/compile.js +165 -0
  15. package/dest/cli/cmds/profile.d.ts +4 -0
  16. package/dest/cli/cmds/profile.d.ts.map +1 -0
  17. package/dest/cli/cmds/profile.js +8 -0
  18. package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
  19. package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
  20. package/dest/cli/cmds/profile_flamegraph.js +51 -0
  21. package/dest/cli/cmds/profile_gates.d.ts +4 -0
  22. package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
  23. package/dest/cli/cmds/profile_gates.js +57 -0
  24. package/dest/cli/cmds/profile_utils.d.ts +18 -0
  25. package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
  26. package/dest/cli/cmds/profile_utils.js +50 -0
  27. package/dest/cli/cmds/standby.d.ts +27 -0
  28. package/dest/cli/cmds/standby.d.ts.map +1 -0
  29. package/dest/cli/cmds/standby.js +78 -0
  30. package/dest/cli/cmds/start_archiver.d.ts +2 -2
  31. package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
  32. package/dest/cli/cmds/start_archiver.js +1 -1
  33. package/dest/cli/cmds/start_node.d.ts +3 -2
  34. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  35. package/dest/cli/cmds/start_node.js +15 -17
  36. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  37. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  38. package/dest/cli/cmds/start_prover_broker.js +6 -6
  39. package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
  40. package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
  41. package/dest/cli/cmds/utils/artifacts.js +24 -0
  42. package/dest/cli/cmds/utils/needs_recompile.d.ts +10 -0
  43. package/dest/cli/cmds/utils/needs_recompile.d.ts.map +1 -0
  44. package/dest/cli/cmds/utils/needs_recompile.js +124 -0
  45. package/dest/cli/cmds/utils/spawn.d.ts +3 -0
  46. package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
  47. package/dest/cli/cmds/utils/spawn.js +16 -0
  48. package/dest/cli/util.d.ts +3 -5
  49. package/dest/cli/util.d.ts.map +1 -1
  50. package/dest/cli/util.js +40 -81
  51. package/dest/examples/token.js +4 -4
  52. package/dest/local-network/banana_fpc.js +1 -1
  53. package/dest/local-network/local-network.d.ts +1 -1
  54. package/dest/local-network/local-network.d.ts.map +1 -1
  55. package/dest/local-network/local-network.js +35 -6
  56. package/dest/testing/anvil_test_watcher.d.ts +9 -1
  57. package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
  58. package/dest/testing/anvil_test_watcher.js +52 -15
  59. package/dest/testing/index.d.ts +2 -1
  60. package/dest/testing/index.d.ts.map +1 -1
  61. package/dest/testing/index.js +1 -0
  62. package/dest/testing/token_allowed_setup.d.ts +7 -0
  63. package/dest/testing/token_allowed_setup.d.ts.map +1 -0
  64. package/dest/testing/token_allowed_setup.js +20 -0
  65. package/package.json +35 -34
  66. package/scripts/add_crate.sh +102 -0
  67. package/scripts/aztec.sh +11 -5
  68. package/scripts/init.sh +23 -19
  69. package/scripts/new.sh +48 -24
  70. package/scripts/setup_workspace.sh +68 -0
  71. package/src/bin/index.ts +7 -3
  72. package/src/cli/admin_api_key_store.ts +4 -4
  73. package/src/cli/aztec_start_action.ts +9 -7
  74. package/src/cli/aztec_start_options.ts +6 -6
  75. package/src/cli/cli.ts +3 -4
  76. package/src/cli/cmds/compile.ts +190 -0
  77. package/src/cli/cmds/profile.ts +25 -0
  78. package/src/cli/cmds/profile_flamegraph.ts +63 -0
  79. package/src/cli/cmds/profile_gates.ts +67 -0
  80. package/src/cli/cmds/profile_utils.ts +58 -0
  81. package/src/cli/cmds/standby.ts +111 -0
  82. package/src/cli/cmds/start_archiver.ts +1 -1
  83. package/src/cli/cmds/start_node.ts +25 -24
  84. package/src/cli/cmds/start_prover_broker.ts +7 -14
  85. package/src/cli/cmds/utils/artifacts.ts +44 -0
  86. package/src/cli/cmds/utils/needs_recompile.ts +139 -0
  87. package/src/cli/cmds/utils/spawn.ts +16 -0
  88. package/src/cli/util.ts +43 -76
  89. package/src/examples/token.ts +6 -4
  90. package/src/local-network/banana_fpc.ts +1 -1
  91. package/src/local-network/local-network.ts +33 -4
  92. package/src/testing/anvil_test_watcher.ts +59 -15
  93. package/src/testing/index.ts +1 -0
  94. package/src/testing/token_allowed_setup.ts +19 -0
  95. package/dest/cli/release_version.d.ts +0 -2
  96. package/dest/cli/release_version.d.ts.map +0 -1
  97. package/dest/cli/release_version.js +0 -14
  98. package/scripts/compile.sh +0 -44
  99. package/scripts/extract_function.js +0 -47
  100. package/scripts/flamegraph.sh +0 -59
  101. package/scripts/setup_project.sh +0 -31
  102. package/src/cli/release_version.ts +0 -21
package/dest/cli/util.js CHANGED
@@ -1,6 +1,8 @@
1
+ import { getNetworkConfig } from '@aztec/cli/config';
2
+ import { RegistryContract } from '@aztec/ethereum/contracts';
1
3
  import { jsonStringify } from '@aztec/foundation/json-rpc';
2
4
  import { createLogger } from '@aztec/foundation/log';
3
- import { getTelemetryClient } from '@aztec/telemetry-client/start';
5
+ import { getPackageVersion } from '@aztec/stdlib/update-checker';
4
6
  import chalk from 'chalk';
5
7
  import { aztecStartOptions } from './aztec_start_options.js';
6
8
  export var ExitCode = /*#__PURE__*/ function(ExitCode) {
@@ -220,7 +222,7 @@ export const printAztecStartHelpText = ()=>{
220
222
  const { Crs, GrumpkinCrs } = await import('@aztec/bb.js');
221
223
  await Promise.all([
222
224
  Crs.new(2 ** 1, undefined, log),
223
- GrumpkinCrs.new(2 ** 16 + 1, undefined, log)
225
+ GrumpkinCrs.new(2 ** 16, undefined, log)
224
226
  ]);
225
227
  }
226
228
  }
@@ -232,97 +234,54 @@ export const printAztecStartHelpText = ()=>{
232
234
  if (realProofs) {
233
235
  const { Crs, GrumpkinCrs } = await import('@aztec/bb.js');
234
236
  await Promise.all([
235
- Crs.new(2 ** 25 + 1, undefined, log),
236
- GrumpkinCrs.new(2 ** 18 + 1, undefined, log)
237
+ Crs.new(2 ** 25, undefined, log),
238
+ GrumpkinCrs.new(2 ** 18, undefined, log)
237
239
  ]);
238
240
  }
239
241
  }
240
- export async function setupUpdateMonitor(autoUpdateMode, updatesLocation, followsCanonicalRollup, publicClient, registryContractAddress, signalHandlers, updateNodeConfig) {
241
- const logger = createLogger('update-check');
242
- const { UpdateChecker } = await import('@aztec/stdlib/update-checker');
243
- const checker = await UpdateChecker.new({
244
- baseURL: updatesLocation,
245
- publicClient,
246
- registryContractAddress
247
- });
248
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
249
- checker.on('newRollupVersion', async ({ latestVersion, currentVersion })=>{
250
- if (isShuttingDown()) {
251
- return;
252
- }
253
- // if node follows canonical rollup then this is equivalent to a config update
254
- if (!followsCanonicalRollup) {
255
- return;
256
- }
257
- if (autoUpdateMode === 'config' || autoUpdateMode === 'config-and-version') {
258
- logger.info(`New rollup version detected. Please restart the node`, {
259
- latestVersion,
260
- currentVersion
261
- });
262
- await shutdown(logger.info, 78, signalHandlers);
263
- } else if (autoUpdateMode === 'notify') {
264
- logger.warn(`New rollup detected. Please restart the node`, {
265
- latestVersion,
266
- currentVersion
267
- });
242
+ export async function setupVersionChecker(network, followsCanonicalRollup, publicClient, signalHandlers, cacheDir) {
243
+ const networkConfig = await getNetworkConfig(network, cacheDir);
244
+ if (!networkConfig) {
245
+ return;
246
+ }
247
+ const { VersionChecker } = await import('@aztec/stdlib/update-checker');
248
+ const logger = createLogger('version_check');
249
+ const registry = new RegistryContract(publicClient, networkConfig.registryAddress);
250
+ const checks = [];
251
+ checks.push({
252
+ name: 'node',
253
+ currentVersion: getPackageVersion() ?? 'unknown',
254
+ getLatestVersion: async ()=>{
255
+ const cfg = await getNetworkConfig(network, cacheDir);
256
+ return cfg?.nodeVersion;
268
257
  }
269
258
  });
270
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
271
- checker.on('newNodeVersion', async ({ latestVersion, currentVersion })=>{
272
- if (isShuttingDown()) {
273
- return;
274
- }
275
- if (autoUpdateMode === 'config-and-version') {
276
- logger.info(`New node version detected. Please update and restart the node`, {
277
- latestVersion,
278
- currentVersion
279
- });
280
- await shutdown(logger.info, 79, signalHandlers);
281
- } else if (autoUpdateMode === 'notify') {
282
- logger.info(`New node version detected. Please update and restart the node`, {
283
- latestVersion,
284
- currentVersion
259
+ if (followsCanonicalRollup) {
260
+ const getLatestVersion = async ()=>{
261
+ const version = (await registry.getRollupVersions()).at(-1);
262
+ return version !== undefined ? String(version) : undefined;
263
+ };
264
+ const currentVersion = await getLatestVersion();
265
+ if (currentVersion !== undefined) {
266
+ checks.push({
267
+ name: 'rollup',
268
+ currentVersion,
269
+ getLatestVersion
285
270
  });
286
271
  }
287
- });
288
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
289
- checker.on('updateNodeConfig', async (config)=>{
272
+ }
273
+ const checker = new VersionChecker(checks, 600_000, logger);
274
+ checker.on('newVersion', ({ name, latestVersion, currentVersion })=>{
290
275
  if (isShuttingDown()) {
291
276
  return;
292
277
  }
293
- if ((autoUpdateMode === 'config' || autoUpdateMode === 'config-and-version') && updateNodeConfig) {
294
- logger.warn(`Config change detected. Updating node`, config);
295
- try {
296
- await updateNodeConfig(config);
297
- } catch (err) {
298
- logger.warn('Failed to update config', {
299
- err
300
- });
301
- }
302
- }
303
- // don't notify on these config changes
304
- });
305
- checker.on('updatePublicTelemetryConfig', (config)=>{
306
- if (autoUpdateMode === 'config' || autoUpdateMode === 'config-and-version') {
307
- logger.warn(`Public telemetry config change detected. Updating telemetry client`, config);
308
- try {
309
- const publicIncludeMetrics = config.publicIncludeMetrics;
310
- if (Array.isArray(publicIncludeMetrics) && publicIncludeMetrics.every((m)=>typeof m === 'string')) {
311
- getTelemetryClient().setExportedPublicTelemetry(publicIncludeMetrics);
312
- }
313
- const publicMetricsCollectFrom = config.publicMetricsCollectFrom;
314
- if (Array.isArray(publicMetricsCollectFrom) && publicMetricsCollectFrom.every((m)=>typeof m === 'string')) {
315
- getTelemetryClient().setPublicTelemetryCollectFrom(publicMetricsCollectFrom);
316
- }
317
- } catch (err) {
318
- logger.warn('Failed to update config', {
319
- err
320
- });
321
- }
322
- }
323
- // don't notify on these config changes
278
+ logger.warn(`New ${name} version available`, {
279
+ latestVersion,
280
+ currentVersion
281
+ });
324
282
  });
325
283
  checker.start();
284
+ signalHandlers.push(()=>checker.stop());
326
285
  }
327
286
  export function stringifyConfig(config) {
328
287
  return Object.entries(config).map(([key, value])=>`${key}=${jsonStringify(value)}`).join(' ');
@@ -21,7 +21,7 @@ const TRANSFER_AMOUNT = 33n;
21
21
  const bob = bobInitialAccountData.address;
22
22
  logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
23
23
  logger.info('Deploying Token...');
24
- const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
24
+ const { contract: token } = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
25
25
  from: alice
26
26
  });
27
27
  logger.info('Token deployed');
@@ -31,7 +31,7 @@ const TRANSFER_AMOUNT = 33n;
31
31
  from: alice
32
32
  });
33
33
  logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
34
- const balanceAfterMint = await token.methods.balance_of_private(alice).simulate({
34
+ const { result: balanceAfterMint } = await token.methods.balance_of_private(alice).simulate({
35
35
  from: alice
36
36
  });
37
37
  logger.info(`Tokens successfully minted. New Alice's balance: ${balanceAfterMint}`);
@@ -41,11 +41,11 @@ const TRANSFER_AMOUNT = 33n;
41
41
  from: alice
42
42
  });
43
43
  // Check the new balances
44
- const aliceBalance = await token.methods.balance_of_private(alice).simulate({
44
+ const { result: aliceBalance } = await token.methods.balance_of_private(alice).simulate({
45
45
  from: alice
46
46
  });
47
47
  logger.info(`Alice's balance ${aliceBalance}`);
48
- const bobBalance = await token.methods.balance_of_private(bob).simulate({
48
+ const { result: bobBalance } = await token.methods.balance_of_private(bob).simulate({
49
49
  from: bob
50
50
  });
51
51
  logger.info(`Bob's balance ${bobBalance}`);
@@ -46,7 +46,7 @@ export async function getBananaFPCAddress(initialAccounts) {
46
46
  export async function setupBananaFPC(initialAccounts, wallet, log) {
47
47
  const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
48
48
  const admin = getBananaAdmin(initialAccounts);
49
- const [bananaCoin, fpc] = await Promise.all([
49
+ const [{ contract: bananaCoin }, { contract: fpc }] = await Promise.all([
50
50
  TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal).send({
51
51
  from: admin,
52
52
  contractAddressSalt: BANANA_COIN_SALT,
@@ -70,4 +70,4 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
70
70
  }, options?: {
71
71
  prefilledPublicData?: PublicDataTreeLeaf[];
72
72
  }): Promise<AztecNodeService>;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBS2pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBMkQsTUFBTSxNQUFNLENBQUM7QUFlekY7Ozs7R0FJRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsZUFBZSxFQUFFLGVBQWUsRUFDaEMsVUFBVSxFQUFFLEdBQUcsRUFDZixJQUFJLEdBQUU7SUFDSixrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4Qiw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlA7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsR0FBRztJQUNqRCwwREFBMEQ7SUFDMUQsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQztDQUN2QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLHlDQUFrQyxFQUFFLE9BQU8sRUFBRSxLQUFLOzs7R0E4SGhHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxlQUFlLENBQU0sRUFDckMsSUFBSSxHQUFFO0lBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQ2pDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUM1QixZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixFQUNOLE9BQU8sR0FBRTtJQUFFLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQTtDQUFPLDZCQWU3RCJ9
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUt6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBS2pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBMkQsTUFBTSxNQUFNLENBQUM7QUFnQnpGOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQ3ZDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQ2YsSUFBSSxHQUFFO0lBQ0osa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDeEIsNEJBQTRCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JQO0FBRUQsOEJBQThCO0FBQzlCLE1BQU0sTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEdBQUc7SUFDakQsMERBQTBEO0lBQzFELFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsNkRBQTZEO0lBQzdELFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDdkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBc0Isa0JBQWtCLENBQUMsTUFBTSx5Q0FBa0MsRUFBRSxPQUFPLEVBQUUsS0FBSzs7O0dBd0poRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixlQUFlLENBQ25DLE1BQU0sR0FBRSxPQUFPLENBQUMsZUFBZSxDQUFNLEVBQ3JDLElBQUksR0FBRTtJQUNKLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUM1QixVQUFVLENBQUMsRUFBRSxtQkFBbUIsQ0FBQztJQUNqQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7Q0FDNUIsRUFDTixPQUFPLEdBQUU7SUFBRSxtQkFBbUIsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUE7Q0FBTyw2QkFlN0QifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAezF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;GAoBP;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GA8HhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAe7D"}
1
+ {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAKzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAgBzF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;GAoBP;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GAwJhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAe7D"}
@@ -17,6 +17,8 @@ import { EthAddress } from '@aztec/foundation/eth-address';
17
17
  import { TestDateProvider } from '@aztec/foundation/timer';
18
18
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
19
19
  import { protocolContractsHash } from '@aztec/protocol-contracts';
20
+ import { SequencerState } from '@aztec/sequencer-client';
21
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
20
22
  import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
21
23
  import { EmbeddedWallet } from '@aztec/wallets/embedded';
22
24
  import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
@@ -28,6 +30,7 @@ import { createAccountLogs } from '../cli/util.js';
28
30
  import { DefaultMnemonic } from '../mnemonic.js';
29
31
  import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
30
32
  import { EpochTestSettler } from '../testing/epoch_test_settler.js';
33
+ import { getTokenAllowedSetupFunctions } from '../testing/token_allowed_setup.js';
31
34
  import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
32
35
  import { getSponsoredFPCAddress } from './sponsored_fpc.js';
33
36
  const logger = createLogger('local-network');
@@ -66,9 +69,16 @@ const localAnvil = foundry;
66
69
  if ((config.l1RpcUrls?.length || 0) > 1) {
67
70
  logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
68
71
  }
72
+ // The local network deploys a banana FPC with Token contracts, so include Token entries
73
+ // in the setup allowlist so FPC-based fee payments work out of the box.
74
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
69
75
  const aztecNodeConfig = {
70
76
  ...getConfigEnvVars(),
71
- ...config
77
+ ...config,
78
+ txPublicSetupAllowListExtend: [
79
+ ...tokenAllowList,
80
+ ...config.txPublicSetupAllowListExtend ?? []
81
+ ]
72
82
  };
73
83
  const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
74
84
  if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
@@ -97,11 +107,15 @@ const localAnvil = foundry;
97
107
  })();
98
108
  const bananaFPC = await getBananaFPCAddress(initialAccounts);
99
109
  const sponsoredFPC = await getSponsoredFPCAddress();
100
- const fundedAddresses = initialAccounts.length ? [
110
+ const prefundAddresses = (aztecNodeConfig.prefundAddresses ?? []).map((a)=>AztecAddress.fromString(a));
111
+ const fundedAddresses = [
101
112
  ...initialAccounts.map((a)=>a.address),
102
- bananaFPC,
103
- sponsoredFPC
104
- ] : [];
113
+ ...initialAccounts.length ? [
114
+ bananaFPC,
115
+ sponsoredFPC
116
+ ] : [],
117
+ ...prefundAddresses
118
+ ];
105
119
  const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
106
120
  const dateProvider = new TestDateProvider();
107
121
  let cheatcodes;
@@ -141,6 +155,20 @@ const localAnvil = foundry;
141
155
  }, {
142
156
  prefilledPublicData
143
157
  });
158
+ // Now that the node is up, let the watcher check for pending txs so it can skip unfilled slots faster when
159
+ // transactions are waiting in the mempool. Also let it check if the sequencer is actively building, to avoid
160
+ // warping time out from under an in-progress block.
161
+ watcher?.setGetPendingTxCount(()=>node.getPendingTxCount());
162
+ const sequencer = node.getSequencer()?.getSequencer();
163
+ if (sequencer) {
164
+ const idleStates = new Set([
165
+ SequencerState.STOPPED,
166
+ SequencerState.STOPPING,
167
+ SequencerState.IDLE,
168
+ SequencerState.SYNCHRONIZING
169
+ ]);
170
+ watcher?.setIsSequencerBuilding(()=>!idleStates.has(sequencer.getState()));
171
+ }
144
172
  let epochTestSettler;
145
173
  if (!aztecNodeConfig.p2pEnabled) {
146
174
  epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
@@ -152,7 +180,8 @@ const localAnvil = foundry;
152
180
  const wallet = await EmbeddedWallet.create(node, {
153
181
  pxeConfig: {
154
182
  proverEnabled: aztecNodeConfig.realProofs
155
- }
183
+ },
184
+ ephemeral: true
156
185
  });
157
186
  userLog('Setting up funded test accounts...');
158
187
  const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
@@ -21,14 +21,22 @@ export declare class AnvilTestWatcher {
21
21
  private markingAsProvenRunningPromise?;
22
22
  private logger;
23
23
  private isMarkingAsProven;
24
+ private getPendingTxCount?;
25
+ private isSequencerBuilding?;
26
+ private unfilledSlotFirstSeen?;
24
27
  constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined);
25
28
  setIsMarkingAsProven(isMarkingAsProven: boolean): void;
26
29
  setisLocalNetwork(isLocalNetwork: boolean): void;
30
+ /** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */
31
+ setGetPendingTxCount(fn: () => Promise<number>): void;
32
+ /** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */
33
+ setIsSequencerBuilding(fn: () => boolean): void;
27
34
  start(): Promise<void>;
28
35
  stop(): Promise<void>;
29
36
  trigger(): Promise<void>;
30
37
  markAsProven(): Promise<void>;
31
38
  syncDateProviderToL1IfBehind(): Promise<void>;
32
39
  warpTimeIfNeeded(): Promise<void>;
40
+ private warpToTimestamp;
33
41
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQWdCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQWxCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUVqQyxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVLLEtBQUssa0JBeUJWO0lBRUssSUFBSSxrQkFJVDtJQUVLLE9BQU8sa0JBSVo7SUFFSyxZQUFZLGtCQUtqQjtJQUVLLDRCQUE0QixrQkFlakM7SUFFSyxnQkFBZ0Isa0JBd0NyQjtDQUNGIn0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQXlCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQTNCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUdqQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBd0I7SUFHbEQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQWdCO0lBRzVDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFxQztJQUVuRSxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVELHlHQUF5RztJQUN6RyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBRTdDO0lBRUQsdUdBQXVHO0lBQ3ZHLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sUUFFdkM7SUFFSyxLQUFLLGtCQXlCVjtJQUVLLElBQUksa0JBSVQ7SUFFSyxPQUFPLGtCQUlaO0lBRUssWUFBWSxrQkFLakI7SUFFSyw0QkFBNEIsa0JBZWpDO0lBRUssZ0JBQWdCLGtCQXlEckI7WUFFYSxlQUFlO0NBTzlCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAgBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IAlBvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAwCrB;CACF"}
1
+ {"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAyBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IA3BvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAGlD,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAG5C,OAAO,CAAC,qBAAqB,CAAC,CAAqC;IAEnE,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAED,yGAAyG;IACzG,oBAAoB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,QAE7C;IAED,uGAAuG;IACvG,sBAAsB,CAAC,EAAE,EAAE,MAAM,OAAO,QAEvC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAyDrB;YAEa,eAAe;CAO9B"}
@@ -22,6 +22,12 @@ import { getAddress, getContract } from 'viem';
22
22
  markingAsProvenRunningPromise;
23
23
  logger;
24
24
  isMarkingAsProven;
25
+ // Optional callback to check if there are pending txs in the mempool.
26
+ getPendingTxCount;
27
+ // Optional callback to check if the sequencer is actively building a block.
28
+ isSequencerBuilding;
29
+ // Tracks when we first observed the current unfilled slot with pending txs (real wall time).
30
+ unfilledSlotFirstSeen;
25
31
  constructor(cheatcodes, rollupAddress, l1Client, dateProvider){
26
32
  this.cheatcodes = cheatcodes;
27
33
  this.dateProvider = dateProvider;
@@ -45,6 +51,12 @@ import { getAddress, getContract } from 'viem';
45
51
  setisLocalNetwork(isLocalNetwork) {
46
52
  this.isLocalNetwork = isLocalNetwork;
47
53
  }
54
+ /** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */ setGetPendingTxCount(fn) {
55
+ this.getPendingTxCount = fn;
56
+ }
57
+ /** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */ setIsSequencerBuilding(fn) {
58
+ this.isSequencerBuilding = fn;
59
+ }
48
60
  async start() {
49
61
  if (this.filledRunningPromise) {
50
62
  throw new Error('Watcher already watching for filled slot');
@@ -111,14 +123,8 @@ import { getAddress, getContract } from 'viem';
111
123
  BigInt(nextSlot)
112
124
  ]));
113
125
  if (BigInt(currentSlot) === checkpointLog.slotNumber) {
114
- // We should jump to the next slot
115
- try {
116
- await this.cheatcodes.warp(nextSlotTimestamp, {
117
- resetBlockInterval: true
118
- });
119
- } catch (e) {
120
- this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
121
- }
126
+ // The current slot has been filled, we should jump to the next slot.
127
+ await this.warpToTimestamp(nextSlotTimestamp);
122
128
  this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
123
129
  return;
124
130
  }
@@ -126,19 +132,50 @@ import { getAddress, getContract } from 'viem';
126
132
  if (!this.isLocalNetwork) {
127
133
  return;
128
134
  }
135
+ // If there are pending txs and the sequencer missed them, warp quickly (after a 2s real-time debounce) so the
136
+ // sequencer can retry in the next slot. Without this, we'd have to wait a full real-time slot duration (~36s) for
137
+ // the dateProvider to catch up to the next slot timestamp. We skip the warp if the sequencer is actively building
138
+ // to avoid invalidating its in-progress work.
139
+ if (this.getPendingTxCount) {
140
+ const pendingTxs = await this.getPendingTxCount();
141
+ if (pendingTxs > 0) {
142
+ if (this.isSequencerBuilding?.()) {
143
+ this.unfilledSlotFirstSeen = undefined;
144
+ return;
145
+ }
146
+ const realNow = Date.now();
147
+ if (!this.unfilledSlotFirstSeen || this.unfilledSlotFirstSeen.slot !== currentSlot) {
148
+ this.unfilledSlotFirstSeen = {
149
+ slot: currentSlot,
150
+ realTime: realNow
151
+ };
152
+ return;
153
+ }
154
+ if (realNow - this.unfilledSlotFirstSeen.realTime > 2000) {
155
+ await this.warpToTimestamp(nextSlotTimestamp);
156
+ this.unfilledSlotFirstSeen = undefined;
157
+ this.logger.info(`Slot ${currentSlot} was missed with pending txs, jumped to next slot`);
158
+ }
159
+ return;
160
+ }
161
+ }
162
+ // Fallback: warp when the dateProvider time has passed the next slot timestamp.
129
163
  const currentTimestamp = this.dateProvider?.now() ?? Date.now();
130
164
  if (currentTimestamp > nextSlotTimestamp * 1000) {
131
- try {
132
- await this.cheatcodes.warp(nextSlotTimestamp, {
133
- resetBlockInterval: true
134
- });
135
- } catch (e) {
136
- this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
137
- }
165
+ await this.warpToTimestamp(nextSlotTimestamp);
138
166
  this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
139
167
  }
140
168
  } catch {
141
169
  this.logger.error('mineIfSlotFilled failed');
142
170
  }
143
171
  }
172
+ async warpToTimestamp(timestamp) {
173
+ try {
174
+ await this.cheatcodes.warp(timestamp, {
175
+ resetBlockInterval: true
176
+ });
177
+ } catch (e) {
178
+ this.logger.error(`Failed to warp to timestamp ${timestamp}: ${e}`);
179
+ }
180
+ }
144
181
  }
@@ -2,4 +2,5 @@ export { AnvilTestWatcher } from './anvil_test_watcher.js';
2
2
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
3
  export { CheatCodes } from './cheat_codes.js';
4
4
  export { EpochTestSettler } from './epoch_test_settler.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
5
+ export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -2,3 +2,4 @@ export { AnvilTestWatcher } from './anvil_test_watcher.js';
2
2
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
3
  export { CheatCodes } from './cheat_codes.js';
4
4
  export { EpochTestSettler } from './epoch_test_settler.js';
5
+ export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
@@ -0,0 +1,7 @@
1
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
2
+ /**
3
+ * Returns Token-specific allowlist entries needed for FPC-based fee payments.
4
+ * These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
5
+ */
6
+ export declare function getTokenAllowedSetupFunctions(): Promise<AllowedElement[]>;
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fYWxsb3dlZF9zZXR1cC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdG9rZW5fYWxsb3dlZF9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RTs7O0dBR0c7QUFDSCx3QkFBc0IsNkJBQTZCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBUy9FIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_allowed_setup.d.ts","sourceRoot":"","sources":["../../src/testing/token_allowed_setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAS/E"}
@@ -0,0 +1,20 @@
1
+ import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
2
+ import { buildAllowedElement } from '@aztec/p2p/msg_validators';
3
+ import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
4
+ /**
5
+ * Returns Token-specific allowlist entries needed for FPC-based fee payments.
6
+ * These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
7
+ */ export async function getTokenAllowedSetupFunctions() {
8
+ const tokenClassId = (await getContractClassFromArtifact(TokenContractArtifact)).id;
9
+ const target = {
10
+ classId: tokenClassId
11
+ };
12
+ return Promise.all([
13
+ // Token: needed for private transfers via FPC (transfer_to_public enqueues this)
14
+ buildAllowedElement(TokenContractArtifact, target, '_increase_public_balance', {
15
+ onlySelf: true
16
+ }),
17
+ // Token: needed for public transfers via FPC (fee_entrypoint_public enqueues this)
18
+ buildAllowedElement(TokenContractArtifact, target, 'transfer_in_public')
19
+ ]);
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec",
3
- "version": "0.0.1-commit.cf93bcc56",
3
+ "version": "0.0.1-commit.d1cd2107c",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -28,39 +28,40 @@
28
28
  "../package.common.json"
29
29
  ],
30
30
  "dependencies": {
31
- "@aztec/accounts": "0.0.1-commit.cf93bcc56",
32
- "@aztec/archiver": "0.0.1-commit.cf93bcc56",
33
- "@aztec/aztec-faucet": "0.0.1-commit.cf93bcc56",
34
- "@aztec/aztec-node": "0.0.1-commit.cf93bcc56",
35
- "@aztec/aztec.js": "0.0.1-commit.cf93bcc56",
36
- "@aztec/bb-prover": "0.0.1-commit.cf93bcc56",
37
- "@aztec/bb.js": "0.0.1-commit.cf93bcc56",
38
- "@aztec/blob-client": "0.0.1-commit.cf93bcc56",
39
- "@aztec/bot": "0.0.1-commit.cf93bcc56",
40
- "@aztec/builder": "0.0.1-commit.cf93bcc56",
41
- "@aztec/cli": "0.0.1-commit.cf93bcc56",
42
- "@aztec/constants": "0.0.1-commit.cf93bcc56",
43
- "@aztec/entrypoints": "0.0.1-commit.cf93bcc56",
44
- "@aztec/ethereum": "0.0.1-commit.cf93bcc56",
45
- "@aztec/foundation": "0.0.1-commit.cf93bcc56",
46
- "@aztec/kv-store": "0.0.1-commit.cf93bcc56",
47
- "@aztec/l1-artifacts": "0.0.1-commit.cf93bcc56",
48
- "@aztec/node-lib": "0.0.1-commit.cf93bcc56",
49
- "@aztec/noir-contracts.js": "0.0.1-commit.cf93bcc56",
50
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.cf93bcc56",
51
- "@aztec/p2p": "0.0.1-commit.cf93bcc56",
52
- "@aztec/p2p-bootstrap": "0.0.1-commit.cf93bcc56",
53
- "@aztec/protocol-contracts": "0.0.1-commit.cf93bcc56",
54
- "@aztec/prover-client": "0.0.1-commit.cf93bcc56",
55
- "@aztec/prover-node": "0.0.1-commit.cf93bcc56",
56
- "@aztec/pxe": "0.0.1-commit.cf93bcc56",
57
- "@aztec/sequencer-client": "0.0.1-commit.cf93bcc56",
58
- "@aztec/stdlib": "0.0.1-commit.cf93bcc56",
59
- "@aztec/telemetry-client": "0.0.1-commit.cf93bcc56",
60
- "@aztec/txe": "0.0.1-commit.cf93bcc56",
61
- "@aztec/validator-ha-signer": "0.0.1-commit.cf93bcc56",
62
- "@aztec/wallets": "0.0.1-commit.cf93bcc56",
63
- "@aztec/world-state": "0.0.1-commit.cf93bcc56",
31
+ "@aztec/accounts": "0.0.1-commit.d1cd2107c",
32
+ "@aztec/archiver": "0.0.1-commit.d1cd2107c",
33
+ "@aztec/aztec-faucet": "0.0.1-commit.d1cd2107c",
34
+ "@aztec/aztec-node": "0.0.1-commit.d1cd2107c",
35
+ "@aztec/aztec.js": "0.0.1-commit.d1cd2107c",
36
+ "@aztec/bb-prover": "0.0.1-commit.d1cd2107c",
37
+ "@aztec/bb.js": "0.0.1-commit.d1cd2107c",
38
+ "@aztec/blob-client": "0.0.1-commit.d1cd2107c",
39
+ "@aztec/bot": "0.0.1-commit.d1cd2107c",
40
+ "@aztec/builder": "0.0.1-commit.d1cd2107c",
41
+ "@aztec/cli": "0.0.1-commit.d1cd2107c",
42
+ "@aztec/constants": "0.0.1-commit.d1cd2107c",
43
+ "@aztec/entrypoints": "0.0.1-commit.d1cd2107c",
44
+ "@aztec/ethereum": "0.0.1-commit.d1cd2107c",
45
+ "@aztec/foundation": "0.0.1-commit.d1cd2107c",
46
+ "@aztec/kv-store": "0.0.1-commit.d1cd2107c",
47
+ "@aztec/l1-artifacts": "0.0.1-commit.d1cd2107c",
48
+ "@aztec/node-lib": "0.0.1-commit.d1cd2107c",
49
+ "@aztec/noir-contracts.js": "0.0.1-commit.d1cd2107c",
50
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.d1cd2107c",
51
+ "@aztec/p2p": "0.0.1-commit.d1cd2107c",
52
+ "@aztec/p2p-bootstrap": "0.0.1-commit.d1cd2107c",
53
+ "@aztec/protocol-contracts": "0.0.1-commit.d1cd2107c",
54
+ "@aztec/prover-client": "0.0.1-commit.d1cd2107c",
55
+ "@aztec/prover-node": "0.0.1-commit.d1cd2107c",
56
+ "@aztec/pxe": "0.0.1-commit.d1cd2107c",
57
+ "@aztec/sequencer-client": "0.0.1-commit.d1cd2107c",
58
+ "@aztec/stdlib": "0.0.1-commit.d1cd2107c",
59
+ "@aztec/telemetry-client": "0.0.1-commit.d1cd2107c",
60
+ "@aztec/txe": "0.0.1-commit.d1cd2107c",
61
+ "@aztec/validator-ha-signer": "0.0.1-commit.d1cd2107c",
62
+ "@aztec/wallets": "0.0.1-commit.d1cd2107c",
63
+ "@aztec/world-state": "0.0.1-commit.d1cd2107c",
64
+ "@iarna/toml": "^2.2.5",
64
65
  "@types/chalk": "^2.2.0",
65
66
  "abitype": "^0.8.11",
66
67
  "chalk": "^5.3.0",