@aztec/aztec 0.0.0-test.0
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.
- package/README.md +57 -0
- package/dest/bin/index.d.ts +3 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +46 -0
- package/dest/cli/aztec_start_action.d.ts +3 -0
- package/dest/cli/aztec_start_action.d.ts.map +1 -0
- package/dest/cli/aztec_start_action.js +108 -0
- package/dest/cli/aztec_start_options.d.ts +15 -0
- package/dest/cli/aztec_start_options.d.ts.map +1 -0
- package/dest/cli/aztec_start_options.js +348 -0
- package/dest/cli/chain_l2_config.d.ts +19 -0
- package/dest/cli/chain_l2_config.d.ts.map +1 -0
- package/dest/cli/chain_l2_config.js +56 -0
- package/dest/cli/cli.d.ts +9 -0
- package/dest/cli/cli.d.ts.map +1 -0
- package/dest/cli/cli.js +33 -0
- package/dest/cli/cmds/start_archiver.d.ts +9 -0
- package/dest/cli/cmds/start_archiver.d.ts.map +1 -0
- package/dest/cli/cmds/start_archiver.js +42 -0
- package/dest/cli/cmds/start_blob_sink.d.ts +3 -0
- package/dest/cli/cmds/start_blob_sink.d.ts.map +1 -0
- package/dest/cli/cmds/start_blob_sink.js +17 -0
- package/dest/cli/cmds/start_bot.d.ts +11 -0
- package/dest/cli/cmds/start_bot.d.ts.map +1 -0
- package/dest/cli/cmds/start_bot.js +31 -0
- package/dest/cli/cmds/start_faucet.d.ts +4 -0
- package/dest/cli/cmds/start_faucet.d.ts.map +1 -0
- package/dest/cli/cmds/start_faucet.js +20 -0
- package/dest/cli/cmds/start_node.d.ts +7 -0
- package/dest/cli/cmds/start_node.d.ts.map +1 -0
- package/dest/cli/cmds/start_node.js +131 -0
- package/dest/cli/cmds/start_p2p_bootstrap.d.ts +6 -0
- package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -0
- package/dest/cli/cmds/start_p2p_bootstrap.js +26 -0
- package/dest/cli/cmds/start_prover_agent.d.ts +4 -0
- package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -0
- package/dest/cli/cmds/start_prover_agent.js +41 -0
- package/dest/cli/cmds/start_prover_broker.d.ts +9 -0
- package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -0
- package/dest/cli/cmds/start_prover_broker.js +31 -0
- package/dest/cli/cmds/start_prover_node.d.ts +7 -0
- package/dest/cli/cmds/start_prover_node.d.ts.map +1 -0
- package/dest/cli/cmds/start_prover_node.js +110 -0
- package/dest/cli/cmds/start_pxe.d.ts +16 -0
- package/dest/cli/cmds/start_pxe.d.ts.map +1 -0
- package/dest/cli/cmds/start_pxe.js +95 -0
- package/dest/cli/cmds/start_txe.d.ts +3 -0
- package/dest/cli/cmds/start_txe.d.ts.map +1 -0
- package/dest/cli/cmds/start_txe.js +11 -0
- package/dest/cli/get_l1_config.d.ts +7 -0
- package/dest/cli/get_l1_config.d.ts.map +1 -0
- package/dest/cli/get_l1_config.js +13 -0
- package/dest/cli/index.d.ts +2 -0
- package/dest/cli/index.d.ts.map +1 -0
- package/dest/cli/index.js +1 -0
- package/dest/cli/util.d.ts +46 -0
- package/dest/cli/util.d.ts.map +1 -0
- package/dest/cli/util.js +154 -0
- package/dest/cli/versioning.d.ts +4 -0
- package/dest/cli/versioning.d.ts.map +1 -0
- package/dest/cli/versioning.js +9 -0
- package/dest/examples/token.d.ts +2 -0
- package/dest/examples/token.d.ts.map +1 -0
- package/dest/examples/token.js +46 -0
- package/dest/examples/util.d.ts +20 -0
- package/dest/examples/util.d.ts.map +1 -0
- package/dest/examples/util.js +31 -0
- package/dest/index.d.ts +2 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -0
- package/dest/mnemonic.d.ts +2 -0
- package/dest/mnemonic.d.ts.map +1 -0
- package/dest/mnemonic.js +1 -0
- package/dest/sandbox/banana_fpc.d.ts +11 -0
- package/dest/sandbox/banana_fpc.d.ts.map +1 -0
- package/dest/sandbox/banana_fpc.js +79 -0
- package/dest/sandbox/index.d.ts +5 -0
- package/dest/sandbox/index.d.ts.map +1 -0
- package/dest/sandbox/index.js +4 -0
- package/dest/sandbox/sandbox.d.ts +76 -0
- package/dest/sandbox/sandbox.d.ts.map +1 -0
- package/dest/sandbox/sandbox.js +181 -0
- package/dest/sandbox/sponsored_fee_payment_method.d.ts +23 -0
- package/dest/sandbox/sponsored_fee_payment_method.d.ts.map +1 -0
- package/dest/sandbox/sponsored_fee_payment_method.js +36 -0
- package/dest/sandbox/sponsored_fpc.d.ts +6 -0
- package/dest/sandbox/sponsored_fpc.d.ts.map +1 -0
- package/dest/sandbox/sponsored_fpc.js +26 -0
- package/dest/splash.d.ts +3 -0
- package/dest/splash.d.ts.map +1 -0
- package/dest/splash.js +2 -0
- package/package.json +118 -0
- package/src/bin/index.ts +54 -0
- package/src/cli/aztec_start_action.ts +114 -0
- package/src/cli/aztec_start_options.ts +371 -0
- package/src/cli/chain_l2_config.ts +74 -0
- package/src/cli/cli.ts +48 -0
- package/src/cli/cmds/start_archiver.ts +55 -0
- package/src/cli/cmds/start_blob_sink.ts +31 -0
- package/src/cli/cmds/start_bot.ts +49 -0
- package/src/cli/cmds/start_faucet.ts +34 -0
- package/src/cli/cmds/start_node.ts +151 -0
- package/src/cli/cmds/start_p2p_bootstrap.ts +29 -0
- package/src/cli/cmds/start_prover_agent.ts +68 -0
- package/src/cli/cmds/start_prover_broker.ts +46 -0
- package/src/cli/cmds/start_prover_node.ts +121 -0
- package/src/cli/cmds/start_pxe.ts +129 -0
- package/src/cli/cmds/start_txe.ts +15 -0
- package/src/cli/get_l1_config.ts +18 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/util.ts +216 -0
- package/src/cli/versioning.ts +13 -0
- package/src/examples/token.ts +65 -0
- package/src/examples/util.ts +45 -0
- package/src/index.ts +7 -0
- package/src/mnemonic.ts +1 -0
- package/src/sandbox/banana_fpc.ts +83 -0
- package/src/sandbox/index.ts +5 -0
- package/src/sandbox/sandbox.ts +229 -0
- package/src/sandbox/sponsored_fee_payment_method.ts +46 -0
- package/src/sandbox/sponsored_fpc.ts +38 -0
- package/src/splash.ts +10 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { type ArchiverConfig, archiverConfigMappings } from '@aztec/archiver/config';
|
|
2
|
+
import { faucetConfigMapping } from '@aztec/aztec-faucet/config';
|
|
3
|
+
import { sequencerClientConfigMappings } from '@aztec/aztec-node/config';
|
|
4
|
+
import { blobSinkConfigMappings } from '@aztec/blob-sink/server';
|
|
5
|
+
import { botConfigMappings } from '@aztec/bot/config';
|
|
6
|
+
import {
|
|
7
|
+
type ConfigMapping,
|
|
8
|
+
type EnvVar,
|
|
9
|
+
booleanConfigHelper,
|
|
10
|
+
isBooleanConfigValue,
|
|
11
|
+
omitConfigMappings,
|
|
12
|
+
} from '@aztec/foundation/config';
|
|
13
|
+
import { bootnodeConfigMappings, p2pConfigMappings } from '@aztec/p2p/config';
|
|
14
|
+
import {
|
|
15
|
+
type ProverAgentConfig,
|
|
16
|
+
type ProverBrokerConfig,
|
|
17
|
+
proverAgentConfigMappings,
|
|
18
|
+
proverBrokerConfigMappings,
|
|
19
|
+
} from '@aztec/prover-client/broker';
|
|
20
|
+
import { proverNodeConfigMappings } from '@aztec/prover-node/config';
|
|
21
|
+
import { allPxeConfigMappings } from '@aztec/pxe/config';
|
|
22
|
+
import { telemetryClientConfigMappings } from '@aztec/telemetry-client';
|
|
23
|
+
|
|
24
|
+
import { DefaultMnemonic } from '../mnemonic.js';
|
|
25
|
+
|
|
26
|
+
// Define an interface for options
|
|
27
|
+
export interface AztecStartOption {
|
|
28
|
+
flag: string;
|
|
29
|
+
description: string;
|
|
30
|
+
defaultValue: any | undefined;
|
|
31
|
+
printDefault?: (val: any) => string;
|
|
32
|
+
envVar: EnvVar | undefined;
|
|
33
|
+
parseVal?: (val: string) => any;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const getOptions = (namespace: string, configMappings: Record<string, ConfigMapping>) => {
|
|
37
|
+
const options: AztecStartOption[] = [];
|
|
38
|
+
for (const [key, { env, defaultValue: def, parseEnv, description, printDefault }] of Object.entries(configMappings)) {
|
|
39
|
+
if (universalOptions.includes(key)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const isBoolean = isBooleanConfigValue(configMappings, key as keyof typeof configMappings);
|
|
43
|
+
options.push({
|
|
44
|
+
flag: `--${namespace}.${key}${isBoolean ? '' : ' <value>'}`,
|
|
45
|
+
description,
|
|
46
|
+
defaultValue: def,
|
|
47
|
+
printDefault,
|
|
48
|
+
envVar: env,
|
|
49
|
+
parseVal: parseEnv,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return options;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// These are options used by multiple modules so should be inputted once
|
|
56
|
+
export const universalOptions = ['l1RpcUrls', 'l1ChainId', 'l1Contracts', 'p2pEnabled', 'dataDirectory'];
|
|
57
|
+
|
|
58
|
+
// Define categories and options
|
|
59
|
+
export const aztecStartOptions: { [key: string]: AztecStartOption[] } = {
|
|
60
|
+
NETWORK: [
|
|
61
|
+
{
|
|
62
|
+
flag: '--network <value>',
|
|
63
|
+
description: 'Network to run Aztec on',
|
|
64
|
+
defaultValue: undefined,
|
|
65
|
+
envVar: 'NETWORK',
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
SANDBOX: [
|
|
69
|
+
{
|
|
70
|
+
flag: '--sandbox',
|
|
71
|
+
description: 'Starts Aztec Sandbox',
|
|
72
|
+
defaultValue: undefined,
|
|
73
|
+
envVar: undefined,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
flag: '--sandbox.testAccounts',
|
|
77
|
+
description: 'Deploy test accounts on sandbox start',
|
|
78
|
+
envVar: 'TEST_ACCOUNTS',
|
|
79
|
+
...booleanConfigHelper(true),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
flag: '--sandbox.noPXE',
|
|
83
|
+
description: 'Do not expose PXE service on sandbox start',
|
|
84
|
+
envVar: 'NO_PXE',
|
|
85
|
+
...booleanConfigHelper(),
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
API: [
|
|
89
|
+
{
|
|
90
|
+
flag: '--port <value>',
|
|
91
|
+
description: 'Port to run the Aztec Services on on',
|
|
92
|
+
defaultValue: 8080,
|
|
93
|
+
envVar: 'AZTEC_PORT',
|
|
94
|
+
parseVal: val => parseInt(val, 10),
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
flag: '--api-prefix <value>',
|
|
98
|
+
description: 'Prefix for API routes on any service that is started',
|
|
99
|
+
defaultValue: '',
|
|
100
|
+
envVar: 'API_PREFIX',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
ETHEREUM: [
|
|
104
|
+
{
|
|
105
|
+
flag: '--l1-rpc-urls <value>',
|
|
106
|
+
description: 'List of URLs of the Ethereum RPC nodes that services will connect to (comma separated)',
|
|
107
|
+
defaultValue: ['http://localhost:8545'],
|
|
108
|
+
envVar: 'ETHEREUM_HOSTS',
|
|
109
|
+
parseVal: (val: string) => val.split(',').map(url => url.trim()),
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
flag: '--l1-chain-id <value>',
|
|
113
|
+
description: 'The L1 chain ID',
|
|
114
|
+
defaultValue: 31337,
|
|
115
|
+
envVar: 'L1_CHAIN_ID',
|
|
116
|
+
parseVal: val => parseInt(val, 10),
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
flag: '--l1-mnemonic <value>',
|
|
120
|
+
description: 'Mnemonic for L1 accounts. Will be used if no publisher private keys are provided',
|
|
121
|
+
defaultValue: DefaultMnemonic,
|
|
122
|
+
envVar: 'MNEMONIC',
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
'L1 CONTRACT ADDRESSES': [
|
|
126
|
+
{
|
|
127
|
+
flag: '--rollup-address <value>',
|
|
128
|
+
description: 'The deployed L1 rollup contract address',
|
|
129
|
+
defaultValue: undefined,
|
|
130
|
+
envVar: 'ROLLUP_CONTRACT_ADDRESS',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
flag: '--registry-address <value>',
|
|
134
|
+
description: 'The deployed L1 registry contract address',
|
|
135
|
+
defaultValue: undefined,
|
|
136
|
+
envVar: 'REGISTRY_CONTRACT_ADDRESS',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
flag: '--inbox-address <value>',
|
|
140
|
+
description: 'The deployed L1 -> L2 inbox contract address',
|
|
141
|
+
defaultValue: undefined,
|
|
142
|
+
envVar: 'INBOX_CONTRACT_ADDRESS',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
flag: '--outbox-address <value>',
|
|
146
|
+
description: 'The deployed L2 -> L1 outbox contract address',
|
|
147
|
+
defaultValue: undefined,
|
|
148
|
+
envVar: 'OUTBOX_CONTRACT_ADDRESS',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
flag: '--fee-juice-address <value>',
|
|
152
|
+
description: 'The deployed L1 Fee Juice contract address',
|
|
153
|
+
defaultValue: undefined,
|
|
154
|
+
envVar: 'FEE_JUICE_CONTRACT_ADDRESS',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
flag: '--staking-asset-address <value>',
|
|
158
|
+
description: 'The deployed L1 Staking Asset contract address',
|
|
159
|
+
defaultValue: undefined,
|
|
160
|
+
envVar: 'STAKING_ASSET_CONTRACT_ADDRESS',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
flag: '--fee-juice-portal-address <value>',
|
|
164
|
+
description: 'The deployed L1 Fee Juice portal contract address',
|
|
165
|
+
defaultValue: undefined,
|
|
166
|
+
envVar: 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
// We can't easily auto-generate node options as they're parts of modules defined below
|
|
170
|
+
'AZTEC NODE': [
|
|
171
|
+
{
|
|
172
|
+
flag: '--node',
|
|
173
|
+
description: 'Starts Aztec Node with options',
|
|
174
|
+
defaultValue: undefined,
|
|
175
|
+
envVar: undefined,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
flag: '--data-directory <value>',
|
|
179
|
+
description: 'Where to store data. If not set, will store temporarily',
|
|
180
|
+
defaultValue: undefined,
|
|
181
|
+
envVar: 'DATA_DIRECTORY',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
flag: '--node.archiverUrl <value>',
|
|
185
|
+
description: 'URL for an archiver service',
|
|
186
|
+
defaultValue: undefined,
|
|
187
|
+
envVar: 'ARCHIVER_URL',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
flag: '--node.deployAztecContracts',
|
|
191
|
+
description: 'Deploys L1 Aztec contracts before starting the node. Needs mnemonic or private key to be set.',
|
|
192
|
+
envVar: 'DEPLOY_AZTEC_CONTRACTS',
|
|
193
|
+
defaultValue: undefined,
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
flag: '--node.deployAztecContractsSalt <value>',
|
|
197
|
+
description:
|
|
198
|
+
'Numeric salt for deploying L1 Aztec contracts before starting the node. Needs mnemonic or private key to be set. Implies --node.deployAztecContracts.',
|
|
199
|
+
envVar: 'DEPLOY_AZTEC_CONTRACTS_SALT',
|
|
200
|
+
defaultValue: undefined,
|
|
201
|
+
parseVal: (val: string) => (val ? parseInt(val) : undefined),
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
flag: '--node.assumeProvenThroughBlockNumber <value>',
|
|
205
|
+
description:
|
|
206
|
+
'Cheats the rollup contract into assuming every block until this one is proven. Useful for speeding up bootstraps.',
|
|
207
|
+
envVar: 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER',
|
|
208
|
+
parseVal: (val: string) => parseInt(val, 10),
|
|
209
|
+
defaultValue: 0,
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
flag: '--node.publisherPrivateKey <value>',
|
|
213
|
+
description: 'Private key of account for publishing L1 contracts',
|
|
214
|
+
defaultValue: undefined,
|
|
215
|
+
envVar: 'L1_PRIVATE_KEY',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
flag: '--node.worldStateBlockCheckIntervalMS <value>',
|
|
219
|
+
description: 'Frequency in which to check for blocks in ms',
|
|
220
|
+
defaultValue: 100,
|
|
221
|
+
envVar: 'WS_BLOCK_CHECK_INTERVAL_MS',
|
|
222
|
+
parseVal: val => parseInt(val, 10),
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
flag: '--node.testAccounts',
|
|
226
|
+
description: 'Populate genesis state with initial fee juice for test accounts',
|
|
227
|
+
envVar: 'TEST_ACCOUNTS',
|
|
228
|
+
...booleanConfigHelper(),
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
'P2P SUBSYSTEM': [
|
|
232
|
+
{
|
|
233
|
+
flag: '--p2p-enabled',
|
|
234
|
+
description: 'Enable P2P subsystem',
|
|
235
|
+
envVar: 'P2P_ENABLED',
|
|
236
|
+
...booleanConfigHelper(),
|
|
237
|
+
},
|
|
238
|
+
...getOptions('p2p', p2pConfigMappings),
|
|
239
|
+
],
|
|
240
|
+
TELEMETRY: [...getOptions('tel', telemetryClientConfigMappings)],
|
|
241
|
+
PXE: [
|
|
242
|
+
{
|
|
243
|
+
flag: '--pxe',
|
|
244
|
+
description: 'Starts Aztec PXE with options',
|
|
245
|
+
defaultValue: undefined,
|
|
246
|
+
envVar: undefined,
|
|
247
|
+
},
|
|
248
|
+
...getOptions('pxe', allPxeConfigMappings),
|
|
249
|
+
],
|
|
250
|
+
ARCHIVER: [
|
|
251
|
+
{
|
|
252
|
+
flag: '--archiver',
|
|
253
|
+
description: 'Starts Aztec Archiver with options',
|
|
254
|
+
defaultValue: undefined,
|
|
255
|
+
envVar: undefined,
|
|
256
|
+
},
|
|
257
|
+
// filter out archiverUrl as it's passed separately in --node & --prover-node
|
|
258
|
+
...getOptions('archiver', archiverConfigMappings).filter(opt => !opt.flag.includes('archiverUrl')),
|
|
259
|
+
],
|
|
260
|
+
SEQUENCER: [
|
|
261
|
+
{
|
|
262
|
+
flag: '--sequencer',
|
|
263
|
+
description: 'Starts Aztec Sequencer with options',
|
|
264
|
+
defaultValue: undefined,
|
|
265
|
+
envVar: undefined,
|
|
266
|
+
},
|
|
267
|
+
...getOptions('sequencer', sequencerClientConfigMappings),
|
|
268
|
+
],
|
|
269
|
+
BLOB_SINK: [
|
|
270
|
+
{
|
|
271
|
+
flag: '--blob-sink',
|
|
272
|
+
description: 'Starts Aztec Blob Sink with options',
|
|
273
|
+
defaultValue: undefined,
|
|
274
|
+
envVar: undefined,
|
|
275
|
+
},
|
|
276
|
+
...getOptions('blobSink', blobSinkConfigMappings),
|
|
277
|
+
],
|
|
278
|
+
'PROVER NODE': [
|
|
279
|
+
{
|
|
280
|
+
flag: '--prover-node',
|
|
281
|
+
description: 'Starts Aztec Prover Node with options',
|
|
282
|
+
defaultValue: undefined,
|
|
283
|
+
envVar: undefined,
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
flag: '--proverNode.archiverUrl <value>',
|
|
287
|
+
description: 'URL for an archiver service',
|
|
288
|
+
defaultValue: undefined,
|
|
289
|
+
envVar: 'ARCHIVER_URL',
|
|
290
|
+
},
|
|
291
|
+
...getOptions(
|
|
292
|
+
'proverNode',
|
|
293
|
+
omitConfigMappings(proverNodeConfigMappings, [
|
|
294
|
+
// filter out options passed separately
|
|
295
|
+
...(Object.keys(archiverConfigMappings) as (keyof ArchiverConfig)[]),
|
|
296
|
+
...(Object.keys(proverBrokerConfigMappings) as (keyof ProverBrokerConfig)[]),
|
|
297
|
+
...(Object.keys(proverAgentConfigMappings) as (keyof ProverAgentConfig)[]),
|
|
298
|
+
]),
|
|
299
|
+
),
|
|
300
|
+
],
|
|
301
|
+
'PROVER BROKER': [
|
|
302
|
+
{
|
|
303
|
+
flag: '--prover-broker',
|
|
304
|
+
description: 'Starts Aztec proving job broker',
|
|
305
|
+
defaultValue: undefined,
|
|
306
|
+
envVar: undefined,
|
|
307
|
+
},
|
|
308
|
+
...getOptions(
|
|
309
|
+
'proverBroker',
|
|
310
|
+
// filter out archiver options from prover node options as they're passed separately in --archiver
|
|
311
|
+
proverBrokerConfigMappings,
|
|
312
|
+
),
|
|
313
|
+
],
|
|
314
|
+
'PROVER AGENT': [
|
|
315
|
+
{
|
|
316
|
+
flag: '--prover-agent',
|
|
317
|
+
description: 'Starts Aztec Prover Agent with options',
|
|
318
|
+
defaultValue: undefined,
|
|
319
|
+
envVar: undefined,
|
|
320
|
+
},
|
|
321
|
+
...getOptions('proverAgent', proverAgentConfigMappings),
|
|
322
|
+
],
|
|
323
|
+
'P2P BOOTSTRAP': [
|
|
324
|
+
{
|
|
325
|
+
flag: '--p2p-bootstrap',
|
|
326
|
+
description: 'Starts Aztec P2P Bootstrap with options',
|
|
327
|
+
defaultValue: undefined,
|
|
328
|
+
envVar: undefined,
|
|
329
|
+
},
|
|
330
|
+
...getOptions('p2pBootstrap', bootnodeConfigMappings),
|
|
331
|
+
],
|
|
332
|
+
BOT: [
|
|
333
|
+
{
|
|
334
|
+
flag: '--bot',
|
|
335
|
+
description: 'Starts Aztec Bot with options',
|
|
336
|
+
defaultValue: undefined,
|
|
337
|
+
envVar: undefined,
|
|
338
|
+
},
|
|
339
|
+
...getOptions('bot', botConfigMappings),
|
|
340
|
+
],
|
|
341
|
+
TXE: [
|
|
342
|
+
{
|
|
343
|
+
flag: '--txe',
|
|
344
|
+
description: 'Starts Aztec TXE with options',
|
|
345
|
+
defaultValue: undefined,
|
|
346
|
+
envVar: undefined,
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
FAUCET: [
|
|
350
|
+
{
|
|
351
|
+
flag: '--faucet',
|
|
352
|
+
description: 'Starts the Aztec faucet',
|
|
353
|
+
defaultValue: undefined,
|
|
354
|
+
envVar: undefined,
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
flag: '--faucet.apiServer',
|
|
358
|
+
description: 'Starts a simple HTTP server to access the faucet',
|
|
359
|
+
defaultValue: true,
|
|
360
|
+
envVar: undefined,
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
flag: '--faucet.apiServerPort <value>',
|
|
364
|
+
description: 'The port on which to start the api server on',
|
|
365
|
+
defaultValue: 8080,
|
|
366
|
+
envVar: undefined,
|
|
367
|
+
parseVal: val => parseInt(val, 10),
|
|
368
|
+
},
|
|
369
|
+
...getOptions('faucet', faucetConfigMapping),
|
|
370
|
+
],
|
|
371
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export type NetworkNames = 'testnet-ignition';
|
|
2
|
+
|
|
3
|
+
export type L2ChainConfig = {
|
|
4
|
+
l1ChainId: number;
|
|
5
|
+
ethereumSlotDuration: number;
|
|
6
|
+
aztecSlotDuration: number;
|
|
7
|
+
aztecEpochDuration: number;
|
|
8
|
+
aztecProofSubmissionWindow: number;
|
|
9
|
+
testAccounts: boolean;
|
|
10
|
+
p2pEnabled: boolean;
|
|
11
|
+
p2pBootstrapNodes: string[];
|
|
12
|
+
registryAddress: string;
|
|
13
|
+
seqMinTxsPerBlock: number;
|
|
14
|
+
seqMaxTxsPerBlock: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const testnetIgnitionL2ChainConfig: L2ChainConfig = {
|
|
18
|
+
l1ChainId: 11155111,
|
|
19
|
+
ethereumSlotDuration: 12,
|
|
20
|
+
aztecSlotDuration: 36,
|
|
21
|
+
aztecEpochDuration: 32,
|
|
22
|
+
aztecProofSubmissionWindow: 64,
|
|
23
|
+
testAccounts: true,
|
|
24
|
+
p2pEnabled: true,
|
|
25
|
+
p2pBootstrapNodes: [],
|
|
26
|
+
registryAddress: '0x12b3ebc176a1646b911391eab3760764f2e05fe3',
|
|
27
|
+
seqMinTxsPerBlock: 0,
|
|
28
|
+
seqMaxTxsPerBlock: 0,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export async function getBootnodes(networkName: NetworkNames) {
|
|
32
|
+
const url = `http://static.aztec.network/${networkName}/bootnodes.json`;
|
|
33
|
+
const response = await fetch(url);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`Failed to fetch basic contract addresses from ${url}`);
|
|
36
|
+
}
|
|
37
|
+
const json = await response.json();
|
|
38
|
+
return json['bootnodes'];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function getL2ChainConfig(networkName: NetworkNames): Promise<L2ChainConfig | undefined> {
|
|
42
|
+
if (networkName === 'testnet-ignition') {
|
|
43
|
+
const config = { ...testnetIgnitionL2ChainConfig };
|
|
44
|
+
config.p2pBootstrapNodes = await getBootnodes(networkName);
|
|
45
|
+
return config;
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function enrichVar(envVar: string, value: string) {
|
|
51
|
+
// Don't override
|
|
52
|
+
if (process.env[envVar]) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
process.env[envVar] = value;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export async function enrichEnvironmentWithChainConfig(networkName: NetworkNames) {
|
|
59
|
+
const config = await getL2ChainConfig(networkName);
|
|
60
|
+
if (!config) {
|
|
61
|
+
throw new Error(`Unknown network name: ${networkName}`);
|
|
62
|
+
}
|
|
63
|
+
enrichVar('ETHEREUM_SLOT_DURATION', config.ethereumSlotDuration.toString());
|
|
64
|
+
enrichVar('AZTEC_SLOT_DURATION', config.aztecSlotDuration.toString());
|
|
65
|
+
enrichVar('AZTEC_EPOCH_DURATION', config.aztecEpochDuration.toString());
|
|
66
|
+
enrichVar('AZTEC_PROOF_SUBMISSION_WINDOW', config.aztecProofSubmissionWindow.toString());
|
|
67
|
+
enrichVar('P2P_BOOTSTRAP_NODES', config.p2pBootstrapNodes.join(','));
|
|
68
|
+
enrichVar('TEST_ACCOUNTS', config.testAccounts.toString());
|
|
69
|
+
enrichVar('P2P_ENABLED', config.p2pEnabled.toString());
|
|
70
|
+
enrichVar('L1_CHAIN_ID', config.l1ChainId.toString());
|
|
71
|
+
enrichVar('REGISTRY_CONTRACT_ADDRESS', config.registryAddress);
|
|
72
|
+
enrichVar('SEQ_MIN_TX_PER_BLOCK', config.seqMinTxsPerBlock.toString());
|
|
73
|
+
enrichVar('SEQ_MAX_TX_PER_BLOCK', config.seqMaxTxsPerBlock.toString());
|
|
74
|
+
}
|
package/src/cli/cli.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
2
|
+
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
|
|
5
|
+
import { aztecStartOptions } from './aztec_start_options.js';
|
|
6
|
+
import { addOptions, printAztecStartHelpText } from './util.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Returns commander program that defines the 'aztec' command line interface.
|
|
10
|
+
* @param userLog - log function for logging user output.
|
|
11
|
+
* @param debugLogger - logger for logging debug messages.
|
|
12
|
+
*/
|
|
13
|
+
export function injectAztecCommands(program: Command, userLog: LogFn, debugLogger: Logger): Command {
|
|
14
|
+
const startCmd = new Command('start').description(
|
|
15
|
+
'Starts Aztec modules. Options for each module can be set as key-value pairs (e.g. "option1=value1,option2=value2") or as environment variables.',
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
// Assuming commands are added elsewhere, here we just add options to the main program
|
|
19
|
+
Object.keys(aztecStartOptions).forEach(category => {
|
|
20
|
+
addOptions(startCmd, aztecStartOptions[category]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
startCmd.helpInformation = printAztecStartHelpText;
|
|
24
|
+
|
|
25
|
+
startCmd.action(async options => {
|
|
26
|
+
const { aztecStart } = await import('./aztec_start_action.js');
|
|
27
|
+
return await aztecStart(options, userLog, debugLogger);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
program.addCommand(startCmd);
|
|
31
|
+
|
|
32
|
+
program.configureHelp({ sortSubcommands: true });
|
|
33
|
+
|
|
34
|
+
program.addHelpText(
|
|
35
|
+
'after',
|
|
36
|
+
`
|
|
37
|
+
|
|
38
|
+
Additional commands:
|
|
39
|
+
|
|
40
|
+
test [options]: starts a dockerized TXE node via
|
|
41
|
+
$ aztec start --txe
|
|
42
|
+
then runs
|
|
43
|
+
$ aztec-nargo test --silence-warnings --oracle-resolver=<TXE_ADDRESS> [options]
|
|
44
|
+
`,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return program;
|
|
48
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Archiver, type ArchiverConfig, KVArchiverDataStore, archiverConfigMappings } from '@aztec/archiver';
|
|
2
|
+
import { createLogger } from '@aztec/aztec.js';
|
|
3
|
+
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
4
|
+
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
5
|
+
import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
|
|
6
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
|
+
import { ArchiverApiSchema } from '@aztec/stdlib/interfaces/server';
|
|
8
|
+
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
9
|
+
|
|
10
|
+
import { getL1Config } from '../get_l1_config.js';
|
|
11
|
+
import { extractRelevantOptions } from '../util.js';
|
|
12
|
+
|
|
13
|
+
export type { ArchiverConfig, DataStoreConfig };
|
|
14
|
+
|
|
15
|
+
/** Starts a standalone archiver. */
|
|
16
|
+
export async function startArchiver(
|
|
17
|
+
options: any,
|
|
18
|
+
signalHandlers: (() => Promise<void>)[],
|
|
19
|
+
services: NamespacedApiHandlers,
|
|
20
|
+
): Promise<{ config: ArchiverConfig & DataStoreConfig }> {
|
|
21
|
+
let archiverConfig = extractRelevantOptions<ArchiverConfig & DataStoreConfig>(
|
|
22
|
+
options,
|
|
23
|
+
{
|
|
24
|
+
...archiverConfigMappings,
|
|
25
|
+
...dataConfigMappings,
|
|
26
|
+
},
|
|
27
|
+
'archiver',
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
if (!archiverConfig.l1Contracts.registryAddress || archiverConfig.l1Contracts.registryAddress.isZero()) {
|
|
31
|
+
throw new Error('L1 registry address is required to start an Archiver');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const { addresses, config } = await getL1Config(
|
|
35
|
+
archiverConfig.l1Contracts.registryAddress,
|
|
36
|
+
archiverConfig.l1RpcUrls,
|
|
37
|
+
archiverConfig.l1ChainId,
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
archiverConfig.l1Contracts = addresses;
|
|
41
|
+
archiverConfig = { ...archiverConfig, ...config };
|
|
42
|
+
|
|
43
|
+
const storeLog = createLogger('archiver:lmdb');
|
|
44
|
+
const store = await createStore('archiver', KVArchiverDataStore.SCHEMA_VERSION, archiverConfig, storeLog);
|
|
45
|
+
const archiverStore = new KVArchiverDataStore(store, archiverConfig.maxLogs);
|
|
46
|
+
|
|
47
|
+
const telemetry = initTelemetryClient(getTelemetryClientConfig());
|
|
48
|
+
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/10056): place CL url in config here
|
|
49
|
+
const blobSinkClient = createBlobSinkClient();
|
|
50
|
+
const archiver = await Archiver.createAndSync(archiverConfig, archiverStore, { telemetry, blobSinkClient }, true);
|
|
51
|
+
services.archiver = [archiver, ArchiverApiSchema];
|
|
52
|
+
signalHandlers.push(archiver.stop);
|
|
53
|
+
|
|
54
|
+
return { config: archiverConfig };
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type BlobSinkConfig,
|
|
3
|
+
blobSinkConfigMappings,
|
|
4
|
+
createBlobSinkServer,
|
|
5
|
+
getBlobSinkConfigFromEnv,
|
|
6
|
+
} from '@aztec/blob-sink/server';
|
|
7
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
8
|
+
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
9
|
+
|
|
10
|
+
import { extractRelevantOptions } from '../util.js';
|
|
11
|
+
|
|
12
|
+
export async function startBlobSink(options: any, signalHandlers: (() => Promise<void>)[], userLog: LogFn) {
|
|
13
|
+
if (options.prover || options.node || options.sequencer || options.pxe || options.p2pBootstrap || options.txe) {
|
|
14
|
+
userLog(
|
|
15
|
+
`Starting a blob sink with --node, --sequencer, --pxe, --p2p-bootstrap, --prover or --txe is not supported.`,
|
|
16
|
+
);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const blobSinkConfig = {
|
|
21
|
+
...getBlobSinkConfigFromEnv(), // get default config from env
|
|
22
|
+
...extractRelevantOptions<BlobSinkConfig>(options, blobSinkConfigMappings, 'blobSink'), // override with command line options
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const telemetry = initTelemetryClient(getTelemetryClientConfig());
|
|
26
|
+
|
|
27
|
+
const blobSink = await createBlobSinkServer(blobSinkConfig, telemetry);
|
|
28
|
+
signalHandlers.push(blobSink.stop.bind(blobSink));
|
|
29
|
+
|
|
30
|
+
await blobSink.start();
|
|
31
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type BotConfig, BotRunner, botConfigMappings, getBotRunnerApiHandler } from '@aztec/bot';
|
|
2
|
+
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
3
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
4
|
+
import type { AztecNode, PXE } from '@aztec/stdlib/interfaces/client';
|
|
5
|
+
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
6
|
+
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
+
|
|
8
|
+
import { extractRelevantOptions } from '../util.js';
|
|
9
|
+
|
|
10
|
+
export async function startBot(
|
|
11
|
+
options: any,
|
|
12
|
+
signalHandlers: (() => Promise<void>)[],
|
|
13
|
+
services: NamespacedApiHandlers,
|
|
14
|
+
userLog: LogFn,
|
|
15
|
+
) {
|
|
16
|
+
const { proverNode, archiver, sequencer, p2pBootstrap, txe, prover } = options;
|
|
17
|
+
if (proverNode || archiver || sequencer || p2pBootstrap || txe || prover) {
|
|
18
|
+
userLog(
|
|
19
|
+
`Starting a bot with --prover-node, --prover, --archiver, --sequencer, --p2p-bootstrap, or --txe is not supported.`,
|
|
20
|
+
);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
// Start a PXE client that is used by the bot if required
|
|
24
|
+
let pxe: PXE | undefined;
|
|
25
|
+
if (options.pxe) {
|
|
26
|
+
const { addPXE } = await import('./start_pxe.js');
|
|
27
|
+
({ pxe } = await addPXE(options, signalHandlers, services, userLog));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const telemetry = initTelemetryClient(getTelemetryClientConfig());
|
|
31
|
+
await addBot(options, signalHandlers, services, { pxe, telemetry });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function addBot(
|
|
35
|
+
options: any,
|
|
36
|
+
signalHandlers: (() => Promise<void>)[],
|
|
37
|
+
services: NamespacedApiHandlers,
|
|
38
|
+
deps: { pxe?: PXE; node?: AztecNode; telemetry: TelemetryClient },
|
|
39
|
+
) {
|
|
40
|
+
const config = extractRelevantOptions<BotConfig>(options, botConfigMappings, 'bot');
|
|
41
|
+
|
|
42
|
+
const botRunner = new BotRunner(config, deps);
|
|
43
|
+
if (!config.noStart) {
|
|
44
|
+
void botRunner.start(); // Do not block since bot setup takes time
|
|
45
|
+
}
|
|
46
|
+
services.bot = getBotRunnerApiHandler(botRunner);
|
|
47
|
+
signalHandlers.push(botRunner.stop);
|
|
48
|
+
return Promise.resolve();
|
|
49
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Faucet,
|
|
3
|
+
FaucetSchema,
|
|
4
|
+
createFaucetHttpServer,
|
|
5
|
+
faucetConfigMapping,
|
|
6
|
+
getFaucetConfigFromEnv,
|
|
7
|
+
} from '@aztec/aztec-faucet';
|
|
8
|
+
import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
|
|
9
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
10
|
+
|
|
11
|
+
import { extractNamespacedOptions, extractRelevantOptions } from '../util.js';
|
|
12
|
+
|
|
13
|
+
export async function startFaucet(
|
|
14
|
+
options: any,
|
|
15
|
+
signalHandlers: (() => Promise<void>)[],
|
|
16
|
+
services: NamespacedApiHandlers,
|
|
17
|
+
log: LogFn,
|
|
18
|
+
) {
|
|
19
|
+
const faucetOptions = extractNamespacedOptions(options, 'faucet');
|
|
20
|
+
const config = {
|
|
21
|
+
...getFaucetConfigFromEnv(),
|
|
22
|
+
...extractRelevantOptions(options, faucetConfigMapping, 'faucet'),
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const faucet = await Faucet.create(config);
|
|
26
|
+
if (faucetOptions.apiServer) {
|
|
27
|
+
const httpServer = createFaucetHttpServer(faucet);
|
|
28
|
+
httpServer.listen(faucetOptions.apiServerPort);
|
|
29
|
+
signalHandlers.push(() => new Promise(res => httpServer.close(() => res())));
|
|
30
|
+
log(`Faucet now running on port: ${faucetOptions.apiServerPort}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
services.faucet = [faucet, FaucetSchema];
|
|
34
|
+
}
|