@aztec/aztec 0.0.0-test.1 → 0.0.1-commit.017a351

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 (217) hide show
  1. package/README.md +1 -1
  2. package/dest/bin/index.d.ts +1 -1
  3. package/dest/bin/index.js +28 -13
  4. package/dest/cli/admin_api_key_store.d.ts +45 -0
  5. package/dest/cli/admin_api_key_store.d.ts.map +1 -0
  6. package/dest/cli/admin_api_key_store.js +98 -0
  7. package/dest/cli/aztec_start_action.d.ts +1 -1
  8. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  9. package/dest/cli/aztec_start_action.js +107 -49
  10. package/dest/cli/aztec_start_options.d.ts +6 -4
  11. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  12. package/dest/cli/aztec_start_options.js +160 -223
  13. package/dest/cli/cli.d.ts +1 -1
  14. package/dest/cli/cli.d.ts.map +1 -1
  15. package/dest/cli/cli.js +11 -7
  16. package/dest/cli/cmds/compile.d.ts +4 -0
  17. package/dest/cli/cmds/compile.d.ts.map +1 -0
  18. package/dest/cli/cmds/compile.js +166 -0
  19. package/dest/cli/cmds/migrate_ha_db.d.ts +3 -0
  20. package/dest/cli/cmds/migrate_ha_db.d.ts.map +1 -0
  21. package/dest/cli/cmds/migrate_ha_db.js +27 -0
  22. package/dest/cli/cmds/profile.d.ts +4 -0
  23. package/dest/cli/cmds/profile.d.ts.map +1 -0
  24. package/dest/cli/cmds/profile.js +8 -0
  25. package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
  26. package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
  27. package/dest/cli/cmds/profile_flamegraph.js +52 -0
  28. package/dest/cli/cmds/profile_gates.d.ts +4 -0
  29. package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
  30. package/dest/cli/cmds/profile_gates.js +76 -0
  31. package/dest/cli/cmds/profile_utils.d.ts +18 -0
  32. package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
  33. package/dest/cli/cmds/profile_utils.js +50 -0
  34. package/dest/cli/cmds/standby.d.ts +30 -0
  35. package/dest/cli/cmds/standby.d.ts.map +1 -0
  36. package/dest/cli/cmds/standby.js +97 -0
  37. package/dest/cli/cmds/start_bot.d.ts +4 -7
  38. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  39. package/dest/cli/cmds/start_bot.js +32 -17
  40. package/dest/cli/cmds/start_node.d.ts +3 -2
  41. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  42. package/dest/cli/cmds/start_node.js +113 -86
  43. package/dest/cli/cmds/start_p2p_bootstrap.d.ts +2 -2
  44. package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -1
  45. package/dest/cli/cmds/start_p2p_bootstrap.js +10 -6
  46. package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
  47. package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
  48. package/dest/cli/cmds/start_prover_agent.js +29 -12
  49. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  50. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  51. package/dest/cli/cmds/start_prover_broker.js +25 -10
  52. package/dest/cli/cmds/start_txe.d.ts +2 -2
  53. package/dest/cli/cmds/start_txe.d.ts.map +1 -1
  54. package/dest/cli/cmds/start_txe.js +6 -5
  55. package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
  56. package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
  57. package/dest/cli/cmds/utils/artifacts.js +24 -0
  58. package/dest/cli/cmds/utils/collect_crate_dirs.d.ts +21 -0
  59. package/dest/cli/cmds/utils/collect_crate_dirs.d.ts.map +1 -0
  60. package/dest/cli/cmds/utils/collect_crate_dirs.js +114 -0
  61. package/dest/cli/cmds/utils/needs_recompile.d.ts +10 -0
  62. package/dest/cli/cmds/utils/needs_recompile.d.ts.map +1 -0
  63. package/dest/cli/cmds/utils/needs_recompile.js +90 -0
  64. package/dest/cli/cmds/utils/spawn.d.ts +3 -0
  65. package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
  66. package/dest/cli/cmds/utils/spawn.js +16 -0
  67. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts +4 -0
  68. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.d.ts.map +1 -0
  69. package/dest/cli/cmds/utils/warn_if_aztec_version_mismatch.js +61 -0
  70. package/dest/cli/index.d.ts +1 -1
  71. package/dest/cli/preload_crs.d.ts +3 -0
  72. package/dest/cli/preload_crs.d.ts.map +1 -0
  73. package/dest/cli/preload_crs.js +6 -0
  74. package/dest/cli/util.d.ts +37 -17
  75. package/dest/cli/util.d.ts.map +1 -1
  76. package/dest/cli/util.js +171 -35
  77. package/dest/cli/versioning.d.ts +1 -1
  78. package/dest/cli/versioning.js +3 -3
  79. package/dest/examples/token.d.ts +1 -1
  80. package/dest/examples/token.js +31 -18
  81. package/dest/examples/util.d.ts +5 -6
  82. package/dest/examples/util.d.ts.map +1 -1
  83. package/dest/examples/util.js +5 -6
  84. package/dest/index.d.ts +2 -2
  85. package/dest/index.d.ts.map +1 -1
  86. package/dest/index.js +1 -1
  87. package/dest/local-network/auth_registry.d.ts +5 -0
  88. package/dest/local-network/auth_registry.d.ts.map +1 -0
  89. package/dest/local-network/auth_registry.js +17 -0
  90. package/dest/local-network/banana_fpc.d.ts +11 -0
  91. package/dest/local-network/banana_fpc.d.ts.map +1 -0
  92. package/dest/{sandbox → local-network}/banana_fpc.js +29 -27
  93. package/dest/local-network/index.d.ts +4 -0
  94. package/dest/local-network/index.d.ts.map +1 -0
  95. package/dest/local-network/index.js +3 -0
  96. package/dest/local-network/local-network.d.ts +50 -0
  97. package/dest/local-network/local-network.d.ts.map +1 -0
  98. package/dest/local-network/local-network.js +248 -0
  99. package/dest/local-network/sponsored_fpc.d.ts +5 -0
  100. package/dest/local-network/sponsored_fpc.d.ts.map +1 -0
  101. package/dest/local-network/sponsored_fpc.js +18 -0
  102. package/dest/mnemonic.d.ts +1 -1
  103. package/dest/splash.d.ts +1 -1
  104. package/dest/testing/anvil_test_watcher.d.ts +54 -0
  105. package/dest/testing/anvil_test_watcher.d.ts.map +1 -0
  106. package/dest/testing/anvil_test_watcher.js +235 -0
  107. package/dest/testing/cheat_codes.d.ts +44 -0
  108. package/dest/testing/cheat_codes.d.ts.map +1 -0
  109. package/dest/testing/cheat_codes.js +98 -0
  110. package/dest/testing/epoch_test_settler.d.ts +19 -0
  111. package/dest/testing/epoch_test_settler.d.ts.map +1 -0
  112. package/dest/testing/epoch_test_settler.js +63 -0
  113. package/dest/testing/index.d.ts +6 -0
  114. package/dest/testing/index.d.ts.map +1 -0
  115. package/dest/testing/index.js +5 -0
  116. package/dest/testing/token_allowed_setup.d.ts +7 -0
  117. package/dest/testing/token_allowed_setup.d.ts.map +1 -0
  118. package/dest/testing/token_allowed_setup.js +20 -0
  119. package/package.json +56 -45
  120. package/scripts/add_crate.sh +53 -0
  121. package/scripts/aztec.sh +73 -0
  122. package/scripts/init.sh +39 -0
  123. package/scripts/new.sh +83 -0
  124. package/scripts/setup_workspace.sh +69 -0
  125. package/scripts/templates/blank/contract/Nargo.toml +6 -0
  126. package/scripts/templates/blank/contract/src/main.nr +10 -0
  127. package/scripts/templates/blank/test/Nargo.toml +7 -0
  128. package/scripts/templates/blank/test/src/lib.nr +11 -0
  129. package/scripts/templates/counter/contract/Nargo.toml +7 -0
  130. package/scripts/templates/counter/contract/src/main.nr +48 -0
  131. package/scripts/templates/counter/test/Nargo.toml +7 -0
  132. package/scripts/templates/counter/test/src/lib.nr +32 -0
  133. package/src/bin/index.ts +33 -13
  134. package/src/cli/admin_api_key_store.ts +128 -0
  135. package/src/cli/aztec_start_action.ts +100 -46
  136. package/src/cli/aztec_start_options.ts +183 -226
  137. package/src/cli/cli.ts +19 -11
  138. package/src/cli/cmds/compile.ts +192 -0
  139. package/src/cli/cmds/migrate_ha_db.ts +43 -0
  140. package/src/cli/cmds/profile.ts +26 -0
  141. package/src/cli/cmds/profile_flamegraph.ts +64 -0
  142. package/src/cli/cmds/profile_gates.ts +84 -0
  143. package/src/cli/cmds/profile_utils.ts +58 -0
  144. package/src/cli/cmds/standby.ts +132 -0
  145. package/src/cli/cmds/start_bot.ts +43 -19
  146. package/src/cli/cmds/start_node.ts +142 -91
  147. package/src/cli/cmds/start_p2p_bootstrap.ts +14 -6
  148. package/src/cli/cmds/start_prover_agent.ts +25 -16
  149. package/src/cli/cmds/start_prover_broker.ts +32 -9
  150. package/src/cli/cmds/start_txe.ts +7 -5
  151. package/src/cli/cmds/utils/artifacts.ts +44 -0
  152. package/src/cli/cmds/utils/collect_crate_dirs.ts +118 -0
  153. package/src/cli/cmds/utils/needs_recompile.ts +98 -0
  154. package/src/cli/cmds/utils/spawn.ts +16 -0
  155. package/src/cli/cmds/utils/warn_if_aztec_version_mismatch.ts +76 -0
  156. package/src/cli/preload_crs.ts +7 -0
  157. package/src/cli/util.ts +192 -56
  158. package/src/cli/versioning.ts +3 -3
  159. package/src/examples/token.ts +23 -19
  160. package/src/examples/util.ts +6 -8
  161. package/src/index.ts +5 -6
  162. package/src/local-network/auth_registry.ts +19 -0
  163. package/src/{sandbox → local-network}/banana_fpc.ts +32 -29
  164. package/src/local-network/index.ts +7 -0
  165. package/src/local-network/local-network.ts +303 -0
  166. package/src/local-network/sponsored_fpc.ts +26 -0
  167. package/src/testing/anvil_test_watcher.ts +273 -0
  168. package/src/testing/cheat_codes.ts +132 -0
  169. package/src/testing/epoch_test_settler.ts +69 -0
  170. package/src/testing/index.ts +5 -0
  171. package/src/testing/token_allowed_setup.ts +19 -0
  172. package/dest/cli/chain_l2_config.d.ts +0 -19
  173. package/dest/cli/chain_l2_config.d.ts.map +0 -1
  174. package/dest/cli/chain_l2_config.js +0 -56
  175. package/dest/cli/cmds/start_archiver.d.ts +0 -9
  176. package/dest/cli/cmds/start_archiver.d.ts.map +0 -1
  177. package/dest/cli/cmds/start_archiver.js +0 -42
  178. package/dest/cli/cmds/start_blob_sink.d.ts +0 -3
  179. package/dest/cli/cmds/start_blob_sink.d.ts.map +0 -1
  180. package/dest/cli/cmds/start_blob_sink.js +0 -17
  181. package/dest/cli/cmds/start_faucet.d.ts +0 -4
  182. package/dest/cli/cmds/start_faucet.d.ts.map +0 -1
  183. package/dest/cli/cmds/start_faucet.js +0 -20
  184. package/dest/cli/cmds/start_prover_node.d.ts +0 -7
  185. package/dest/cli/cmds/start_prover_node.d.ts.map +0 -1
  186. package/dest/cli/cmds/start_prover_node.js +0 -110
  187. package/dest/cli/cmds/start_pxe.d.ts +0 -16
  188. package/dest/cli/cmds/start_pxe.d.ts.map +0 -1
  189. package/dest/cli/cmds/start_pxe.js +0 -95
  190. package/dest/cli/get_l1_config.d.ts +0 -7
  191. package/dest/cli/get_l1_config.d.ts.map +0 -1
  192. package/dest/cli/get_l1_config.js +0 -13
  193. package/dest/sandbox/banana_fpc.d.ts +0 -11
  194. package/dest/sandbox/banana_fpc.d.ts.map +0 -1
  195. package/dest/sandbox/index.d.ts +0 -5
  196. package/dest/sandbox/index.d.ts.map +0 -1
  197. package/dest/sandbox/index.js +0 -4
  198. package/dest/sandbox/sandbox.d.ts +0 -76
  199. package/dest/sandbox/sandbox.d.ts.map +0 -1
  200. package/dest/sandbox/sandbox.js +0 -181
  201. package/dest/sandbox/sponsored_fee_payment_method.d.ts +0 -23
  202. package/dest/sandbox/sponsored_fee_payment_method.d.ts.map +0 -1
  203. package/dest/sandbox/sponsored_fee_payment_method.js +0 -36
  204. package/dest/sandbox/sponsored_fpc.d.ts +0 -6
  205. package/dest/sandbox/sponsored_fpc.d.ts.map +0 -1
  206. package/dest/sandbox/sponsored_fpc.js +0 -26
  207. package/src/cli/chain_l2_config.ts +0 -74
  208. package/src/cli/cmds/start_archiver.ts +0 -55
  209. package/src/cli/cmds/start_blob_sink.ts +0 -31
  210. package/src/cli/cmds/start_faucet.ts +0 -34
  211. package/src/cli/cmds/start_prover_node.ts +0 -121
  212. package/src/cli/cmds/start_pxe.ts +0 -129
  213. package/src/cli/get_l1_config.ts +0 -18
  214. package/src/sandbox/index.ts +0 -5
  215. package/src/sandbox/sandbox.ts +0 -229
  216. package/src/sandbox/sponsored_fee_payment_method.ts +0 -46
  217. package/src/sandbox/sponsored_fpc.ts +0 -38
@@ -1,27 +1,42 @@
1
- import { BotRunner, botConfigMappings, getBotRunnerApiHandler } from '@aztec/bot';
2
- import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
3
- import { extractRelevantOptions } from '../util.js';
1
+ import { BotRunner, BotStore, botConfigMappings, getBotRunnerApiHandler } from '@aztec/bot';
2
+ import { createStore, openTmpStore } from '@aztec/kv-store/lmdb-v2';
3
+ import { allPxeConfigMappings } from '@aztec/pxe/config';
4
+ import { createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
5
+ import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient, makeTracedFetch } from '@aztec/telemetry-client';
6
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
7
+ import { extractRelevantOptions, stringifyConfig } from '../util.js';
8
+ import { getVersions } from '../versioning.js';
4
9
  export async function startBot(options, signalHandlers, services, userLog) {
5
- const { proverNode, archiver, sequencer, p2pBootstrap, txe, prover } = options;
6
- if (proverNode || archiver || sequencer || p2pBootstrap || txe || prover) {
7
- userLog(`Starting a bot with --prover-node, --prover, --archiver, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
10
+ const { proverNode, sequencer, p2pBootstrap, txe, prover } = options;
11
+ if (proverNode || sequencer || p2pBootstrap || txe || prover) {
12
+ userLog(`Starting a bot with --prover-node, --prover, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
8
13
  process.exit(1);
9
14
  }
10
- // Start a PXE client that is used by the bot if required
11
- let pxe;
12
- if (options.pxe) {
13
- const { addPXE } = await import('./start_pxe.js');
14
- ({ pxe } = await addPXE(options, signalHandlers, services, userLog));
15
+ const fetch = makeTracedFetch([
16
+ 1,
17
+ 2,
18
+ 3
19
+ ], true);
20
+ const config = extractRelevantOptions(options, botConfigMappings, 'bot');
21
+ if (!config.nodeUrl) {
22
+ throw new Error('The bot requires access to a Node');
15
23
  }
16
- const telemetry = initTelemetryClient(getTelemetryClientConfig());
17
- await addBot(options, signalHandlers, services, {
18
- pxe,
19
- telemetry
24
+ const aztecNode = createAztecNodeClient(config.nodeUrl, getVersions(), fetch);
25
+ const pxeConfig = extractRelevantOptions(options, allPxeConfigMappings, 'pxe');
26
+ userLog(`Creating bot wallet with config ${stringifyConfig(pxeConfig)}`);
27
+ const wallet = await EmbeddedWallet.create(aztecNode, {
28
+ pxeConfig
20
29
  });
30
+ const telemetry = await initTelemetryClient(getTelemetryClientConfig());
31
+ await addBot(options, signalHandlers, services, wallet, aztecNode, telemetry, undefined, userLog);
21
32
  }
22
- export function addBot(options, signalHandlers, services, deps) {
33
+ export async function addBot(options, signalHandlers, services, wallet, aztecNode, telemetry, aztecNodeAdmin, userLog) {
23
34
  const config = extractRelevantOptions(options, botConfigMappings, 'bot');
24
- const botRunner = new BotRunner(config, deps);
35
+ userLog?.(`Starting bot with config ${stringifyConfig(config)}`);
36
+ const db = await (config.dataDirectory ? createStore('bot', BotStore.SCHEMA_VERSION, config) : openTmpStore('bot', true, config.dataStoreMapSizeKb));
37
+ const store = new BotStore(db);
38
+ await store.cleanupOldClaims();
39
+ const botRunner = new BotRunner(config, wallet, aztecNode, telemetry, aztecNodeAdmin, store);
25
40
  if (!config.noStart) {
26
41
  void botRunner.start(); // Do not block since bot setup takes time
27
42
  }
@@ -1,7 +1,8 @@
1
1
  import { type AztecNodeConfig } from '@aztec/aztec-node';
2
+ import { type NetworkNames } from '@aztec/foundation/config';
2
3
  import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
3
4
  import type { LogFn } from '@aztec/foundation/log';
4
- export declare function startNode(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, userLog: LogFn): Promise<{
5
+ export declare function startNode(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, adminServices: NamespacedApiHandlers, userLog: LogFn, networkName: NetworkNames): Promise<{
5
6
  config: AztecNodeConfig;
6
7
  }>;
7
- //# sourceMappingURL=start_node.d.ts.map
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfbm9kZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL3N0YXJ0X25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUE2QyxNQUFNLG1CQUFtQixDQUFDO0FBS3BHLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBZSxNQUFNLDBCQUEwQixDQUFDO0FBQzFFLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE4Qm5ELHdCQUFzQixTQUFTLENBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQ1osY0FBYyxFQUFFLENBQUMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUN2QyxRQUFRLEVBQUUscUJBQXFCLEVBQy9CLGFBQWEsRUFBRSxxQkFBcUIsRUFDcEMsT0FBTyxFQUFFLEtBQUssRUFDZCxXQUFXLEVBQUUsWUFBWSxHQUN4QixPQUFPLENBQUM7SUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFBO0NBQUUsQ0FBQyxDQTRKdEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"start_node.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAA6C,MAAM,mBAAmB,CAAC;AAEpG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAgBnD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA6HtC"}
1
+ {"version":3,"file":"start_node.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAA6C,MAAM,mBAAmB,CAAC;AAKpG,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AA8BnD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,aAAa,EAAE,qBAAqB,EACpC,OAAO,EAAE,KAAK,EACd,WAAW,EAAE,YAAY,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA4JtC"}
@@ -1,87 +1,96 @@
1
- import { getInitialTestAccounts } from '@aztec/accounts/testing';
2
1
  import { aztecNodeConfigMappings, getConfigEnvVars } from '@aztec/aztec-node';
3
- import { NULL_KEY } from '@aztec/ethereum';
4
- import { AztecNodeApiSchema } from '@aztec/stdlib/interfaces/client';
5
- import { P2PApiSchema } from '@aztec/stdlib/interfaces/server';
6
- import { initTelemetryClient, telemetryClientConfigMappings } from '@aztec/telemetry-client';
7
- import { getGenesisValues } from '@aztec/world-state/testing';
8
- import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
9
- import { createAztecNode, deployContractsToL1 } from '../../sandbox/index.js';
10
- import { getL1Config } from '../get_l1_config.js';
11
- import { extractNamespacedOptions, extractRelevantOptions } from '../util.js';
12
- export async function startNode(options, signalHandlers, services, userLog) {
13
- // options specifically namespaced with --node.<option>
14
- const nodeSpecificOptions = extractNamespacedOptions(options, 'node');
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import { getL1Config } from '@aztec/cli/config';
4
+ import { getPublicClient } from '@aztec/ethereum/client';
5
+ import { getGenesisStateConfigEnvVars } from '@aztec/ethereum/config';
6
+ import { SecretValue } from '@aztec/foundation/config';
7
+ import { Agent, makeUndiciFetch } from '@aztec/foundation/json-rpc/undici';
8
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
9
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
10
+ import { ProvingJobConsumerSchema, createProvingJobBrokerClient, proverBrokerBackoff } from '@aztec/prover-client/broker';
11
+ import { allPxeConfigMappings } from '@aztec/pxe/config';
12
+ import { AztecNodeAdminApiSchema, AztecNodeApiSchema } from '@aztec/stdlib/interfaces/client';
13
+ import { P2PApiSchema, ProverNodeApiSchema } from '@aztec/stdlib/interfaces/server';
14
+ import { initTelemetryClient, makeTracedFetch, telemetryClientConfigMappings } from '@aztec/telemetry-client';
15
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
16
+ import { createAztecNode } from '../../local-network/index.js';
17
+ import { extractNamespacedOptions, extractRelevantOptions, preloadCrsDataForVerifying, setupVersionChecker } from '../util.js';
18
+ import { getVersions } from '../versioning.js';
19
+ import { computeExpectedGenesisRoot, waitForCompatibleRollup } from './standby.js';
20
+ import { startProverBroker } from './start_prover_broker.js';
21
+ export async function startNode(options, signalHandlers, services, adminServices, userLog, networkName) {
22
+ // All options set from environment variables
23
+ const configFromEnvVars = getConfigEnvVars();
24
+ // Extract relevant options from command line arguments
25
+ const relevantOptions = extractRelevantOptions(options, aztecNodeConfigMappings, 'node');
15
26
  // All options that are relevant to the Aztec Node
16
27
  let nodeConfig = {
17
- ...getConfigEnvVars(),
18
- ...extractRelevantOptions(options, aztecNodeConfigMappings, 'node')
28
+ ...configFromEnvVars,
29
+ ...relevantOptions
19
30
  };
31
+ // Prover node configuration and broker setup
32
+ // REFACTOR: Move the broker setup out of here and into the prover-node factory
33
+ let broker = undefined;
20
34
  if (options.proverNode) {
21
- userLog(`Running a Prover Node within a Node is not yet supported`);
22
- process.exit(1);
23
- }
24
- const initialFundedAccounts = nodeConfig.testAccounts ? await getInitialTestAccounts() : [];
25
- const { genesisBlockHash, genesisArchiveRoot, prefilledPublicData } = await getGenesisValues(initialFundedAccounts.map((a)=>a.address));
26
- // Deploy contracts if needed
27
- if (nodeSpecificOptions.deployAztecContracts || nodeSpecificOptions.deployAztecContractsSalt) {
28
- let account;
29
- if (nodeSpecificOptions.publisherPrivateKey) {
30
- account = privateKeyToAccount(nodeSpecificOptions.publisherPrivateKey);
31
- } else if (options.l1Mnemonic) {
32
- account = mnemonicToAccount(options.l1Mnemonic);
33
- } else {
34
- throw new Error('--node.publisherPrivateKey or --l1-mnemonic is required to deploy L1 contracts');
35
+ nodeConfig.enableProverNode = true;
36
+ if (nodeConfig.proverAgentCount === 0) {
37
+ userLog(`Running prover node without local prover agent. Connect prover agents or pass --proverAgent.proverAgentCount`);
35
38
  }
36
- // REFACTOR: We should not be calling a method from sandbox on the prod start flow
37
- await deployContractsToL1(nodeConfig, account, undefined, {
38
- assumeProvenThroughBlockNumber: nodeSpecificOptions.assumeProvenThroughBlockNumber,
39
- salt: nodeSpecificOptions.deployAztecContractsSalt,
40
- genesisBlockHash,
41
- genesisArchiveRoot
42
- });
43
- } else {
44
- if (!nodeConfig.l1Contracts.registryAddress || nodeConfig.l1Contracts.registryAddress.isZero()) {
45
- throw new Error('L1 registry address is required to start Aztec Node without --deploy-aztec-contracts option');
39
+ if (nodeConfig.proverBrokerUrl) {
40
+ // at 1TPS we'd enqueue ~1k chonk verifier proofs and ~1k AVM proofs immediately
41
+ // set a lower connection limit such that we don't overload the server
42
+ // Retry indefinitely until the epoch proving times out and the chain reorgs
43
+ const fetch = makeTracedFetch(proverBrokerBackoff, false, makeUndiciFetch(new Agent({
44
+ connections: 100
45
+ })));
46
+ broker = createProvingJobBrokerClient(nodeConfig.proverBrokerUrl, getVersions(nodeConfig), fetch);
47
+ } else if (options.proverBroker) {
48
+ ({ broker } = await startProverBroker(options, signalHandlers, services, userLog));
49
+ } else {
50
+ userLog(`--prover-broker-url or --prover-broker is required to start a Prover Node`);
51
+ process.exit(1);
46
52
  }
47
- const { addresses, config } = await getL1Config(nodeConfig.l1Contracts.registryAddress, nodeConfig.l1RpcUrls, nodeConfig.l1ChainId);
48
- // TODO(#12272): will clean this up.
49
- nodeConfig = {
50
- ...nodeConfig,
51
- l1Contracts: {
52
- ...addresses,
53
- slashFactoryAddress: nodeConfig.l1Contracts.slashFactoryAddress
54
- },
55
- ...config
56
- };
57
53
  }
58
- // if no publisher private key, then use l1Mnemonic
59
- if (!options.archiver) {
60
- // expect archiver url in node config
61
- const archiverUrl = nodeConfig.archiverUrl;
62
- if (!archiverUrl) {
63
- userLog('Archiver Service URL is required to start Aztec Node without --archiver option');
64
- throw new Error('Archiver Service URL is required to start Aztec Node without --archiver option');
65
- }
66
- nodeConfig.archiverUrl = archiverUrl;
54
+ await preloadCrsDataForVerifying(nodeConfig, userLog);
55
+ const genesisConfig = getGenesisStateConfigEnvVars();
56
+ const { genesisArchiveRoot, genesis } = await computeExpectedGenesisRoot(genesisConfig, userLog);
57
+ const followsCanonicalRollup = typeof nodeConfig.rollupVersion !== 'number' || nodeConfig.rollupVersion === 'canonical';
58
+ if (!nodeConfig.registryAddress || nodeConfig.registryAddress.isZero()) {
59
+ throw new Error('L1 registry address is required to start Aztec Node');
67
60
  }
68
- if (!options.sequencer) {
61
+ // Wait for a compatible rollup before proceeding with full L1 config fetch.
62
+ // This prevents crashes when the canonical rollup hasn't been upgraded yet.
63
+ await waitForCompatibleRollup(nodeConfig, {
64
+ genesisArchiveRoot,
65
+ vkTreeRoot: getVKTreeRoot(),
66
+ protocolContractsHash
67
+ }, options.port, userLog);
68
+ const { addresses, config } = await getL1Config(nodeConfig.registryAddress, nodeConfig.l1RpcUrls, nodeConfig.l1ChainId, nodeConfig.rollupVersion);
69
+ process.env.ROLLUP_CONTRACT_ADDRESS ??= addresses.rollupAddress.toString();
70
+ if (!Fr.fromHexString(config.genesisArchiveTreeRoot).equals(genesisArchiveRoot)) {
71
+ throw new Error(`The computed genesis archive tree root ${genesisArchiveRoot} does not match the expected genesis archive tree root ${config.genesisArchiveTreeRoot} for the rollup deployed at ${addresses.rollupAddress}`);
72
+ }
73
+ nodeConfig = {
74
+ ...nodeConfig,
75
+ ...addresses,
76
+ ...config
77
+ };
78
+ if (!options.sequencer && !nodeConfig.fishermanMode) {
69
79
  nodeConfig.disableValidator = true;
70
80
  } else {
71
- const sequencerConfig = extractNamespacedOptions(options, 'sequencer');
72
- let account;
73
- if (!sequencerConfig.publisherPrivateKey || sequencerConfig.publisherPrivateKey === NULL_KEY) {
74
- if (!options.l1Mnemonic) {
75
- userLog('--sequencer.publisherPrivateKey or --l1-mnemonic is required to start Aztec Node with --sequencer option');
76
- throw new Error('Private key or Mnemonic is required to start Aztec Node with --sequencer option');
77
- } else {
78
- account = mnemonicToAccount(options.l1Mnemonic);
79
- const privKey = account.getHdKey().privateKey;
80
- nodeConfig.publisherPrivateKey = `0x${Buffer.from(privKey).toString('hex')}`;
81
+ const sequencerConfig = {
82
+ ...configFromEnvVars,
83
+ ...extractNamespacedOptions(options, 'sequencer')
84
+ };
85
+ // If no publisher private keys have been given, use the first validator key
86
+ if (sequencerConfig.sequencerPublisherPrivateKeys === undefined || !sequencerConfig.sequencerPublisherPrivateKeys.length) {
87
+ if (sequencerConfig.validatorPrivateKeys?.getValue().length) {
88
+ sequencerConfig.sequencerPublisherPrivateKeys = [
89
+ new SecretValue(sequencerConfig.validatorPrivateKeys.getValue()[0])
90
+ ];
81
91
  }
82
- } else {
83
- nodeConfig.publisherPrivateKey = sequencerConfig.publisherPrivateKey;
84
92
  }
93
+ nodeConfig.sequencerPublisherPrivateKeys = sequencerConfig.sequencerPublisherPrivateKeys;
85
94
  }
86
95
  if (nodeConfig.p2pEnabled) {
87
96
  // ensure bootstrapNodes is an array
@@ -90,12 +99,13 @@ export async function startNode(options, signalHandlers, services, userLog) {
90
99
  }
91
100
  }
92
101
  const telemetryConfig = extractRelevantOptions(options, telemetryClientConfigMappings, 'tel');
93
- const telemetry = initTelemetryClient(telemetryConfig);
102
+ const telemetry = await initTelemetryClient(telemetryConfig);
94
103
  // Create and start Aztec Node
95
104
  const node = await createAztecNode(nodeConfig, {
96
- telemetry
105
+ telemetry,
106
+ proverBroker: broker
97
107
  }, {
98
- prefilledPublicData
108
+ genesis
99
109
  });
100
110
  // Add node and p2p to services list
101
111
  services.node = [
@@ -106,24 +116,41 @@ export async function startNode(options, signalHandlers, services, userLog) {
106
116
  node.getP2P(),
107
117
  P2PApiSchema
108
118
  ];
119
+ adminServices.nodeAdmin = [
120
+ node,
121
+ AztecNodeAdminApiSchema
122
+ ];
123
+ // Register prover-node services if the prover node subsystem is running
124
+ const proverNode = node.getProverNode();
125
+ if (proverNode) {
126
+ services.prover = [
127
+ proverNode,
128
+ ProverNodeApiSchema
129
+ ];
130
+ if (!nodeConfig.proverBrokerUrl) {
131
+ services.provingJobSource = [
132
+ proverNode.getProver().getProvingJobSource(),
133
+ ProvingJobConsumerSchema
134
+ ];
135
+ }
136
+ }
109
137
  // Add node stop function to signal handlers
110
138
  signalHandlers.push(node.stop.bind(node));
111
- // Add a PXE client that connects to this node if requested
112
- let pxe;
113
- if (options.pxe) {
114
- const { addPXE } = await import('./start_pxe.js');
115
- ({ pxe } = await addPXE(options, signalHandlers, services, userLog, {
116
- node
117
- }));
118
- }
119
139
  // Add a txs bot if requested
120
140
  if (options.bot) {
121
141
  const { addBot } = await import('./start_bot.js');
122
- await addBot(options, signalHandlers, services, {
123
- pxe,
124
- node,
125
- telemetry
142
+ const pxeConfig = extractRelevantOptions(options, allPxeConfigMappings, 'pxe');
143
+ const wallet = await EmbeddedWallet.create(node, {
144
+ pxeConfig
126
145
  });
146
+ await addBot(options, signalHandlers, services, wallet, node, telemetry, undefined);
147
+ }
148
+ if (nodeConfig.enableVersionCheck && networkName !== 'local') {
149
+ const cacheDir = process.env.DATA_DIRECTORY ? `${process.env.DATA_DIRECTORY}/cache` : undefined;
150
+ try {
151
+ await setupVersionChecker(networkName, followsCanonicalRollup, getPublicClient(nodeConfig), signalHandlers, cacheDir);
152
+ } catch {
153
+ /* no-op */ }
127
154
  }
128
155
  return {
129
156
  config: nodeConfig
@@ -1,6 +1,6 @@
1
1
  import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
2
- import { type LogFn } from '@aztec/foundation/log';
2
+ import type { LogFn } from '@aztec/foundation/log';
3
3
  export declare function startP2PBootstrap(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, userLog: LogFn): Promise<{
4
4
  config: import("@aztec/stdlib/config").ChainConfig;
5
5
  }>;
6
- //# sourceMappingURL=start_p2p_bootstrap.d.ts.map
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfcDJwX2Jvb3RzdHJhcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL3N0YXJ0X3AycF9ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWFuRCx3QkFBc0IsaUJBQWlCLENBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQ1osY0FBYyxFQUFFLENBQUMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUN2QyxRQUFRLEVBQUUscUJBQXFCLEVBQy9CLE9BQU8sRUFBRSxLQUFLOztHQWlCZiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"start_p2p_bootstrap.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_p2p_bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AASjE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK;;GAaf"}
1
+ {"version":3,"file":"start_p2p_bootstrap.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_p2p_bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAanD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK;;GAiBf"}
@@ -1,17 +1,21 @@
1
1
  import { jsonStringify } from '@aztec/foundation/json-rpc';
2
- import { createLogger } from '@aztec/foundation/log';
3
2
  import { createStore } from '@aztec/kv-store/lmdb-v2';
4
3
  import { BootstrapNode, bootnodeConfigMappings } from '@aztec/p2p';
5
4
  import { emptyChainConfig } from '@aztec/stdlib/config';
6
5
  import { P2PBootstrapApiSchema } from '@aztec/stdlib/interfaces/server';
7
- import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
6
+ import { initTelemetryClient, telemetryClientConfigMappings } from '@aztec/telemetry-client';
8
7
  import { extractRelevantOptions } from '../util.js';
9
8
  export async function startP2PBootstrap(options, signalHandlers, services, userLog) {
10
9
  // Start a P2P bootstrap node.
11
10
  const config = extractRelevantOptions(options, bootnodeConfigMappings, 'p2p');
12
- userLog(`Starting P2P bootstrap node with config: ${jsonStringify(config)}`);
13
- const telemetryClient = initTelemetryClient(getTelemetryClientConfig());
14
- const store = await createStore('p2p-bootstrap', 1, config, createLogger('p2p:bootstrap:store'));
11
+ const safeConfig = {
12
+ ...config,
13
+ peerIdPrivateKey: '<redacted>'
14
+ };
15
+ userLog(`Starting P2P bootstrap node with config: ${jsonStringify(safeConfig)}`);
16
+ const telemetryConfig = extractRelevantOptions(options, telemetryClientConfigMappings, 'tel');
17
+ const telemetryClient = await initTelemetryClient(telemetryConfig);
18
+ const store = await createStore('p2p-bootstrap', 1, config);
15
19
  const node = new BootstrapNode(store, telemetryClient);
16
20
  await node.start(config);
17
21
  signalHandlers.push(()=>node.stop());
@@ -19,7 +23,7 @@ export async function startP2PBootstrap(options, signalHandlers, services, userL
19
23
  node,
20
24
  P2PBootstrapApiSchema
21
25
  ];
22
- userLog(`P2P bootstrap node started on ${config.udpListenAddress}`);
26
+ userLog(`P2P bootstrap node started on ${config.p2pIp}:${config.p2pPort}`);
23
27
  return {
24
28
  config: emptyChainConfig
25
29
  };
@@ -1,4 +1,4 @@
1
1
  import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
2
2
  import type { LogFn } from '@aztec/foundation/log';
3
3
  export declare function startProverAgent(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, userLog: LogFn): Promise<void>;
4
- //# sourceMappingURL=start_prover_agent.d.ts.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfcHJvdmVyX2FnZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3RhcnRfcHJvdmVyX2FnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFpQm5ELHdCQUFzQixnQkFBZ0IsQ0FDcEMsT0FBTyxFQUFFLEdBQUcsRUFDWixjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLFFBQVEsRUFBRSxxQkFBcUIsRUFDL0IsT0FBTyxFQUFFLEtBQUssaUJBb0RmIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"start_prover_agent.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAenD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,iBA6Cf"}
1
+ {"version":3,"file":"start_prover_agent.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAiBnD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,iBAoDf"}
@@ -1,14 +1,15 @@
1
1
  import { times } from '@aztec/foundation/collection';
2
2
  import { Agent, makeUndiciFetch } from '@aztec/foundation/json-rpc/undici';
3
3
  import { buildServerCircuitProver } from '@aztec/prover-client';
4
- import { InlineProofStore, ProvingAgent, createProvingJobBrokerClient, proverAgentConfigMappings } from '@aztec/prover-client/broker';
4
+ import { ProvingAgent, createProofStore, createProvingJobBrokerClient, proverAgentConfigMappings, proverBrokerBackoff } from '@aztec/prover-client/broker';
5
5
  import { getProverNodeAgentConfigFromEnv } from '@aztec/prover-node';
6
+ import { ProverAgentApiSchema } from '@aztec/stdlib/interfaces/server';
6
7
  import { initTelemetryClient, makeTracedFetch, telemetryClientConfigMappings } from '@aztec/telemetry-client';
7
- import { extractRelevantOptions } from '../util.js';
8
+ import { extractRelevantOptions, preloadCrsDataForServerSideProving } from '../util.js';
8
9
  import { getVersions } from '../versioning.js';
9
10
  export async function startProverAgent(options, signalHandlers, services, userLog) {
10
- if (options.node || options.sequencer || options.pxe || options.p2pBootstrap || options.txe) {
11
- userLog(`Starting a prover agent with --node, --sequencer, --pxe, --p2p-bootstrap, or --txe is not supported.`);
11
+ if (options.node || options.sequencer || options.p2pBootstrap || options.txe) {
12
+ userLog(`Starting a prover agent with --node, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
12
13
  process.exit(1);
13
14
  }
14
15
  const config = {
@@ -16,23 +17,39 @@ export async function startProverAgent(options, signalHandlers, services, userLo
16
17
  ...extractRelevantOptions(options, proverAgentConfigMappings, 'proverAgent')
17
18
  };
18
19
  if (config.realProofs && (!config.bbBinaryPath || !config.acvmBinaryPath)) {
20
+ userLog(`Requested real proving but no path to bb or acvm binaries provided`);
19
21
  process.exit(1);
20
22
  }
21
23
  if (!config.proverBrokerUrl) {
24
+ userLog(`Missing prover broker URL. Pass --proverAgent.proverBrokerUrl <value>`);
22
25
  process.exit(1);
23
26
  }
24
- const fetch = makeTracedFetch([
25
- 1,
26
- 2,
27
- 3
28
- ], false, makeUndiciFetch(new Agent({
27
+ await preloadCrsDataForServerSideProving(config, userLog);
28
+ // Retry indefinitely until the epoch proving times out and the chain reorgs
29
+ const fetch = makeTracedFetch(proverBrokerBackoff, false, makeUndiciFetch(new Agent({
29
30
  connections: 10
30
31
  })));
31
32
  const broker = createProvingJobBrokerClient(config.proverBrokerUrl, getVersions(), fetch);
32
- const telemetry = initTelemetryClient(extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'));
33
+ const telemetry = await initTelemetryClient(extractRelevantOptions(options, telemetryClientConfigMappings, 'tel'));
33
34
  const prover = await buildServerCircuitProver(config, telemetry);
34
- const proofStore = new InlineProofStore();
35
- const agents = times(config.proverAgentCount, ()=>new ProvingAgent(broker, proofStore, prover, config.proverAgentProofTypes, config.proverAgentPollIntervalMs, telemetry));
35
+ const proofStore = await createProofStore(config.proofStore);
36
+ const agents = times(config.proverAgentCount, ()=>new ProvingAgent(broker, proofStore, prover, config.proverAgentProofTypes, config.proverAgentPollIntervalMs));
37
+ // expose all agents as individual services
38
+ for(let i = 0; i < agents.length; i++){
39
+ services[`agent${i}`] = [
40
+ agents[i],
41
+ ProverAgentApiSchema,
42
+ ()=>agents[i].getStatus().status !== 'stopped'
43
+ ];
44
+ }
45
+ // shortcut in the most common case of having a single running agent
46
+ if (agents.length === 1) {
47
+ services[`agent`] = [
48
+ agents[0],
49
+ ProverAgentApiSchema,
50
+ ()=>agents[0].getStatus().status !== 'stopped'
51
+ ];
52
+ }
36
53
  await Promise.all(agents.map((agent)=>agent.start()));
37
54
  signalHandlers.push(async ()=>{
38
55
  await Promise.all(agents.map((agent)=>agent.stop()));
@@ -6,4 +6,4 @@ export declare function startProverBroker(options: any, signalHandlers: (() => P
6
6
  broker: ProvingJobBroker;
7
7
  config: ProverBrokerConfig;
8
8
  }>;
9
- //# sourceMappingURL=start_prover_broker.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfcHJvdmVyX2Jyb2tlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL3N0YXJ0X3Byb3Zlcl9icm9rZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBTXhFLHdCQUFzQixpQkFBaUIsQ0FDckMsT0FBTyxFQUFFLEdBQUcsRUFDWixjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLFFBQVEsRUFBRSxxQkFBcUIsRUFDL0IsT0FBTyxFQUFFLEtBQUssR0FDYixPQUFPLENBQUM7SUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUE7Q0FBRSxDQUFDLENBMkNuRSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"start_prover_broker.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMxE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAyBnE"}
1
+ {"version":3,"file":"start_prover_broker.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_prover_broker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMxE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,KAAK,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,CA2CnE"}
@@ -1,27 +1,42 @@
1
- import { ProvingJobBrokerSchema, createAndStartProvingBroker, proverBrokerConfigMappings } from '@aztec/prover-client/broker';
1
+ import { getL1Config } from '@aztec/cli/config';
2
+ import { getGenesisStateConfigEnvVars } from '@aztec/ethereum/config';
3
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
4
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
5
+ import { ProvingJobBrokerSchema, ProvingJobBrokerSchemaWithDebug, createAndStartProvingBroker, proverBrokerConfigMappings } from '@aztec/prover-client/broker';
2
6
  import { getProverNodeBrokerConfigFromEnv } from '@aztec/prover-node';
3
7
  import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
4
- import { getL1Config } from '../get_l1_config.js';
5
8
  import { extractRelevantOptions } from '../util.js';
9
+ import { computeExpectedGenesisRoot, waitForCompatibleRollup } from './standby.js';
6
10
  export async function startProverBroker(options, signalHandlers, services, userLog) {
7
- if (options.node || options.sequencer || options.pxe || options.p2pBootstrap || options.txe) {
8
- userLog(`Starting a prover broker with --node, --sequencer, --pxe, --p2p-bootstrap, or --txe is not supported.`);
11
+ if (options.node || options.sequencer || options.p2pBootstrap || options.txe) {
12
+ userLog(`Starting a prover broker with --node, --sequencer, --p2p-bootstrap, or --txe is not supported.`);
9
13
  process.exit(1);
10
14
  }
11
- const config = {
15
+ const baseConfig = {
12
16
  ...getProverNodeBrokerConfigFromEnv(),
13
17
  ...extractRelevantOptions(options, proverBrokerConfigMappings, 'proverBroker')
14
18
  };
15
- if (!config.l1Contracts.registryAddress || config.l1Contracts.registryAddress.isZero()) {
19
+ if (!baseConfig.registryAddress || baseConfig.registryAddress.isZero()) {
16
20
  throw new Error('L1 registry address is required to start Aztec Node without --deploy-aztec-contracts option');
17
21
  }
18
- const { addresses } = await getL1Config(config.l1Contracts.registryAddress, config.l1RpcUrls, config.l1ChainId);
19
- config.l1Contracts = addresses;
20
- const client = initTelemetryClient(getTelemetryClientConfig());
22
+ const genesisConfig = getGenesisStateConfigEnvVars();
23
+ const { genesisArchiveRoot } = await computeExpectedGenesisRoot(genesisConfig, userLog);
24
+ await waitForCompatibleRollup(baseConfig, {
25
+ genesisArchiveRoot,
26
+ vkTreeRoot: getVKTreeRoot(),
27
+ protocolContractsHash
28
+ }, options.port, userLog);
29
+ const { addresses, config: rollupConfig } = await getL1Config(baseConfig.registryAddress, baseConfig.l1RpcUrls, baseConfig.l1ChainId, baseConfig.rollupVersion);
30
+ const config = {
31
+ ...baseConfig,
32
+ ...addresses,
33
+ rollupVersion: rollupConfig.rollupVersion
34
+ };
35
+ const client = await initTelemetryClient(getTelemetryClientConfig());
21
36
  const broker = await createAndStartProvingBroker(config, client);
22
37
  services.proverBroker = [
23
38
  broker,
24
- ProvingJobBrokerSchema
39
+ config.proverBrokerDebugReplayEnabled ? ProvingJobBrokerSchemaWithDebug : ProvingJobBrokerSchema
25
40
  ];
26
41
  signalHandlers.push(()=>broker.stop());
27
42
  return {
@@ -1,3 +1,3 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
- export declare function startTXE(options: any, debugLogger: Logger): Promise<void>;
3
- //# sourceMappingURL=start_txe.d.ts.map
2
+ export declare function startTXE(options: any, signalHandlers: Array<() => Promise<void>>, debugLogger: Logger): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfdHhlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3RhcnRfdHhlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3BELHdCQUFzQixRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBWTNHIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"start_txe.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_txe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAU/D"}
1
+ {"version":3,"file":"start_txe.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_txe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,iBAY3G"}
@@ -1,11 +1,12 @@
1
1
  import { startHttpRpcServer } from '@aztec/foundation/json-rpc/server';
2
- import { createTXERpcServer } from '@aztec/txe';
3
- export async function startTXE(options, debugLogger) {
2
+ import { createTXERpcServer } from '@aztec/txe/server';
3
+ export async function startTXE(options, signalHandlers, debugLogger) {
4
4
  debugLogger.info(`Setting up TXE...`);
5
- const txeServer = createTXERpcServer(debugLogger);
6
- const { port } = await startHttpRpcServer(txeServer, {
5
+ const txeServer = await createTXERpcServer(debugLogger);
6
+ const httpServer = await startHttpRpcServer(txeServer, {
7
7
  port: options.port,
8
8
  timeoutMs: 1e3 * 60 * 5
9
9
  });
10
- debugLogger.info(`TXE listening on port ${port}`);
10
+ signalHandlers.push(()=>new Promise((resolve)=>httpServer.close(()=>resolve())));
11
+ debugLogger.info(`TXE listening on port ${httpServer.port}`);
11
12
  }
@@ -0,0 +1,21 @@
1
+ export interface CompiledArtifact {
2
+ noir_version: string;
3
+ file_map: unknown;
4
+ functions: ContractFunction[];
5
+ bytecode?: string;
6
+ }
7
+ export interface ContractFunction {
8
+ name: string;
9
+ abi: unknown;
10
+ bytecode: string;
11
+ debug_symbols: unknown;
12
+ is_unconstrained?: boolean;
13
+ }
14
+ export interface ArtifactFile {
15
+ name: string;
16
+ filePath: string;
17
+ content: CompiledArtifact;
18
+ }
19
+ /** Reads all JSON artifact files from a target directory and returns their parsed contents. */
20
+ export declare function readArtifactFiles(targetDir: string): Promise<ArtifactFile[]>;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NtZHMvdXRpbHMvYXJ0aWZhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUNyQixRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQ2xCLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlCLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNuQjtBQUVELE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEdBQUcsRUFBRSxPQUFPLENBQUM7SUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDdkIsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDNUI7QUFFRCxNQUFNLFdBQVcsWUFBWTtJQUMzQixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixPQUFPLEVBQUUsZ0JBQWdCLENBQUM7Q0FDM0I7QUFFRCwrRkFBK0Y7QUFDL0Ysd0JBQXNCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBa0JsRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../src/cli/cmds/utils/artifacts.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,+FAA+F;AAC/F,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBlF"}
@@ -0,0 +1,24 @@
1
+ import { readFile, readdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ /** Reads all JSON artifact files from a target directory and returns their parsed contents. */ export async function readArtifactFiles(targetDir) {
4
+ let entries;
5
+ try {
6
+ entries = (await readdir(targetDir)).filter((f)=>f.endsWith('.json'));
7
+ } catch (err) {
8
+ if (err?.code === 'ENOENT') {
9
+ throw new Error(`Target directory '${targetDir}' does not exist. Compile first with 'aztec compile'.`);
10
+ }
11
+ throw err;
12
+ }
13
+ const artifacts = [];
14
+ for (const file of entries){
15
+ const filePath = join(targetDir, file);
16
+ const content = JSON.parse(await readFile(filePath, 'utf-8'));
17
+ artifacts.push({
18
+ name: file.replace('.json', ''),
19
+ filePath,
20
+ content
21
+ });
22
+ }
23
+ return artifacts;
24
+ }