@aztec/aztec 0.0.1-commit.5daedc8 → 0.0.1-commit.6201a7b05

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 (157) hide show
  1. package/dest/bin/index.js +12 -5
  2. package/dest/cli/admin_api_key_store.d.ts +45 -0
  3. package/dest/cli/admin_api_key_store.d.ts.map +1 -0
  4. package/dest/cli/admin_api_key_store.js +98 -0
  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 +77 -22
  8. package/dest/cli/aztec_start_options.d.ts +2 -2
  9. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  10. package/dest/cli/aztec_start_options.js +52 -34
  11. package/dest/cli/cli.d.ts +1 -1
  12. package/dest/cli/cli.d.ts.map +1 -1
  13. package/dest/cli/cli.js +7 -52
  14. package/dest/cli/cmds/compile.d.ts +4 -0
  15. package/dest/cli/cmds/compile.d.ts.map +1 -0
  16. package/dest/cli/cmds/compile.js +155 -0
  17. package/dest/cli/cmds/migrate_ha_db.d.ts +3 -0
  18. package/dest/cli/cmds/migrate_ha_db.d.ts.map +1 -0
  19. package/dest/cli/cmds/migrate_ha_db.js +27 -0
  20. package/dest/cli/cmds/profile.d.ts +4 -0
  21. package/dest/cli/cmds/profile.d.ts.map +1 -0
  22. package/dest/cli/cmds/profile.js +8 -0
  23. package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
  24. package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
  25. package/dest/cli/cmds/profile_flamegraph.js +52 -0
  26. package/dest/cli/cmds/profile_gates.d.ts +4 -0
  27. package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
  28. package/dest/cli/cmds/profile_gates.js +58 -0
  29. package/dest/cli/cmds/profile_utils.d.ts +18 -0
  30. package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
  31. package/dest/cli/cmds/profile_utils.js +50 -0
  32. package/dest/cli/cmds/standby.d.ts +32 -0
  33. package/dest/cli/cmds/standby.d.ts.map +1 -0
  34. package/dest/cli/cmds/standby.js +97 -0
  35. package/dest/cli/cmds/start_archiver.d.ts +2 -2
  36. package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
  37. package/dest/cli/cmds/start_archiver.js +15 -15
  38. package/dest/cli/cmds/start_bot.d.ts +3 -3
  39. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  40. package/dest/cli/cmds/start_bot.js +10 -6
  41. package/dest/cli/cmds/start_node.d.ts +3 -2
  42. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  43. package/dest/cli/cmds/start_node.js +75 -33
  44. package/dest/cli/cmds/start_p2p_bootstrap.d.ts +2 -2
  45. package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -1
  46. package/dest/cli/cmds/start_p2p_bootstrap.js +2 -3
  47. package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
  48. package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
  49. package/dest/cli/cmds/start_prover_agent.js +6 -18
  50. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  51. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  52. package/dest/cli/cmds/start_prover_broker.js +15 -9
  53. package/dest/cli/cmds/start_txe.d.ts +2 -2
  54. package/dest/cli/cmds/start_txe.d.ts.map +1 -1
  55. package/dest/cli/cmds/start_txe.js +4 -3
  56. package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
  57. package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
  58. package/dest/cli/cmds/utils/artifacts.js +24 -0
  59. package/dest/cli/cmds/utils/collect_crate_dirs.d.ts +21 -0
  60. package/dest/cli/cmds/utils/collect_crate_dirs.d.ts.map +1 -0
  61. package/dest/cli/cmds/utils/collect_crate_dirs.js +114 -0
  62. package/dest/cli/cmds/utils/needs_recompile.d.ts +10 -0
  63. package/dest/cli/cmds/utils/needs_recompile.d.ts.map +1 -0
  64. package/dest/cli/cmds/utils/needs_recompile.js +90 -0
  65. package/dest/cli/cmds/utils/spawn.d.ts +3 -0
  66. package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
  67. package/dest/cli/cmds/utils/spawn.js +16 -0
  68. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts +4 -0
  69. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts.map +1 -0
  70. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.js +62 -0
  71. package/dest/cli/util.d.ts +9 -20
  72. package/dest/cli/util.d.ts.map +1 -1
  73. package/dest/cli/util.js +51 -87
  74. package/dest/examples/token.js +9 -9
  75. package/dest/examples/util.d.ts +2 -2
  76. package/dest/examples/util.d.ts.map +1 -1
  77. package/dest/local-network/banana_fpc.d.ts +1 -1
  78. package/dest/local-network/banana_fpc.d.ts.map +1 -1
  79. package/dest/local-network/banana_fpc.js +4 -4
  80. package/dest/local-network/local-network.d.ts +15 -17
  81. package/dest/local-network/local-network.d.ts.map +1 -1
  82. package/dest/local-network/local-network.js +89 -46
  83. package/dest/testing/anvil_test_watcher.d.ts +16 -4
  84. package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
  85. package/dest/testing/anvil_test_watcher.js +86 -23
  86. package/dest/testing/cheat_codes.d.ts +13 -15
  87. package/dest/testing/cheat_codes.d.ts.map +1 -1
  88. package/dest/testing/cheat_codes.js +34 -32
  89. package/dest/testing/epoch_test_settler.d.ts +19 -0
  90. package/dest/testing/epoch_test_settler.d.ts.map +1 -0
  91. package/dest/testing/epoch_test_settler.js +61 -0
  92. package/dest/testing/index.d.ts +4 -2
  93. package/dest/testing/index.d.ts.map +1 -1
  94. package/dest/testing/index.js +2 -0
  95. package/dest/testing/token_allowed_setup.d.ts +7 -0
  96. package/dest/testing/token_allowed_setup.d.ts.map +1 -0
  97. package/dest/testing/token_allowed_setup.js +20 -0
  98. package/package.json +39 -36
  99. package/scripts/add_crate.sh +52 -0
  100. package/scripts/aztec.sh +73 -0
  101. package/scripts/init.sh +39 -0
  102. package/scripts/new.sh +83 -0
  103. package/scripts/setup_workspace.sh +69 -0
  104. package/scripts/templates/blank/contract/Nargo.toml +6 -0
  105. package/scripts/templates/blank/contract/src/main.nr +10 -0
  106. package/scripts/templates/blank/test/Nargo.toml +7 -0
  107. package/scripts/templates/blank/test/src/lib.nr +11 -0
  108. package/scripts/templates/counter/contract/Nargo.toml +7 -0
  109. package/scripts/templates/counter/contract/src/main.nr +48 -0
  110. package/scripts/templates/counter/test/Nargo.toml +7 -0
  111. package/scripts/templates/counter/test/src/lib.nr +32 -0
  112. package/src/bin/index.ts +13 -5
  113. package/src/cli/admin_api_key_store.ts +128 -0
  114. package/src/cli/aztec_start_action.ts +69 -17
  115. package/src/cli/aztec_start_options.ts +59 -35
  116. package/src/cli/cli.ts +11 -56
  117. package/src/cli/cmds/compile.ts +178 -0
  118. package/src/cli/cmds/migrate_ha_db.ts +43 -0
  119. package/src/cli/cmds/profile.ts +25 -0
  120. package/src/cli/cmds/profile_flamegraph.ts +64 -0
  121. package/src/cli/cmds/profile_gates.ts +68 -0
  122. package/src/cli/cmds/profile_utils.ts +58 -0
  123. package/src/cli/cmds/standby.ts +132 -0
  124. package/src/cli/cmds/start_archiver.ts +14 -19
  125. package/src/cli/cmds/start_bot.ts +9 -6
  126. package/src/cli/cmds/start_node.ts +85 -37
  127. package/src/cli/cmds/start_p2p_bootstrap.ts +3 -3
  128. package/src/cli/cmds/start_prover_agent.ts +7 -18
  129. package/src/cli/cmds/start_prover_broker.ts +20 -16
  130. package/src/cli/cmds/start_txe.ts +5 -3
  131. package/src/cli/cmds/utils/artifacts.ts +44 -0
  132. package/src/cli/cmds/utils/collect_crate_dirs.ts +118 -0
  133. package/src/cli/cmds/utils/needs_recompile.ts +98 -0
  134. package/src/cli/cmds/utils/spawn.ts +16 -0
  135. package/src/cli/cmds/utils/warn_if_aztec_version_mismatch.ts +77 -0
  136. package/src/cli/util.ts +60 -98
  137. package/src/examples/token.ts +10 -10
  138. package/src/examples/util.ts +1 -1
  139. package/src/local-network/banana_fpc.ts +12 -8
  140. package/src/local-network/local-network.ts +123 -88
  141. package/src/testing/anvil_test_watcher.ts +97 -22
  142. package/src/testing/cheat_codes.ts +42 -35
  143. package/src/testing/epoch_test_settler.ts +70 -0
  144. package/src/testing/index.ts +3 -1
  145. package/src/testing/token_allowed_setup.ts +19 -0
  146. package/dest/cli/cmds/start_blob_sink.d.ts +0 -3
  147. package/dest/cli/cmds/start_blob_sink.d.ts.map +0 -1
  148. package/dest/cli/cmds/start_blob_sink.js +0 -33
  149. package/dest/cli/cmds/start_prover_node.d.ts +0 -7
  150. package/dest/cli/cmds/start_prover_node.d.ts.map +0 -1
  151. package/dest/cli/cmds/start_prover_node.js +0 -108
  152. package/dest/cli/release_version.d.ts +0 -2
  153. package/dest/cli/release_version.d.ts.map +0 -1
  154. package/dest/cli/release_version.js +0 -14
  155. package/src/cli/cmds/start_blob_sink.ts +0 -57
  156. package/src/cli/cmds/start_prover_node.ts +0 -124
  157. package/src/cli/release_version.ts +0 -21
@@ -1,5 +1,5 @@
1
1
  import { EthAddress } from '@aztec/aztec.js/addresses';
2
- import type { ExtendedViemWalletClient } from '@aztec/ethereum';
2
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
3
3
  import type { Abi, Narrow } from 'abitype';
4
4
  import type { Hex } from 'viem';
5
5
  /**
@@ -16,4 +16,4 @@ export declare function deployL1Contract(l1Client: ExtendedViemWalletClient, abi
16
16
  * @param ms - the number of milliseconds to sleep for
17
17
  */
18
18
  export declare function delay(ms: number): Promise<void>;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4YW1wbGVzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEM7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQixnQkFBZ0IsQ0FDcEMsUUFBUSxFQUFFLHdCQUF3QixFQUNsQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLE9BQU8sRUFBRSxDQUFDLEVBQ3JDLFFBQVEsRUFBRSxHQUFHLEVBQ2IsSUFBSSxHQUFFLFNBQVMsT0FBTyxFQUFPLEdBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FjckI7QUFFRDs7O0dBR0c7QUFDSCx3QkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUvQyJ9
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4YW1wbGVzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdEUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEM7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQixnQkFBZ0IsQ0FDcEMsUUFBUSxFQUFFLHdCQUF3QixFQUNsQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLE9BQU8sRUFBRSxDQUFDLEVBQ3JDLFFBQVEsRUFBRSxHQUFHLEVBQ2IsSUFBSSxHQUFFLFNBQVMsT0FBTyxFQUFPLEdBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FjckI7QUFFRDs7O0dBR0c7QUFDSCx3QkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUvQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/examples/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,wBAAwB,EAClC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,EACrC,QAAQ,EAAE,GAAG,EACb,IAAI,GAAE,SAAS,OAAO,EAAO,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/examples/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,wBAAwB,EAClC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,CAAC,EACrC,QAAQ,EAAE,GAAG,EACb,IAAI,GAAE,SAAS,OAAO,EAAO,GAC5B,OAAO,CAAC,UAAU,CAAC,CAcrB;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
@@ -7,4 +7,4 @@ export declare function getBananaFPCAddress(initialAccounts: InitialAccountData[
7
7
  export declare function setupBananaFPC(initialAccounts: InitialAccountData[], wallet: Wallet, log: LogFn): Promise<void>;
8
8
  export declare function registerDeployedBananaCoinInWalletAndGetAddress(wallet: Wallet): Promise<AztecAddress>;
9
9
  export declare function registerDeployedBananaFPCInWalletAndGetAddress(wallet: Wallet): Promise<AztecAddress>;
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuYW5hX2ZwYy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvYmFuYW5hX2ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBOEIsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3QjNELHdCQUFzQixvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBRS9FO0FBV0Qsd0JBQXNCLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx5QkFFOUU7QUFFRCx3QkFBc0IsY0FBYyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssaUJBY3JHO0FBRUQsd0JBQXNCLCtDQUErQyxDQUFDLE1BQU0sRUFBRSxNQUFNLHlCQU1uRjtBQUVELHdCQUFzQiw4Q0FBOEMsQ0FBQyxNQUFNLEVBQUUsTUFBTSx5QkFNbEYifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuYW5hX2ZwYy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvYmFuYW5hX2ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBOEIsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3QjNELHdCQUFzQixvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBRS9FO0FBV0Qsd0JBQXNCLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx5QkFFOUU7QUFFRCx3QkFBc0IsY0FBYyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssaUJBa0JyRztBQUVELHdCQUFzQiwrQ0FBK0MsQ0FBQyxNQUFNLEVBQUUsTUFBTSx5QkFNbkY7QUFFRCx3QkFBc0IsOENBQThDLENBQUMsTUFBTSxFQUFFLE1BQU0seUJBTWxGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"banana_fpc.d.ts","sourceRoot":"","sources":["../../src/local-network/banana_fpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAwB3D,wBAAsB,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE/E;AAWD,wBAAsB,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE9E;AAED,wBAAsB,cAAc,CAAC,eAAe,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAcrG;AAED,wBAAsB,+CAA+C,CAAC,MAAM,EAAE,MAAM,yBAMnF;AAED,wBAAsB,8CAA8C,CAAC,MAAM,EAAE,MAAM,yBAMlF"}
1
+ {"version":3,"file":"banana_fpc.d.ts","sourceRoot":"","sources":["../../src/local-network/banana_fpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAwB3D,wBAAsB,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE/E;AAWD,wBAAsB,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,EAAE,yBAE9E;AAED,wBAAsB,cAAc,CAAC,eAAe,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAkBrG;AAED,wBAAsB,+CAA+C,CAAC,MAAM,EAAE,MAAM,yBAMnF;AAED,wBAAsB,8CAA8C,CAAC,MAAM,EAAE,MAAM,yBAMlF"}
@@ -1,5 +1,5 @@
1
1
  import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
- import { Fr } from '@aztec/foundation/fields';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { FPCContract } from '@aztec/noir-contracts.js/FPC';
4
4
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
5
5
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
@@ -46,17 +46,17 @@ 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,
53
53
  universalDeploy: true
54
- }).deployed(),
54
+ }),
55
55
  FPCContract.deploy(wallet, bananaCoinAddress, admin).send({
56
56
  from: admin,
57
57
  contractAddressSalt: BANANA_FPC_SALT,
58
58
  universalDeploy: true
59
- }).deployed()
59
+ })
60
60
  ]);
61
61
  log(`BananaCoin: ${bananaCoin.address}`);
62
62
  log(`FPC: ${fpc.address}`);
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env -S node --no-warnings
2
- import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
3
- import { EthAddress } from '@aztec/aztec.js/addresses';
4
- import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
5
- import { Fr } from '@aztec/foundation/fields';
6
- import { type LogFn } from '@aztec/foundation/log';
2
+ import { AztecNodeService } from '@aztec/aztec-node';
3
+ import { type AztecNodeConfig } from '@aztec/aztec-node/config';
4
+ import { Fr } from '@aztec/aztec.js/fields';
5
+ import { type BlobClientInterface } from '@aztec/blob-client/client';
6
+ import { EthAddress } from '@aztec/foundation/eth-address';
7
+ import type { LogFn } from '@aztec/foundation/log';
7
8
  import { DateProvider } from '@aztec/foundation/timer';
8
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
9
+ import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
10
+ import type { GenesisData } from '@aztec/stdlib/world-state';
9
11
  import { type TelemetryClient } from '@aztec/telemetry-client';
10
- import { type HDAccount, type PrivateKeyAccount } from 'viem';
12
+ import { type Hex } from 'viem';
11
13
  /**
12
14
  * Function to deploy our L1 contracts to the local network L1
13
15
  * @param aztecNodeConfig - The Aztec Node Config
14
16
  * @param hdAccount - Account for publishing L1 contracts
15
17
  */
16
- export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, hdAccount: HDAccount | PrivateKeyAccount, contractDeployLogger?: import("@aztec/foundation/log").Logger, opts?: {
17
- assumeProvenThroughBlockNumber?: number;
18
- salt?: number;
18
+ export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, privateKey: Hex, opts?: {
19
19
  genesisArchiveRoot?: Fr;
20
20
  feeJuicePortalInitialBalance?: bigint;
21
21
  }): Promise<{
@@ -31,7 +31,6 @@ export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, hd
31
31
  rollupAddress: EthAddress;
32
32
  stakingAssetAddress: EthAddress;
33
33
  } & {
34
- slashFactoryAddress?: EthAddress | undefined;
35
34
  feeAssetHandlerAddress?: EthAddress | undefined;
36
35
  stakingAssetHandlerAddress?: EthAddress | undefined;
37
36
  zkPassportVerifierAddress?: EthAddress | undefined;
@@ -39,15 +38,13 @@ export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, hd
39
38
  dateGatedRelayerAddress?: EthAddress | undefined;
40
39
  } & {
41
40
  rollupAddress: EthAddress;
42
- } & {
41
+ } & Pick<import("@aztec/ethereum/l1-contract-addresses").L1ContractAddresses, "rollupAddress"> & {
43
42
  rollupAddress: EthAddress;
44
43
  }>;
45
44
  /** Local network settings. */
46
45
  export type LocalNetworkConfig = AztecNodeConfig & {
47
46
  /** Mnemonic used to derive the L1 deployer private key.*/
48
47
  l1Mnemonic: string;
49
- /** Salt used to deploy L1 contracts.*/
50
- deployAztecContractsSalt: string;
51
48
  /** Whether to deploy test accounts on local network start.*/
52
49
  testAccounts: boolean;
53
50
  };
@@ -66,9 +63,10 @@ export declare function createLocalNetwork(config: Partial<LocalNetworkConfig> |
66
63
  */
67
64
  export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?: {
68
65
  telemetry?: TelemetryClient;
69
- blobSinkClient?: BlobSinkClientInterface;
66
+ blobClient?: BlobClientInterface;
70
67
  dateProvider?: DateProvider;
68
+ proverBroker?: ProvingJobBroker;
71
69
  }, options?: {
72
- prefilledPublicData?: PublicDataTreeLeaf[];
70
+ genesis?: GenesisData;
73
71
  }): Promise<AztecNodeService>;
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLGdCQUFnQixFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyx1QkFBdUIsRUFBd0IsTUFBTSx5QkFBeUIsQ0FBQztBQVk3RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFHekUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFJakMsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssaUJBQWlCLEVBQTJELE1BQU0sTUFBTSxDQUFDO0FBY3ZIOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQ3ZDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFNBQVMsRUFBRSxTQUFTLEdBQUcsaUJBQWlCLEVBQ3hDLG9CQUFvQix5Q0FBUyxFQUM3QixJQUFJLEdBQUU7SUFDSiw4QkFBOEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN4QyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDZCxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4Qiw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ1A7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsR0FBRztJQUNqRCwwREFBMEQ7SUFDMUQsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQix1Q0FBdUM7SUFDdkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDO0lBQ2pDLDZEQUE2RDtJQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDO0NBQ3ZCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0seUNBQWtDLEVBQUUsT0FBTyxFQUFFLEtBQUs7OztHQWdIaEc7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsZUFBZSxDQUNuQyxNQUFNLEdBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBTSxFQUNyQyxJQUFJLEdBQUU7SUFBRSxTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFBQyxjQUFjLENBQUMsRUFBRSx1QkFBdUIsQ0FBQztJQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQTtDQUFPLEVBQ2pILE9BQU8sR0FBRTtJQUFFLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQTtDQUFPLDZCQVc3RCJ9
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUt6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx5QkFBeUIsQ0FBQztBQUtqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQTJELE1BQU0sTUFBTSxDQUFDO0FBZ0J6Rjs7OztHQUlHO0FBQ0gsd0JBQXNCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUNmLElBQUksR0FBRTtJQUNKLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLDRCQUE0QixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2xDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JQO0FBRUQsOEJBQThCO0FBQzlCLE1BQU0sTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEdBQUc7SUFDakQsMERBQTBEO0lBQzFELFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsNkRBQTZEO0lBQzdELFlBQVksRUFBRSxPQUFPLENBQUM7Q0FDdkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBc0Isa0JBQWtCLENBQUMsTUFBTSx5Q0FBa0MsRUFBRSxPQUFPLEVBQUUsS0FBSzs7O0dBd0poRztBQUVEOzs7R0FHRztBQUNILHdCQUFzQixlQUFlLENBQ25DLE1BQU0sR0FBRSxPQUFPLENBQUMsZUFBZSxDQUFNLEVBQ3JDLElBQUksR0FBRTtJQUNKLFNBQVMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUM1QixVQUFVLENBQUMsRUFBRSxtQkFBbUIsQ0FBQztJQUNqQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7Q0FDNUIsRUFDTixPQUFPLEdBQUU7SUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUE7Q0FBTyw2QkFleEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAY7F,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAGzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAA2D,MAAM,MAAM,CAAC;AAcvH;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,GAAG,iBAAiB,EACxC,oBAAoB,yCAAS,EAC7B,IAAI,GAAE;IACJ,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;GAkCP;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,wBAAwB,EAAE,MAAM,CAAC;IACjC,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GAgHhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAO,EACjH,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAW7D"}
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,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,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,OAAO,CAAC,EAAE,WAAW,CAAA;CAAO,6BAexC"}
@@ -1,19 +1,27 @@
1
1
  #!/usr/bin/env -S node --no-warnings
2
2
  import { getInitialTestAccountsData } from '@aztec/accounts/testing';
3
- import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
4
- import { EthAddress } from '@aztec/aztec.js/addresses';
5
- import { createBlobSinkClient } from '@aztec/blob-sink/client';
3
+ import { AztecNodeService } from '@aztec/aztec-node';
4
+ import { getConfigEnvVars } from '@aztec/aztec-node/config';
5
+ import { Fr } from '@aztec/aztec.js/fields';
6
+ import { createLogger } from '@aztec/aztec.js/log';
7
+ import { createBlobClient } from '@aztec/blob-client/client';
6
8
  import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
7
- import { NULL_KEY, createEthereumChain, deployL1Contracts, deployMulticall3, getL1ContractsConfigEnvVars, waitForPublicClient } from '@aztec/ethereum';
9
+ import { createEthereumChain } from '@aztec/ethereum/chain';
10
+ import { waitForPublicClient } from '@aztec/ethereum/client';
11
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
12
+ import { NULL_KEY } from '@aztec/ethereum/constants';
13
+ import { deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
8
14
  import { EthCheatCodes } from '@aztec/ethereum/test';
9
15
  import { SecretValue } from '@aztec/foundation/config';
10
- import { Fr } from '@aztec/foundation/fields';
11
- import { createLogger } from '@aztec/foundation/log';
16
+ import { EthAddress } from '@aztec/foundation/eth-address';
12
17
  import { TestDateProvider } from '@aztec/foundation/timer';
13
18
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
14
19
  import { protocolContractsHash } from '@aztec/protocol-contracts';
20
+ import { SequencerState } from '@aztec/sequencer-client';
21
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
22
  import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
16
- import { TestWallet, deployFundedSchnorrAccounts } from '@aztec/test-wallet/server';
23
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
24
+ import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
17
25
  import { getGenesisValues } from '@aztec/world-state/testing';
18
26
  import { createPublicClient, fallback, http as httpViemTransport } from 'viem';
19
27
  import { mnemonicToAccount, privateKeyToAddress } from 'viem/accounts';
@@ -21,6 +29,8 @@ import { foundry } from 'viem/chains';
21
29
  import { createAccountLogs } from '../cli/util.js';
22
30
  import { DefaultMnemonic } from '../mnemonic.js';
23
31
  import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
32
+ import { EpochTestSettler } from '../testing/epoch_test_settler.js';
33
+ import { getTokenAllowedSetupFunctions } from '../testing/token_allowed_setup.js';
24
34
  import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
25
35
  import { getSponsoredFPCAddress } from './sponsored_fpc.js';
26
36
  const logger = createLogger('local-network');
@@ -29,24 +39,19 @@ const localAnvil = foundry;
29
39
  * Function to deploy our L1 contracts to the local network L1
30
40
  * @param aztecNodeConfig - The Aztec Node Config
31
41
  * @param hdAccount - Account for publishing L1 contracts
32
- */ export async function deployContractsToL1(aztecNodeConfig, hdAccount, contractDeployLogger = logger, opts = {}) {
33
- const chain = aztecNodeConfig.l1RpcUrls.length > 0 ? createEthereumChain(aztecNodeConfig.l1RpcUrls, aztecNodeConfig.l1ChainId) : {
34
- chainInfo: localAnvil
35
- };
42
+ */ export async function deployContractsToL1(aztecNodeConfig, privateKey, opts = {}) {
36
43
  await waitForPublicClient(aztecNodeConfig);
37
- const l1Contracts = await deployL1Contracts(aztecNodeConfig.l1RpcUrls, hdAccount, chain.chainInfo, contractDeployLogger, {
44
+ const l1Contracts = await deployAztecL1Contracts(aztecNodeConfig.l1RpcUrls[0], privateKey, foundry.id, {
38
45
  ...getL1ContractsConfigEnvVars(),
39
46
  ...aztecNodeConfig,
40
47
  vkTreeRoot: getVKTreeRoot(),
41
48
  protocolContractsHash,
42
49
  genesisArchiveRoot: opts.genesisArchiveRoot ?? new Fr(GENESIS_ARCHIVE_ROOT),
43
- salt: opts.salt,
44
50
  feeJuicePortalInitialBalance: opts.feeJuicePortalInitialBalance,
45
51
  aztecTargetCommitteeSize: 0,
46
- slasherFlavor: 'none',
52
+ slasherEnabled: false,
47
53
  realVerifier: false
48
54
  });
49
- await deployMulticall3(l1Contracts.l1Client, logger);
50
55
  aztecNodeConfig.l1Contracts = l1Contracts.l1ContractAddresses;
51
56
  aztecNodeConfig.rollupVersion = l1Contracts.rollupVersion;
52
57
  return aztecNodeConfig.l1Contracts;
@@ -64,14 +69,21 @@ const localAnvil = foundry;
64
69
  if ((config.l1RpcUrls?.length || 0) > 1) {
65
70
  logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
66
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();
67
75
  const aztecNodeConfig = {
68
76
  ...getConfigEnvVars(),
69
- ...config
77
+ ...config,
78
+ txPublicSetupAllowListExtend: [
79
+ ...tokenAllowList,
80
+ ...config.txPublicSetupAllowListExtend ?? []
81
+ ]
70
82
  };
71
83
  const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
72
- if (aztecNodeConfig.publisherPrivateKeys == undefined || !aztecNodeConfig.publisherPrivateKeys.length || aztecNodeConfig.publisherPrivateKeys[0].getValue() === NULL_KEY) {
84
+ if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
73
85
  const privKey = hdAccount.getHdKey().privateKey;
74
- aztecNodeConfig.publisherPrivateKeys = [
86
+ aztecNodeConfig.sequencerPublisherPrivateKeys = [
75
87
  new SecretValue(`0x${Buffer.from(privKey).toString('hex')}`)
76
88
  ];
77
89
  }
@@ -95,21 +107,25 @@ const localAnvil = foundry;
95
107
  })();
96
108
  const bananaFPC = await getBananaFPCAddress(initialAccounts);
97
109
  const sponsoredFPC = await getSponsoredFPCAddress();
98
- const fundedAddresses = initialAccounts.length ? [
110
+ const prefundAddresses = (aztecNodeConfig.prefundAddresses ?? []).map((a)=>AztecAddress.fromString(a));
111
+ const fundedAddresses = [
99
112
  ...initialAccounts.map((a)=>a.address),
100
- bananaFPC,
101
- sponsoredFPC
102
- ] : [];
103
- const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
104
- let watcher = undefined;
113
+ ...initialAccounts.length ? [
114
+ bananaFPC,
115
+ sponsoredFPC
116
+ ] : [],
117
+ ...prefundAddresses
118
+ ];
119
+ const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(fundedAddresses);
105
120
  const dateProvider = new TestDateProvider();
121
+ let cheatcodes;
122
+ let rollupAddress;
123
+ let watcher;
106
124
  if (!aztecNodeConfig.p2pEnabled) {
107
- const l1ContractAddresses = await deployContractsToL1(aztecNodeConfig, hdAccount, undefined, {
108
- assumeProvenThroughBlockNumber: Number.MAX_SAFE_INTEGER,
125
+ ({ rollupAddress } = await deployContractsToL1(aztecNodeConfig, aztecNodeConfig.validatorPrivateKeys.getValue()[0], {
109
126
  genesisArchiveRoot,
110
- salt: config.deployAztecContractsSalt ? parseInt(config.deployAztecContractsSalt) : undefined,
111
127
  feeJuicePortalInitialBalance: fundingNeeded
112
- });
128
+ }));
113
129
  const chain = aztecNodeConfig.l1RpcUrls.length > 0 ? createEthereumChain([
114
130
  l1RpcUrl
115
131
  ], aztecNodeConfig.l1ChainId) : {
@@ -121,34 +137,55 @@ const localAnvil = foundry;
121
137
  httpViemTransport(l1RpcUrl)
122
138
  ])
123
139
  });
124
- watcher = new AnvilTestWatcher(new EthCheatCodes([
140
+ cheatcodes = new EthCheatCodes([
125
141
  l1RpcUrl
126
- ], dateProvider), l1ContractAddresses.rollupAddress, publicClient, dateProvider);
142
+ ], dateProvider);
143
+ watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider);
127
144
  watcher.setisLocalNetwork(true);
145
+ watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set.
128
146
  await watcher.start();
129
147
  }
130
- const telemetry = initTelemetryClient(getTelemetryClientConfig());
131
- // Create a local blob sink client inside the local network, no http connectivity
132
- const blobSinkClient = createBlobSinkClient();
148
+ const telemetry = await initTelemetryClient(getTelemetryClientConfig());
149
+ // Create a local blob client client inside the local network, no http connectivity
150
+ const blobClient = createBlobClient();
133
151
  const node = await createAztecNode(aztecNodeConfig, {
134
152
  telemetry,
135
- blobSinkClient,
153
+ blobClient,
136
154
  dateProvider
137
155
  }, {
138
- prefilledPublicData
156
+ genesis
139
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
+ }
172
+ let epochTestSettler;
173
+ if (!aztecNodeConfig.p2pEnabled) {
174
+ epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
175
+ pollingIntervalMs: 200
176
+ });
177
+ await epochTestSettler.start();
178
+ }
140
179
  if (initialAccounts.length) {
141
- const PXEConfig = {
142
- proverEnabled: aztecNodeConfig.realProofs
143
- };
144
- const wallet = await TestWallet.create(node, PXEConfig);
180
+ const wallet = await EmbeddedWallet.create(node, {
181
+ pxeConfig: {
182
+ proverEnabled: aztecNodeConfig.realProofs
183
+ },
184
+ ephemeral: true
185
+ });
145
186
  userLog('Setting up funded test accounts...');
146
- const accountManagers = await deployFundedSchnorrAccounts(wallet, node, initialAccounts);
147
- const accountsWithSecrets = accountManagers.map((manager, i)=>({
148
- account: manager,
149
- secretKey: initialAccounts[i].secret
150
- }));
151
- const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
187
+ const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
188
+ const accLogs = await createAccountLogs(accountManagers, wallet);
152
189
  userLog(accLogs.join(''));
153
190
  await setupBananaFPC(initialAccounts, wallet, userLog);
154
191
  userLog(`SponsoredFPC: ${await getSponsoredFPCAddress()}`);
@@ -158,6 +195,7 @@ const localAnvil = foundry;
158
195
  const stop = async ()=>{
159
196
  await node.stop();
160
197
  await watcher?.stop();
198
+ await epochTestSettler?.stop();
161
199
  };
162
200
  return {
163
201
  node,
@@ -178,6 +216,11 @@ const localAnvil = foundry;
178
216
  ...config.l1Contracts
179
217
  }
180
218
  };
181
- const node = await AztecNodeService.createAndSync(aztecNodeConfig, deps, options);
219
+ const node = await AztecNodeService.createAndSync(aztecNodeConfig, {
220
+ ...deps,
221
+ proverNodeDeps: {
222
+ broker: deps.proverBroker
223
+ }
224
+ }, options);
182
225
  return node;
183
226
  }
@@ -1,7 +1,11 @@
1
- import type { ViemClient } from '@aztec/ethereum';
2
1
  import { EthCheatCodes } from '@aztec/ethereum/test';
2
+ import type { ViemClient } from '@aztec/ethereum/types';
3
3
  import type { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import type { TestDateProvider } from '@aztec/foundation/timer';
5
+ export type AnvilTestWatcherOpts = {
6
+ isLocalNetwork?: boolean;
7
+ isMarkingAsProven?: boolean;
8
+ };
5
9
  /**
6
10
  * Represents a watcher for a rollup contract.
7
11
  *
@@ -13,6 +17,7 @@ export declare class AnvilTestWatcher {
13
17
  private cheatcodes;
14
18
  private dateProvider?;
15
19
  private isLocalNetwork;
20
+ private isMarkingAsProven;
16
21
  private rollup;
17
22
  private rollupCheatCodes;
18
23
  private l2SlotDuration;
@@ -20,15 +25,22 @@ export declare class AnvilTestWatcher {
20
25
  private syncDateProviderPromise?;
21
26
  private markingAsProvenRunningPromise?;
22
27
  private logger;
23
- private isMarkingAsProven;
24
- constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined);
28
+ private getPendingTxCount?;
29
+ private isSequencerBuilding?;
30
+ private unfilledSlotFirstSeen?;
31
+ constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined, opts?: AnvilTestWatcherOpts);
25
32
  setIsMarkingAsProven(isMarkingAsProven: boolean): void;
26
33
  setisLocalNetwork(isLocalNetwork: boolean): void;
34
+ /** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */
35
+ setGetPendingTxCount(fn: () => Promise<number>): void;
36
+ /** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */
37
+ setIsSequencerBuilding(fn: () => boolean): void;
27
38
  start(): Promise<void>;
28
39
  stop(): Promise<void>;
29
40
  trigger(): Promise<void>;
30
41
  markAsProven(): Promise<void>;
31
42
  syncDateProviderToL1IfBehind(): Promise<void>;
32
43
  warpTimeIfNeeded(): Promise<void>;
44
+ private warpToTimestamp;
33
45
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQWdCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQWxCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUVqQyxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVLLEtBQUssa0JBeUJWO0lBRUssSUFBSSxrQkFJVDtJQUVLLE9BQU8sa0JBSVo7SUFFSyxZQUFZLGtCQUtqQjtJQUVLLDRCQUE0QixrQkFlakM7SUFFSyxnQkFBZ0Isa0JBd0NyQjtDQUNGIn0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDekIsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDN0IsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQXdCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQTFCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUN2QixPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFFMUIsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRy9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUF3QjtJQUdsRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBZ0I7SUFHNUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQXFDO0lBRW5FLFlBQ1UsVUFBVSxFQUFFLGFBQWEsRUFDakMsYUFBYSxFQUFFLFVBQVUsRUFDekIsUUFBUSxFQUFFLFVBQVUsRUFDWixZQUFZLENBQUMsOEJBQWtCLEVBQ3ZDLElBQUksR0FBRSxvQkFBeUIsRUFnQmhDO0lBRUQsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxRQUc5QztJQUVELGlCQUFpQixDQUFDLGNBQWMsRUFBRSxPQUFPLFFBRXhDO0lBRUQseUdBQXlHO0lBQ3pHLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFFN0M7SUFFRCx1R0FBdUc7SUFDdkcsc0JBQXNCLENBQUMsRUFBRSxFQUFFLE1BQU0sT0FBTyxRQUV2QztJQUVLLEtBQUssa0JBeUJWO0lBRUssSUFBSSxrQkFJVDtJQUVLLE9BQU8sa0JBSVo7SUFFSyxZQUFZLGtCQUtqQjtJQUVLLDRCQUE0QixrQkFzQmpDO0lBRUssZ0JBQWdCLGtCQTREckI7WUFNYSxlQUFlO0NBZ0I5QiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAEvE,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,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAwBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IA1BvB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,iBAAiB,CAAC;IAE1B,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;IAG/D,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,EACvC,IAAI,GAAE,oBAAyB,EAgBhC;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,kBAsBjC;IAEK,gBAAgB,kBA4DrB;YAMa,eAAe;CAgB9B"}
@@ -14,6 +14,7 @@ import { getAddress, getContract } from 'viem';
14
14
  cheatcodes;
15
15
  dateProvider;
16
16
  isLocalNetwork;
17
+ isMarkingAsProven;
17
18
  rollup;
18
19
  rollupCheatCodes;
19
20
  l2SlotDuration;
@@ -21,13 +22,16 @@ import { getAddress, getContract } from 'viem';
21
22
  syncDateProviderPromise;
22
23
  markingAsProvenRunningPromise;
23
24
  logger;
24
- isMarkingAsProven;
25
- constructor(cheatcodes, rollupAddress, l1Client, dateProvider){
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;
31
+ constructor(cheatcodes, rollupAddress, l1Client, dateProvider, opts = {}){
26
32
  this.cheatcodes = cheatcodes;
27
33
  this.dateProvider = dateProvider;
28
- this.isLocalNetwork = false;
29
34
  this.logger = createLogger(`aztecjs:utils:watcher`);
30
- this.isMarkingAsProven = true;
31
35
  this.rollup = getContract({
32
36
  address: getAddress(rollupAddress.toString()),
33
37
  abi: RollupAbi,
@@ -36,6 +40,8 @@ import { getAddress, getContract } from 'viem';
36
40
  this.rollupCheatCodes = new RollupCheatCodes(this.cheatcodes, {
37
41
  rollupAddress
38
42
  });
43
+ this.isLocalNetwork = opts.isLocalNetwork ?? false;
44
+ this.isMarkingAsProven = opts.isMarkingAsProven ?? true;
39
45
  this.logger.debug(`Watcher created for rollup at ${rollupAddress}`);
40
46
  }
41
47
  setIsMarkingAsProven(isMarkingAsProven) {
@@ -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');
@@ -89,20 +101,31 @@ import { getAddress, getContract } from 'viem';
89
101
  if (!this.dateProvider) {
90
102
  return;
91
103
  }
92
- const l1Time = await this.cheatcodes.timestamp() * 1000;
104
+ const l1Time = await this.cheatcodes.lastBlockTimestamp() * 1000;
93
105
  const wallTime = this.dateProvider.now();
94
106
  if (l1Time > wallTime) {
95
107
  this.logger.warn(`L1 is ahead of wall time. Syncing wall time to L1 time`);
96
108
  this.dateProvider.setTime(l1Time);
97
109
  } else if (l1Time + Number(this.l2SlotDuration) * 1000 < wallTime) {
98
- this.logger.warn(`L1 is more than 1 L2 slot behind wall time. Warping to wall time`);
99
- await this.cheatcodes.warp(Math.ceil(wallTime / 1000));
110
+ // Warp L1 to the slot boundary at-or-before wall time. Rounding to a slot boundary (rather than
111
+ // `ceil(wallTime / 1000)`) keeps this loop's target aligned with `warpTimeIfNeeded`'s
112
+ // `nextSlotTimestamp` target, avoiding a race where the two loops pick timestamps a fraction of
113
+ // a second apart and one of them is then rejected by anvil as non-monotonic.
114
+ const wallSec = Math.floor(wallTime / 1000);
115
+ const targetSlot = await this.rollup.read.getSlotAt([
116
+ BigInt(wallSec)
117
+ ]);
118
+ const targetTimestamp = Number(await this.rollup.read.getTimestampForSlot([
119
+ targetSlot
120
+ ]));
121
+ this.logger.warn(`L1 is more than 1 L2 slot behind wall time. Warping to slot ${targetSlot} boundary`);
122
+ await this.warpToTimestamp(targetTimestamp);
100
123
  }
101
124
  }
102
125
  async warpTimeIfNeeded() {
103
126
  try {
104
127
  const currentSlot = SlotNumber.fromBigInt(await this.rollup.read.getCurrentSlot());
105
- const pendingCheckpointNumber = BigInt(await this.rollup.read.getPendingCheckpointNumber());
128
+ const pendingCheckpointNumber = await this.rollup.read.getPendingCheckpointNumber();
106
129
  const checkpointLog = await this.rollup.read.getCheckpoint([
107
130
  pendingCheckpointNumber
108
131
  ]);
@@ -111,34 +134,74 @@ import { getAddress, getContract } from 'viem';
111
134
  BigInt(nextSlot)
112
135
  ]));
113
136
  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}`);
137
+ // The current slot has been filled, we should jump to the next slot.
138
+ if (await this.warpToTimestamp(nextSlotTimestamp)) {
139
+ this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
121
140
  }
122
- this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
123
141
  return;
124
142
  }
125
143
  // If we are not in local network, we don't need to warp time
126
144
  if (!this.isLocalNetwork) {
127
145
  return;
128
146
  }
147
+ // If there are pending txs and the sequencer missed them, warp quickly (after a 2s real-time debounce) so the
148
+ // sequencer can retry in the next slot. Without this, we'd have to wait a full real-time slot duration (~36s) for
149
+ // the dateProvider to catch up to the next slot timestamp. We skip the warp if the sequencer is actively building
150
+ // to avoid invalidating its in-progress work.
151
+ if (this.getPendingTxCount) {
152
+ const pendingTxs = await this.getPendingTxCount();
153
+ if (pendingTxs > 0) {
154
+ if (this.isSequencerBuilding?.()) {
155
+ this.unfilledSlotFirstSeen = undefined;
156
+ return;
157
+ }
158
+ const realNow = Date.now();
159
+ if (!this.unfilledSlotFirstSeen || this.unfilledSlotFirstSeen.slot !== currentSlot) {
160
+ this.unfilledSlotFirstSeen = {
161
+ slot: currentSlot,
162
+ realTime: realNow
163
+ };
164
+ return;
165
+ }
166
+ if (realNow - this.unfilledSlotFirstSeen.realTime > 2000) {
167
+ if (await this.warpToTimestamp(nextSlotTimestamp)) {
168
+ this.logger.info(`Slot ${currentSlot} was missed with pending txs, jumped to next slot`);
169
+ }
170
+ this.unfilledSlotFirstSeen = undefined;
171
+ }
172
+ return;
173
+ }
174
+ }
175
+ // Fallback: warp when the dateProvider time has passed the next slot timestamp.
129
176
  const currentTimestamp = this.dateProvider?.now() ?? Date.now();
130
177
  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}`);
178
+ if (await this.warpToTimestamp(nextSlotTimestamp)) {
179
+ this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
137
180
  }
138
- this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
139
181
  }
140
182
  } catch {
141
183
  this.logger.error('mineIfSlotFilled failed');
142
184
  }
143
185
  }
186
+ /**
187
+ * Warps L1 to `timestamp`, unless L1 is already at or past it. Returns true when a warp actually
188
+ * happened, false when skipped or on error. Callers use the return value to gate success logs.
189
+ */ async warpToTimestamp(timestamp) {
190
+ try {
191
+ // Anvil rejects evm_setNextBlockTimestamp values <= the current block's timestamp. The two
192
+ // watcher loops can race and pick targets a fraction of a second apart; skip here rather than
193
+ // letting the second one error out noisily.
194
+ const lastTimestamp = await this.cheatcodes.lastBlockTimestamp();
195
+ if (timestamp <= lastTimestamp) {
196
+ return false;
197
+ }
198
+ await this.cheatcodes.warp(timestamp, {
199
+ resetBlockInterval: true
200
+ });
201
+ return true;
202
+ } catch (e) {
203
+ this.logger.error(`Failed to warp to timestamp ${timestamp}: ${e}`);
204
+ return false;
205
+ }
206
+ }
144
207
  }