@aztec/cli 2.0.3 → 2.1.0-rc.10

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 (58) hide show
  1. package/dest/cmds/infrastructure/sequencers.js +2 -2
  2. package/dest/cmds/l1/create_l1_account.js +1 -1
  3. package/dest/cmds/l1/deploy_l1_contracts.d.ts +1 -1
  4. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +1 -1
  5. package/dest/cmds/l1/deploy_l1_contracts.js +2 -2
  6. package/dest/cmds/l1/get_l1_addresses.js +1 -1
  7. package/dest/cmds/l1/get_l1_balance.js +1 -1
  8. package/dest/cmds/l1/index.d.ts.map +1 -1
  9. package/dest/cmds/l1/index.js +2 -20
  10. package/dest/cmds/l1/prover_stats.js +1 -1
  11. package/dest/cmds/l1/trigger_seed_snapshot.js +1 -1
  12. package/dest/cmds/l1/update_l1_validators.js +15 -7
  13. package/dest/config/cached_fetch.d.ts +18 -0
  14. package/dest/config/cached_fetch.d.ts.map +1 -0
  15. package/dest/config/cached_fetch.js +54 -0
  16. package/dest/config/chain_l2_config.d.ts +7 -4
  17. package/dest/config/chain_l2_config.d.ts.map +1 -1
  18. package/dest/config/chain_l2_config.js +123 -66
  19. package/dest/config/enrich_env.d.ts +4 -0
  20. package/dest/config/enrich_env.d.ts.map +1 -0
  21. package/dest/config/enrich_env.js +12 -0
  22. package/dest/config/index.d.ts +2 -0
  23. package/dest/config/index.d.ts.map +1 -1
  24. package/dest/config/index.js +2 -0
  25. package/dest/config/network_config.d.ts +19 -0
  26. package/dest/config/network_config.d.ts.map +1 -0
  27. package/dest/config/network_config.js +79 -0
  28. package/dest/utils/aztec.d.ts +1 -1
  29. package/dest/utils/aztec.d.ts.map +1 -1
  30. package/dest/utils/aztec.js +4 -3
  31. package/package.json +25 -25
  32. package/src/cmds/infrastructure/sequencers.ts +2 -2
  33. package/src/cmds/l1/create_l1_account.ts +1 -1
  34. package/src/cmds/l1/deploy_l1_contracts.ts +2 -0
  35. package/src/cmds/l1/get_l1_addresses.ts +1 -1
  36. package/src/cmds/l1/get_l1_balance.ts +1 -1
  37. package/src/cmds/l1/index.ts +2 -32
  38. package/src/cmds/l1/prover_stats.ts +1 -1
  39. package/src/cmds/l1/trigger_seed_snapshot.ts +1 -1
  40. package/src/cmds/l1/update_l1_validators.ts +7 -7
  41. package/src/config/cached_fetch.ts +67 -0
  42. package/src/config/chain_l2_config.ts +148 -71
  43. package/src/config/enrich_env.ts +15 -0
  44. package/src/config/index.ts +2 -0
  45. package/src/config/network_config.ts +102 -0
  46. package/src/utils/aztec.ts +4 -2
  47. package/dest/cmds/devnet/bootstrap_network.d.ts +0 -3
  48. package/dest/cmds/devnet/bootstrap_network.d.ts.map +0 -1
  49. package/dest/cmds/devnet/bootstrap_network.js +0 -216
  50. package/dest/cmds/devnet/faucet.d.ts +0 -4
  51. package/dest/cmds/devnet/faucet.d.ts.map +0 -1
  52. package/dest/cmds/devnet/faucet.js +0 -26
  53. package/dest/cmds/devnet/index.d.ts +0 -4
  54. package/dest/cmds/devnet/index.d.ts.map +0 -1
  55. package/dest/cmds/devnet/index.js +0 -14
  56. package/src/cmds/devnet/bootstrap_network.ts +0 -321
  57. package/src/cmds/devnet/faucet.ts +0 -33
  58. package/src/cmds/devnet/index.ts +0 -60
@@ -0,0 +1,102 @@
1
+ import { type NetworkConfig, NetworkConfigMapSchema, type NetworkNames } from '@aztec/foundation/config';
2
+
3
+ import { readFile } from 'fs/promises';
4
+ import { join } from 'path';
5
+
6
+ import { cachedFetch } from './cached_fetch.js';
7
+ import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
8
+
9
+ const DEFAULT_CONFIG_URL =
10
+ 'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
11
+ const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
12
+
13
+ /**
14
+ * Fetches remote network configuration from GitHub with caching support.
15
+ * Uses the reusable cachedFetch utility.
16
+ *
17
+ * @param networkName - The network name to fetch config for
18
+ * @param cacheDir - Optional cache directory for storing fetched config
19
+ * @returns Remote configuration for the specified network, or undefined if not found/error
20
+ */
21
+ export async function getNetworkConfig(
22
+ networkName: NetworkNames,
23
+ cacheDir?: string,
24
+ ): Promise<NetworkConfig | undefined> {
25
+ let url: URL | undefined;
26
+ const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
27
+
28
+ if (!configLocation) {
29
+ return undefined;
30
+ }
31
+
32
+ try {
33
+ if (configLocation.includes('://')) {
34
+ url = new URL(configLocation);
35
+ } else {
36
+ url = new URL(`file://${configLocation}`);
37
+ }
38
+ } catch {
39
+ /* no-op */
40
+ }
41
+
42
+ if (!url) {
43
+ return undefined;
44
+ }
45
+
46
+ try {
47
+ let rawConfig: any;
48
+
49
+ if (url.protocol === 'http:' || url.protocol === 'https:') {
50
+ rawConfig = await cachedFetch(url.href, {
51
+ cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
52
+ cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
53
+ });
54
+ } else if (url.protocol === 'file:') {
55
+ rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
56
+ } else {
57
+ throw new Error('Unsupported Aztec network config protocol: ' + url.href);
58
+ }
59
+
60
+ if (!rawConfig) {
61
+ return undefined;
62
+ }
63
+
64
+ const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
65
+ if (networkName in networkConfigMap) {
66
+ return networkConfigMap[networkName];
67
+ } else {
68
+ return undefined;
69
+ }
70
+ } catch {
71
+ return undefined;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Enriches environment variables with remote network configuration.
77
+ * This function is called before node config initialization to set env vars
78
+ * from the remote config, following the same pattern as enrichEnvironmentWithChainConfig().
79
+ *
80
+ * @param networkName - The network name to fetch remote config for
81
+ */
82
+ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
83
+ if (networkName === 'local') {
84
+ return; // No remote config for local development
85
+ }
86
+
87
+ const cacheDir = process.env.DATA_DIRECTORY ? join(process.env.DATA_DIRECTORY, 'cache') : undefined;
88
+ const networkConfig = await getNetworkConfig(networkName, cacheDir);
89
+
90
+ if (!networkConfig) {
91
+ return;
92
+ }
93
+
94
+ enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
95
+ enrichVar('L1_CHAIN_ID', String(networkConfig.l1ChainId));
96
+ enrichVar('SYNC_SNAPSHOTS_URLS', networkConfig.snapshots.join(','));
97
+
98
+ enrichEthAddressVar('REGISTRY_CONTRACT_ADDRESS', networkConfig.registryAddress.toString());
99
+ if (networkConfig.feeAssetHandlerAddress) {
100
+ enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
101
+ }
102
+ }
@@ -57,12 +57,13 @@ export async function deployAztecContracts(
57
57
  feeJuicePortalInitialBalance: bigint,
58
58
  acceleratedTestDeployments: boolean,
59
59
  config: L1ContractsConfig,
60
+ existingToken: EthAddress | undefined,
60
61
  realVerifier: boolean,
61
62
  createVerificationJson: string | false,
62
63
  debugLogger: Logger,
63
64
  ): Promise<DeployL1ContractsReturnType> {
64
65
  const { createEthereumChain, deployL1Contracts } = await import('@aztec/ethereum');
65
- const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
66
+ const { mnemonicToAccount, privateKeyToAccount } = await import('@spalladino/viem/accounts');
66
67
 
67
68
  const account = !privateKey
68
69
  ? mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex })
@@ -85,6 +86,7 @@ export async function deployAztecContracts(
85
86
  acceleratedTestDeployments,
86
87
  feeJuicePortalInitialBalance,
87
88
  realVerifier,
89
+ existingTokenAddress: existingToken,
88
90
  ...config,
89
91
  },
90
92
  config,
@@ -110,7 +112,7 @@ export async function deployNewRollupContracts(
110
112
  logger: Logger,
111
113
  ): Promise<{ rollup: RollupContract; slashFactoryAddress: EthAddress }> {
112
114
  const { createEthereumChain, deployRollupForUpgrade, createExtendedL1Client } = await import('@aztec/ethereum');
113
- const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
115
+ const { mnemonicToAccount, privateKeyToAccount } = await import('@spalladino/viem/accounts');
114
116
  const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
115
117
 
116
118
  const account = !privateKey
@@ -1,3 +0,0 @@
1
- import type { LogFn, Logger } from '@aztec/foundation/log';
2
- export declare function bootstrapNetwork(pxeUrl: string, l1Urls: string[], l1ChainId: string, l1PrivateKey: `0x${string}` | undefined, l1Mnemonic: string, addressIndex: number, json: boolean, log: LogFn, debugLog: Logger): Promise<void>;
3
- //# sourceMappingURL=bootstrap_network.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap_network.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/bootstrap_network.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAqB3D,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,EACvC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,MAAM,iBAkFjB"}
@@ -1,216 +0,0 @@
1
- import { getInitialTestAccountsManagers } from '@aztec/accounts/testing';
2
- import { BatchCall, Fr, L1FeeJuicePortalManager, createCompatibleClient, retryUntil, waitForProven } from '@aztec/aztec.js';
3
- import { createEthereumChain, createExtendedL1Client, deployL1Contract } from '@aztec/ethereum';
4
- import { getContract } from 'viem';
5
- import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
6
- const waitOpts = {
7
- timeout: 120,
8
- interval: 1
9
- };
10
- const provenWaitOpts = {
11
- provenTimeout: 4800,
12
- interval: 1
13
- };
14
- export async function bootstrapNetwork(pxeUrl, l1Urls, l1ChainId, l1PrivateKey, l1Mnemonic, addressIndex, json, log, debugLog) {
15
- const pxe = await createCompatibleClient(pxeUrl, debugLog);
16
- // We assume here that the initial test accounts were prefunded with deploy-l1-contracts, and deployed with setup-l2-contracts
17
- // so all we need to do is register them to our pxe.
18
- const [accountManager] = await getInitialTestAccountsManagers(pxe);
19
- await accountManager.register();
20
- const wallet = await accountManager.getWallet();
21
- const defaultAccountAddress = wallet.getAddress();
22
- const l1Client = createExtendedL1Client(l1Urls, l1PrivateKey ? privateKeyToAccount(l1PrivateKey) : // Note that this account needs to be funded on L1 !
23
- mnemonicToAccount(l1Mnemonic, {
24
- addressIndex
25
- }), createEthereumChain(l1Urls, +l1ChainId).chainInfo);
26
- const { erc20Address, portalAddress } = await deployERC20(l1Client);
27
- const { token, bridge } = await deployToken(wallet, defaultAccountAddress, portalAddress);
28
- await initPortal(pxe, l1Client, erc20Address, portalAddress, bridge.address);
29
- const fpcAdmin = wallet.getAddress();
30
- const fpc = await deployFPC(wallet, defaultAccountAddress, token.address, fpcAdmin);
31
- const counter = await deployCounter(wallet, defaultAccountAddress);
32
- await fundFPC(pxe, counter.address, wallet, defaultAccountAddress, l1Client, fpc.address, debugLog);
33
- if (json) {
34
- log(JSON.stringify({
35
- devCoinL1: erc20Address.toString(),
36
- devCoinPortalL1: portalAddress.toString(),
37
- devCoin: {
38
- address: token.address.toString(),
39
- initHash: token.initHash.toString(),
40
- salt: token.salt.toString()
41
- },
42
- devCoinBridge: {
43
- address: bridge.address.toString(),
44
- initHash: bridge.initHash.toString(),
45
- salt: bridge.salt.toString()
46
- },
47
- devCoinFpc: {
48
- address: fpc.address.toString(),
49
- initHash: fpc.initHash.toString(),
50
- salt: fpc.salt.toString()
51
- },
52
- counter: {
53
- address: counter.address.toString(),
54
- initHash: counter.initHash.toString(),
55
- salt: counter.salt.toString()
56
- }
57
- }, null, 2));
58
- } else {
59
- log(`DevCoin L1: ${erc20Address}`);
60
- log(`DevCoin L1 Portal: ${portalAddress}`);
61
- log(`DevCoin L2: ${token.address}`);
62
- log(`DevCoin L2 init hash: ${token.initHash}`);
63
- log(`DevCoin L2 salt: ${token.salt}`);
64
- log(`DevCoin L2 Bridge: ${bridge.address}`);
65
- log(`DevCoin L2 Bridge init hash: ${bridge.initHash}`);
66
- log(`DevCoin L2 Bridge salt: ${bridge.salt}`);
67
- log(`DevCoin FPC: ${fpc.address}`);
68
- log(`DevCoin FPC init hash: ${fpc.initHash}`);
69
- log(`DevCoin FPC salt: ${fpc.salt}`);
70
- log(`Counter: ${counter.address}`);
71
- log(`Counter init hash: ${counter.initHash}`);
72
- log(`Counter salt: ${counter.salt}`);
73
- }
74
- }
75
- /**
76
- * Step 1. Deploy the L1 contracts, but don't initialize
77
- */ async function deployERC20(l1Client) {
78
- const { TestERC20Abi, TestERC20Bytecode, TokenPortalAbi, TokenPortalBytecode } = await import('@aztec/l1-artifacts');
79
- const erc20 = {
80
- name: 'TestERC20',
81
- contractAbi: TestERC20Abi,
82
- contractBytecode: TestERC20Bytecode
83
- };
84
- const portal = {
85
- name: 'TokenPortal',
86
- contractAbi: TokenPortalAbi,
87
- contractBytecode: TokenPortalBytecode
88
- };
89
- const { address: erc20Address } = await deployL1Contract(l1Client, erc20.contractAbi, erc20.contractBytecode, [
90
- 'DevCoin',
91
- 'DEV',
92
- l1Client.account.address
93
- ]);
94
- const { address: portalAddress } = await deployL1Contract(l1Client, portal.contractAbi, portal.contractBytecode);
95
- return {
96
- erc20Address,
97
- portalAddress
98
- };
99
- }
100
- /**
101
- * Step 2. Deploy the L2 contracts
102
- */ async function deployToken(wallet, defaultAccountAddress, l1Portal) {
103
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
104
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
105
- const { TokenContract } = await import('@aztec/noir-contracts.js/Token');
106
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
107
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
108
- const { TokenBridgeContract } = await import('@aztec/noir-contracts.js/TokenBridge');
109
- const devCoin = await TokenContract.deploy(wallet, defaultAccountAddress, 'DevCoin', 'DEV', 18).send({
110
- from: defaultAccountAddress,
111
- universalDeploy: true
112
- }).deployed(waitOpts);
113
- const bridge = await TokenBridgeContract.deploy(wallet, devCoin.address, l1Portal).send({
114
- from: defaultAccountAddress,
115
- universalDeploy: true
116
- }).deployed(waitOpts);
117
- await new BatchCall(wallet, [
118
- devCoin.methods.set_minter(bridge.address, true),
119
- devCoin.methods.set_admin(bridge.address)
120
- ]).send({
121
- from: defaultAccountAddress
122
- }).wait(waitOpts);
123
- return {
124
- token: {
125
- address: devCoin.address,
126
- initHash: devCoin.instance.initializationHash,
127
- salt: devCoin.instance.salt
128
- },
129
- bridge: {
130
- address: bridge.address,
131
- initHash: bridge.instance.initializationHash,
132
- salt: bridge.instance.salt
133
- }
134
- };
135
- }
136
- /**
137
- * Step 3. Initialize DevCoin's L1 portal
138
- */ async function initPortal(pxe, l1Client, erc20, portal, bridge) {
139
- const { TokenPortalAbi } = await import('@aztec/l1-artifacts');
140
- const { l1ContractAddresses: { registryAddress } } = await pxe.getNodeInfo();
141
- const contract = getContract({
142
- abi: TokenPortalAbi,
143
- address: portal.toString(),
144
- client: l1Client
145
- });
146
- const hash = await contract.write.initialize([
147
- registryAddress.toString(),
148
- erc20.toString(),
149
- bridge.toString()
150
- ]);
151
- await l1Client.waitForTransactionReceipt({
152
- hash
153
- });
154
- }
155
- async function deployFPC(wallet, defaultAccountAddress, tokenAddress, admin) {
156
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
157
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
158
- const { FPCContract } = await import('@aztec/noir-contracts.js/FPC');
159
- const fpc = await FPCContract.deploy(wallet, tokenAddress, admin).send({
160
- from: defaultAccountAddress,
161
- universalDeploy: true
162
- }).deployed(waitOpts);
163
- const info = {
164
- address: fpc.address,
165
- initHash: fpc.instance.initializationHash,
166
- salt: fpc.instance.salt
167
- };
168
- return info;
169
- }
170
- async function deployCounter(wallet, defaultAccountAddress) {
171
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
172
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
173
- const { CounterContract } = await import('@aztec/noir-test-contracts.js/Counter');
174
- const counter = await CounterContract.deploy(wallet, 1, defaultAccountAddress).send({
175
- from: defaultAccountAddress,
176
- universalDeploy: true
177
- }).deployed(waitOpts);
178
- const info = {
179
- address: counter.address,
180
- initHash: counter.instance.initializationHash,
181
- salt: counter.instance.salt
182
- };
183
- return info;
184
- }
185
- // NOTE: Disabling for now in order to get devnet running
186
- async function fundFPC(pxe, counterAddress, wallet, defaultAccountAddress, l1Client, fpcAddress, debugLog) {
187
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
188
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
189
- const { FeeJuiceContract } = await import('@aztec/noir-contracts.js/FeeJuice');
190
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
191
- // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
192
- const { CounterContract } = await import('@aztec/noir-test-contracts.js/Counter');
193
- const { protocolContractAddresses: { feeJuice } } = await wallet.getPXEInfo();
194
- const feeJuiceContract = await FeeJuiceContract.at(feeJuice, wallet);
195
- const feeJuicePortal = await L1FeeJuicePortalManager.new(wallet, l1Client, debugLog);
196
- const { claimAmount, claimSecret, messageLeafIndex, messageHash } = await feeJuicePortal.bridgeTokensPublic(fpcAddress, undefined, true);
197
- await retryUntil(async ()=>await pxe.isL1ToL2MessageSynced(Fr.fromHexString(messageHash)), 'message sync', 600, 1);
198
- const counter = await CounterContract.at(counterAddress, wallet);
199
- debugLog.info('Incrementing Counter');
200
- // TODO (alexg) remove this once sequencer builds blocks continuously
201
- // advance the chain
202
- await counter.methods.increment(wallet.getAddress()).send({
203
- from: defaultAccountAddress
204
- }).wait(waitOpts);
205
- await counter.methods.increment(wallet.getAddress()).send({
206
- from: defaultAccountAddress
207
- }).wait(waitOpts);
208
- debugLog.info('Claiming FPC');
209
- const receipt = await feeJuiceContract.methods.claim(fpcAddress, claimAmount, claimSecret, messageLeafIndex).send({
210
- from: defaultAccountAddress
211
- }).wait({
212
- ...waitOpts
213
- });
214
- await waitForProven(pxe, receipt, provenWaitOpts);
215
- debugLog.info('Finished claiming FPC');
216
- }
@@ -1,4 +0,0 @@
1
- import type { EthAddress } from '@aztec/foundation/eth-address';
2
- import type { LogFn } from '@aztec/foundation/log';
3
- export declare function dripFaucet(faucetUrl: string, asset: string, account: EthAddress, json: boolean, log: LogFn): Promise<void>;
4
- //# sourceMappingURL=faucet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"faucet.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/faucet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -1,26 +0,0 @@
1
- import { prettyPrintJSON } from '../../utils/commands.js';
2
- export async function dripFaucet(faucetUrl, asset, account, json, log) {
3
- const url = new URL(`/drip/${account.toString()}`, faucetUrl);
4
- url.searchParams.set('asset', asset);
5
- const res = await fetch(url);
6
- if (res.status === 200) {
7
- if (json) {
8
- log(prettyPrintJSON({
9
- ok: true
10
- }));
11
- } else {
12
- log(`Dripped ${asset} for ${account.toString()}`);
13
- }
14
- } else {
15
- if (json) {
16
- log(prettyPrintJSON({
17
- ok: false
18
- }));
19
- } else if (res.status === 429) {
20
- log(`Rate limited when dripping ${asset} for ${account.toString()}`);
21
- } else {
22
- log(`Failed to drip ${asset} for ${account.toString()}`);
23
- }
24
- process.exit(1);
25
- }
26
- }
@@ -1,4 +0,0 @@
1
- import type { LogFn, Logger } from '@aztec/foundation/log';
2
- import type { Command } from 'commander';
3
- export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAqD/E"}
@@ -1,14 +0,0 @@
1
- import { ETHEREUM_HOSTS, l1ChainIdOption, parseEthereumAddress, pxeOption } from '../../utils/commands.js';
2
- export function injectCommands(program, log, debugLogger) {
3
- program.command('bootstrap-network').description('Bootstrap a new network').addOption(pxeOption).addOption(l1ChainIdOption).requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
4
- ETHEREUM_HOSTS
5
- ]).option('--l1-private-key <string>', 'The private key to use for deployment', process.env.PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('-ai, --address-index <number>', 'The address index to use when calculating an address', (arg)=>BigInt(arg), 0n).option('--json', 'Output the result as JSON').action(async (options)=>{
6
- const { bootstrapNetwork } = await import('./bootstrap_network.js');
7
- await bootstrapNetwork(options[pxeOption.attributeName()], options.l1RpcUrls, options[l1ChainIdOption.attributeName()], options.l1PrivateKey, options.mnemonic, options.addressIndex, options.json, log, debugLogger);
8
- });
9
- program.command('drip-faucet').description('Drip the faucet').requiredOption('-u, --faucet-url <string>', 'Url of the faucet', 'http://localhost:8082').requiredOption('-t, --token <string>', 'The asset to drip', 'eth').requiredOption('-a, --address <string>', 'The Ethereum address to drip to', parseEthereumAddress).option('--json', 'Output the result as JSON').action(async (options)=>{
10
- const { dripFaucet } = await import('./faucet.js');
11
- await dripFaucet(options.faucetUrl, options.token, options.address, options.json, log);
12
- });
13
- return program;
14
- }