@aztec/aztec 3.0.3 → 4.0.0-devnet.1-patch.1

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 (76) hide show
  1. package/dest/bin/index.js +2 -0
  2. package/dest/cli/aztec_start_action.d.ts +1 -1
  3. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  4. package/dest/cli/aztec_start_action.js +6 -4
  5. package/dest/cli/aztec_start_options.d.ts +1 -1
  6. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  7. package/dest/cli/aztec_start_options.js +9 -15
  8. package/dest/cli/cli.d.ts +1 -1
  9. package/dest/cli/cli.d.ts.map +1 -1
  10. package/dest/cli/cli.js +9 -53
  11. package/dest/cli/cmds/migrate_ha_db.d.ts +3 -0
  12. package/dest/cli/cmds/migrate_ha_db.d.ts.map +1 -0
  13. package/dest/cli/cmds/migrate_ha_db.js +27 -0
  14. package/dest/cli/cmds/start_archiver.d.ts +1 -1
  15. package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
  16. package/dest/cli/cmds/start_archiver.js +10 -12
  17. package/dest/cli/cmds/start_bot.d.ts +3 -3
  18. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  19. package/dest/cli/cmds/start_bot.js +4 -2
  20. package/dest/cli/cmds/start_node.js +4 -2
  21. package/dest/cli/cmds/start_p2p_bootstrap.d.ts +2 -2
  22. package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -1
  23. package/dest/cli/cmds/start_p2p_bootstrap.js +1 -2
  24. package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
  25. package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
  26. package/dest/cli/cmds/start_prover_agent.js +3 -3
  27. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  28. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  29. package/dest/cli/cmds/start_prover_broker.js +2 -2
  30. package/dest/cli/util.d.ts +4 -14
  31. package/dest/cli/util.d.ts.map +1 -1
  32. package/dest/cli/util.js +7 -6
  33. package/dest/examples/token.js +5 -5
  34. package/dest/local-network/banana_fpc.d.ts +1 -1
  35. package/dest/local-network/banana_fpc.d.ts.map +1 -1
  36. package/dest/local-network/banana_fpc.js +2 -2
  37. package/dest/local-network/local-network.d.ts +4 -5
  38. package/dest/local-network/local-network.d.ts.map +1 -1
  39. package/dest/local-network/local-network.js +32 -22
  40. package/dest/testing/cheat_codes.d.ts +3 -1
  41. package/dest/testing/cheat_codes.d.ts.map +1 -1
  42. package/dest/testing/epoch_test_settler.d.ts +19 -0
  43. package/dest/testing/epoch_test_settler.d.ts.map +1 -0
  44. package/dest/testing/epoch_test_settler.js +62 -0
  45. package/dest/testing/index.d.ts +2 -1
  46. package/dest/testing/index.d.ts.map +1 -1
  47. package/dest/testing/index.js +1 -0
  48. package/package.json +37 -35
  49. package/scripts/aztec.sh +63 -0
  50. package/scripts/compile.sh +44 -0
  51. package/scripts/extract_function.js +47 -0
  52. package/scripts/flamegraph.sh +59 -0
  53. package/scripts/init.sh +35 -0
  54. package/scripts/new.sh +59 -0
  55. package/scripts/setup_project.sh +31 -0
  56. package/src/bin/index.ts +2 -0
  57. package/src/cli/aztec_start_action.ts +5 -3
  58. package/src/cli/aztec_start_options.ts +8 -14
  59. package/src/cli/cli.ts +12 -56
  60. package/src/cli/cmds/migrate_ha_db.ts +43 -0
  61. package/src/cli/cmds/start_archiver.ts +6 -17
  62. package/src/cli/cmds/start_bot.ts +3 -3
  63. package/src/cli/cmds/start_node.ts +2 -2
  64. package/src/cli/cmds/start_p2p_bootstrap.ts +2 -2
  65. package/src/cli/cmds/start_prover_agent.ts +3 -11
  66. package/src/cli/cmds/start_prover_broker.ts +5 -1
  67. package/src/cli/util.ts +8 -20
  68. package/src/examples/token.ts +5 -7
  69. package/src/local-network/banana_fpc.ts +10 -6
  70. package/src/local-network/local-network.ts +41 -31
  71. package/src/testing/epoch_test_settler.ts +71 -0
  72. package/src/testing/index.ts +1 -0
  73. package/dest/cli/cmds/start_blob_sink.d.ts +0 -3
  74. package/dest/cli/cmds/start_blob_sink.d.ts.map +0 -1
  75. package/dest/cli/cmds/start_blob_sink.js +0 -33
  76. package/src/cli/cmds/start_blob_sink.ts +0 -57
@@ -2,7 +2,7 @@ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
2
  import { createAztecNodeClient } from '@aztec/aztec.js/node';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
5
- import { TestWallet } from '@aztec/test-wallet/server';
5
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
6
6
 
7
7
  const logger = createLogger('example:token');
8
8
 
@@ -19,7 +19,7 @@ const TRANSFER_AMOUNT = 33n;
19
19
  async function main() {
20
20
  logger.info('Running token contract test on HTTP interface.');
21
21
 
22
- const wallet = await TestWallet.create(node);
22
+ const wallet = await EmbeddedWallet.create(node);
23
23
 
24
24
  // During local network setup we deploy a few accounts. Below we add them to our wallet.
25
25
  const [aliceInitialAccountData, bobInitialAccountData] = await getInitialTestAccountsData();
@@ -32,14 +32,12 @@ async function main() {
32
32
  logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
33
33
 
34
34
  logger.info('Deploying Token...');
35
- const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18)
36
- .send({ from: alice })
37
- .deployed();
35
+ const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({ from: alice });
38
36
  logger.info('Token deployed');
39
37
 
40
38
  // Mint tokens to Alice
41
39
  logger.info(`Minting ${ALICE_MINT_BALANCE} more coins to Alice...`);
42
- await token.methods.mint_to_private(alice, ALICE_MINT_BALANCE).send({ from: alice }).wait();
40
+ await token.methods.mint_to_private(alice, ALICE_MINT_BALANCE).send({ from: alice });
43
41
 
44
42
  logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
45
43
 
@@ -48,7 +46,7 @@ async function main() {
48
46
 
49
47
  // We will now transfer tokens from Alice to Bob
50
48
  logger.info(`Transferring ${TRANSFER_AMOUNT} tokens from Alice to Bob...`);
51
- await token.methods.transfer(bob, TRANSFER_AMOUNT).send({ from: alice }).wait();
49
+ await token.methods.transfer(bob, TRANSFER_AMOUNT).send({ from: alice });
52
50
 
53
51
  // Check the new balances
54
52
  const aliceBalance = await token.methods.balance_of_private(alice).simulate({ from: alice });
@@ -49,12 +49,16 @@ export async function setupBananaFPC(initialAccounts: InitialAccountData[], wall
49
49
  const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
50
50
  const admin = getBananaAdmin(initialAccounts);
51
51
  const [bananaCoin, fpc] = await Promise.all([
52
- TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal)
53
- .send({ from: admin, contractAddressSalt: BANANA_COIN_SALT, universalDeploy: true })
54
- .deployed(),
55
- FPCContract.deploy(wallet, bananaCoinAddress, admin)
56
- .send({ from: admin, contractAddressSalt: BANANA_FPC_SALT, universalDeploy: true })
57
- .deployed(),
52
+ TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal).send({
53
+ from: admin,
54
+ contractAddressSalt: BANANA_COIN_SALT,
55
+ universalDeploy: true,
56
+ }),
57
+ FPCContract.deploy(wallet, bananaCoinAddress, admin).send({
58
+ from: admin,
59
+ contractAddressSalt: BANANA_FPC_SALT,
60
+ universalDeploy: true,
61
+ }),
58
62
  ]);
59
63
 
60
64
  log(`BananaCoin: ${bananaCoin.address}`);
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env -S node --no-warnings
2
- import { getInitialTestAccountsData } from '@aztec/accounts/testing/lazy';
2
+ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
3
3
  import { AztecNodeService } from '@aztec/aztec-node';
4
4
  import { type AztecNodeConfig, getConfigEnvVars } from '@aztec/aztec-node/config';
5
5
  import { Fr } from '@aztec/aztec.js/fields';
6
6
  import { createLogger } from '@aztec/aztec.js/log';
7
- import { type BlobSinkClientInterface, createBlobSinkClient } from '@aztec/blob-sink/client';
7
+ import { type BlobClientInterface, createBlobClient } from '@aztec/blob-client/client';
8
8
  import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
9
9
  import { createEthereumChain } from '@aztec/ethereum/chain';
10
10
  import { waitForPublicClient } from '@aztec/ethereum/client';
@@ -24,7 +24,8 @@ import {
24
24
  getConfigEnvVars as getTelemetryClientConfig,
25
25
  initTelemetryClient,
26
26
  } from '@aztec/telemetry-client';
27
- import { TestWallet, deployFundedSchnorrAccounts } from '@aztec/test-wallet/server';
27
+ import { EmbeddedWallet } from '@aztec/wallets/embedded';
28
+ import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
28
29
  import { getGenesisValues } from '@aztec/world-state/testing';
29
30
 
30
31
  import { type Hex, createPublicClient, fallback, http as httpViemTransport } from 'viem';
@@ -34,6 +35,7 @@ import { foundry } from 'viem/chains';
34
35
  import { createAccountLogs } from '../cli/util.js';
35
36
  import { DefaultMnemonic } from '../mnemonic.js';
36
37
  import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
38
+ import { EpochTestSettler } from '../testing/epoch_test_settler.js';
37
39
  import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
38
40
  import { getSponsoredFPCAddress } from './sponsored_fpc.js';
39
41
 
@@ -50,7 +52,6 @@ export async function deployContractsToL1(
50
52
  aztecNodeConfig: AztecNodeConfig,
51
53
  privateKey: Hex,
52
54
  opts: {
53
- assumeProvenThroughBlockNumber?: number;
54
55
  genesisArchiveRoot?: Fr;
55
56
  feeJuicePortalInitialBalance?: bigint;
56
57
  } = {},
@@ -97,7 +98,11 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
97
98
  if ((config.l1RpcUrls?.length || 0) > 1) {
98
99
  logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
99
100
  }
100
- const aztecNodeConfig: AztecNodeConfig = { ...getConfigEnvVars(), ...config };
101
+
102
+ const aztecNodeConfig: AztecNodeConfig = {
103
+ ...getConfigEnvVars(),
104
+ ...config,
105
+ };
101
106
  const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
102
107
  if (
103
108
  aztecNodeConfig.publisherPrivateKeys == undefined ||
@@ -134,18 +139,20 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
134
139
  : [];
135
140
  const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
136
141
 
137
- let watcher: AnvilTestWatcher | undefined = undefined;
138
142
  const dateProvider = new TestDateProvider();
143
+
144
+ let cheatcodes: EthCheatCodes | undefined;
145
+ let rollupAddress: EthAddress | undefined;
146
+ let watcher: AnvilTestWatcher | undefined;
139
147
  if (!aztecNodeConfig.p2pEnabled) {
140
- const l1ContractAddresses = await deployContractsToL1(
148
+ ({ rollupAddress } = await deployContractsToL1(
141
149
  aztecNodeConfig,
142
150
  aztecNodeConfig.validatorPrivateKeys.getValue()[0],
143
151
  {
144
- assumeProvenThroughBlockNumber: Number.MAX_SAFE_INTEGER,
145
152
  genesisArchiveRoot,
146
153
  feeJuicePortalInitialBalance: fundingNeeded,
147
154
  },
148
- );
155
+ ));
149
156
 
150
157
  const chain =
151
158
  aztecNodeConfig.l1RpcUrls.length > 0
@@ -157,36 +164,38 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
157
164
  transport: fallback([httpViemTransport(l1RpcUrl)]) as any,
158
165
  });
159
166
 
160
- watcher = new AnvilTestWatcher(
161
- new EthCheatCodes([l1RpcUrl], dateProvider),
162
- l1ContractAddresses.rollupAddress,
163
- publicClient,
164
- dateProvider,
165
- );
167
+ cheatcodes = new EthCheatCodes([l1RpcUrl], dateProvider);
168
+
169
+ watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider);
166
170
  watcher.setisLocalNetwork(true);
171
+ watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set.
172
+
167
173
  await watcher.start();
168
174
  }
169
175
 
170
176
  const telemetry = await initTelemetryClient(getTelemetryClientConfig());
171
- // Create a local blob sink client inside the local network, no http connectivity
172
- const blobSinkClient = createBlobSinkClient();
173
- const node = await createAztecNode(
174
- aztecNodeConfig,
175
- { telemetry, blobSinkClient, dateProvider },
176
- { prefilledPublicData },
177
- );
177
+ // Create a local blob client client inside the local network, no http connectivity
178
+ const blobClient = createBlobClient();
179
+ const node = await createAztecNode(aztecNodeConfig, { telemetry, blobClient, dateProvider }, { prefilledPublicData });
180
+
181
+ let epochTestSettler: EpochTestSettler | undefined;
182
+ if (!aztecNodeConfig.p2pEnabled) {
183
+ epochTestSettler = new EpochTestSettler(
184
+ cheatcodes!,
185
+ rollupAddress!,
186
+ node.getBlockSource(),
187
+ logger.createChild('epoch-settler'),
188
+ { pollingIntervalMs: 200 },
189
+ );
190
+ await epochTestSettler.start();
191
+ }
178
192
 
179
193
  if (initialAccounts.length) {
180
- const PXEConfig = { proverEnabled: aztecNodeConfig.realProofs };
181
- const wallet = await TestWallet.create(node, PXEConfig);
194
+ const wallet = await EmbeddedWallet.create(node, { pxeConfig: { proverEnabled: aztecNodeConfig.realProofs } });
182
195
 
183
196
  userLog('Setting up funded test accounts...');
184
- const accountManagers = await deployFundedSchnorrAccounts(wallet, node, initialAccounts);
185
- const accountsWithSecrets = accountManagers.map((manager, i) => ({
186
- account: manager,
187
- secretKey: initialAccounts[i].secret,
188
- }));
189
- const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
197
+ const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
198
+ const accLogs = await createAccountLogs(accountManagers, wallet);
190
199
  userLog(accLogs.join(''));
191
200
 
192
201
  await setupBananaFPC(initialAccounts, wallet, userLog);
@@ -200,6 +209,7 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
200
209
  const stop = async () => {
201
210
  await node.stop();
202
211
  await watcher?.stop();
212
+ await epochTestSettler?.stop();
203
213
  };
204
214
 
205
215
  return { node, stop };
@@ -211,7 +221,7 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
211
221
  */
212
222
  export async function createAztecNode(
213
223
  config: Partial<AztecNodeConfig> = {},
214
- deps: { telemetry?: TelemetryClient; blobSinkClient?: BlobSinkClientInterface; dateProvider?: DateProvider } = {},
224
+ deps: { telemetry?: TelemetryClient; blobClient?: BlobClientInterface; dateProvider?: DateProvider } = {},
215
225
  options: { prefilledPublicData?: PublicDataTreeLeaf[] } = {},
216
226
  ) {
217
227
  // TODO(#12272): will clean this up. This is criminal.
@@ -0,0 +1,71 @@
1
+ import { Fr } from '@aztec/aztec.js/fields';
2
+ import { type EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
+ import { type EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
4
+ import type { Logger } from '@aztec/foundation/log';
5
+ import { EpochMonitor } from '@aztec/prover-node';
6
+ import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block';
7
+ import { computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging';
8
+
9
+ export class EpochTestSettler {
10
+ private rollupCheatCodes: RollupCheatCodes;
11
+ private epochMonitor?: EpochMonitor;
12
+
13
+ constructor(
14
+ cheatcodes: EthCheatCodes,
15
+ rollupAddress: EthAddress,
16
+ private l2BlockSource: L2BlockSource,
17
+ private log: Logger,
18
+ private options: { pollingIntervalMs: number; provingDelayMs?: number },
19
+ ) {
20
+ this.rollupCheatCodes = new RollupCheatCodes(cheatcodes, { rollupAddress });
21
+ }
22
+
23
+ async start() {
24
+ const { epochDuration } = await this.rollupCheatCodes.getConfig();
25
+ this.epochMonitor = new EpochMonitor(this.l2BlockSource, { epochDuration: Number(epochDuration) }, this.options);
26
+ this.epochMonitor.start(this);
27
+ }
28
+
29
+ async stop() {
30
+ await this.epochMonitor?.stop();
31
+ }
32
+
33
+ async handleEpochReadyToProve(epoch: EpochNumber): Promise<boolean> {
34
+ const checkpointedBlocks = await this.l2BlockSource.getCheckpointedBlocksForEpoch(epoch);
35
+ const blocks = checkpointedBlocks.map(b => b.block);
36
+ this.log.info(
37
+ `Settling epoch ${epoch} with blocks ${blocks[0]?.header.getBlockNumber()} to ${blocks.at(-1)?.header.getBlockNumber()}`,
38
+ { blocks: blocks.map(b => b.toBlockInfo()) },
39
+ );
40
+ const messagesInEpoch: Fr[][][][] = [];
41
+ let previousSlotNumber = SlotNumber.ZERO;
42
+ let checkpointIndex = -1;
43
+
44
+ for (const block of blocks) {
45
+ const slotNumber = block.header.globalVariables.slotNumber;
46
+ if (slotNumber !== previousSlotNumber) {
47
+ checkpointIndex++;
48
+ messagesInEpoch[checkpointIndex] = [];
49
+ previousSlotNumber = slotNumber;
50
+ }
51
+ messagesInEpoch[checkpointIndex].push(block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
52
+ }
53
+
54
+ const [firstMessage] = messagesInEpoch.flat(3);
55
+ if (firstMessage) {
56
+ const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, firstMessage);
57
+ await this.rollupCheatCodes.insertOutbox(epoch, outHash.toBigInt());
58
+ } else {
59
+ this.log.info(`No L2 to L1 messages in epoch ${epoch}`);
60
+ }
61
+
62
+ const lastCheckpoint = checkpointedBlocks.at(-1)?.checkpointNumber;
63
+ if (lastCheckpoint !== undefined) {
64
+ await this.rollupCheatCodes.markAsProven(lastCheckpoint);
65
+ } else {
66
+ this.log.warn(`No checkpoint found for epoch ${epoch}`);
67
+ }
68
+
69
+ return true;
70
+ }
71
+ }
@@ -1,3 +1,4 @@
1
1
  export { AnvilTestWatcher } from './anvil_test_watcher.js';
2
2
  export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
3
3
  export { CheatCodes } from './cheat_codes.js';
4
+ export { EpochTestSettler } from './epoch_test_settler.js';
@@ -1,3 +0,0 @@
1
- import type { LogFn } from '@aztec/foundation/log';
2
- export declare function startBlobSink(options: any, signalHandlers: (() => Promise<void>)[], userLog: LogFn): Promise<void>;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYmxvYl9zaW5rLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3RhcnRfYmxvYl9zaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS25ELHdCQUFzQixhQUFhLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssaUJBNEN4RyJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"start_blob_sink.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_blob_sink.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAKnD,wBAAsB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,iBA4CxG"}
@@ -1,33 +0,0 @@
1
- import { blobSinkConfigMappings, createBlobSinkServer, getBlobSinkConfigFromEnv } from '@aztec/blob-sink/server';
2
- import { getL1Config } from '@aztec/cli/config';
3
- import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
4
- import { extractRelevantOptions } from '../util.js';
5
- export async function startBlobSink(options, signalHandlers, userLog) {
6
- if (options.prover || options.node || options.sequencer || options.pxe || options.p2pBootstrap || options.txe) {
7
- userLog(`Starting a blob sink with --node, --sequencer, --pxe, --p2p-bootstrap, --prover or --txe is not supported.`);
8
- process.exit(1);
9
- }
10
- let blobSinkConfig = {
11
- ...getBlobSinkConfigFromEnv(),
12
- ...extractRelevantOptions(options, blobSinkConfigMappings, 'blobSink')
13
- };
14
- if (!blobSinkConfig.l1Contracts?.registryAddress || blobSinkConfig.l1Contracts.registryAddress.isZero()) {
15
- throw new Error('REGISTRY_CONTRACT_ADDRESS not set');
16
- }
17
- if (!blobSinkConfig.l1RpcUrls || blobSinkConfig.l1RpcUrls.length === 0) {
18
- throw new Error('ETHEREUM_HOSTS not set');
19
- }
20
- if (typeof blobSinkConfig.l1ChainId !== 'number') {
21
- throw new Error('L1_CHAIN_ID');
22
- }
23
- const telemetry = await initTelemetryClient(getTelemetryClientConfig());
24
- const { config: chainConfig, addresses } = await getL1Config(blobSinkConfig.l1Contracts.registryAddress, blobSinkConfig.l1RpcUrls, blobSinkConfig.l1ChainId, blobSinkConfig.rollupVersion);
25
- blobSinkConfig = {
26
- ...blobSinkConfig,
27
- l1Contracts: addresses,
28
- ...chainConfig
29
- };
30
- const blobSink = await createBlobSinkServer(blobSinkConfig, telemetry);
31
- signalHandlers.push(blobSink.stop.bind(blobSink));
32
- await blobSink.start();
33
- }
@@ -1,57 +0,0 @@
1
- import {
2
- type BlobSinkConfig,
3
- blobSinkConfigMappings,
4
- createBlobSinkServer,
5
- getBlobSinkConfigFromEnv,
6
- } from '@aztec/blob-sink/server';
7
- import { getL1Config } from '@aztec/cli/config';
8
- import type { LogFn } from '@aztec/foundation/log';
9
- import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
10
-
11
- import { extractRelevantOptions } from '../util.js';
12
-
13
- export async function startBlobSink(options: any, signalHandlers: (() => Promise<void>)[], userLog: LogFn) {
14
- if (options.prover || options.node || options.sequencer || options.pxe || options.p2pBootstrap || options.txe) {
15
- userLog(
16
- `Starting a blob sink with --node, --sequencer, --pxe, --p2p-bootstrap, --prover or --txe is not supported.`,
17
- );
18
- process.exit(1);
19
- }
20
-
21
- let blobSinkConfig: BlobSinkConfig = {
22
- ...getBlobSinkConfigFromEnv(), // get default config from env
23
- ...extractRelevantOptions<BlobSinkConfig>(options, blobSinkConfigMappings, 'blobSink'), // override with command line options
24
- };
25
-
26
- if (!blobSinkConfig.l1Contracts?.registryAddress || blobSinkConfig.l1Contracts.registryAddress.isZero()) {
27
- throw new Error('REGISTRY_CONTRACT_ADDRESS not set');
28
- }
29
-
30
- if (!blobSinkConfig.l1RpcUrls || blobSinkConfig.l1RpcUrls.length === 0) {
31
- throw new Error('ETHEREUM_HOSTS not set');
32
- }
33
-
34
- if (typeof blobSinkConfig.l1ChainId !== 'number') {
35
- throw new Error('L1_CHAIN_ID');
36
- }
37
-
38
- const telemetry = await initTelemetryClient(getTelemetryClientConfig());
39
-
40
- const { config: chainConfig, addresses } = await getL1Config(
41
- blobSinkConfig.l1Contracts.registryAddress,
42
- blobSinkConfig.l1RpcUrls,
43
- blobSinkConfig.l1ChainId,
44
- blobSinkConfig.rollupVersion,
45
- );
46
-
47
- blobSinkConfig = {
48
- ...blobSinkConfig,
49
- l1Contracts: addresses,
50
- ...chainConfig,
51
- };
52
-
53
- const blobSink = await createBlobSinkServer(blobSinkConfig, telemetry);
54
- signalHandlers.push(blobSink.stop.bind(blobSink));
55
-
56
- await blobSink.start();
57
- }