@aztec/cli 3.0.0-nightly.20251212 → 3.0.0-nightly.20251214
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/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
- package/dest/cmds/l1/{deploy_l1_contracts.js → deploy_l1_contracts_cmd.js} +38 -3
- package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -4
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +2 -2
- package/dest/cmds/l1/index.d.ts +1 -2
- package/dest/cmds/l1/index.d.ts.map +1 -1
- package/dest/cmds/l1/index.js +10 -8
- package/dest/cmds/misc/index.d.ts +1 -1
- package/dest/cmds/misc/index.d.ts.map +1 -1
- package/dest/cmds/misc/index.js +1 -1
- package/dest/cmds/validator_keys/utils.d.ts +1 -1
- package/dest/cmds/validator_keys/utils.d.ts.map +1 -1
- package/dest/cmds/validator_keys/utils.js +1 -1
- package/dest/config/chain_l2_config.d.ts +3 -3
- package/dest/config/chain_l2_config.d.ts.map +1 -1
- package/dest/utils/aztec.d.ts +4 -12
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +18 -42
- package/dest/utils/commands.d.ts +7 -6
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +6 -5
- package/package.json +32 -29
- package/src/cmds/l1/{deploy_l1_contracts.ts → deploy_l1_contracts_cmd.ts} +38 -21
- package/src/cmds/l1/deploy_new_rollup.ts +3 -9
- package/src/cmds/l1/index.ts +7 -17
- package/src/cmds/misc/index.ts +1 -1
- package/src/cmds/validator_keys/utils.ts +2 -1
- package/src/config/chain_l2_config.ts +2 -2
- package/src/utils/aztec.ts +21 -80
- package/src/utils/commands.ts +6 -5
- package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
|
+
export declare function deployL1ContractsCmd(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, testAccounts: boolean, sponsoredFPC: boolean, json: boolean, initialValidators: EthAddress[], realVerifier: boolean, existingToken: EthAddress | undefined, log: LogFn, debugLogger: Logger): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0c19jbWQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2RlcGxveV9sMV9jb250cmFjdHNfY21kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzVELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVMzRCx3QkFBc0Isb0JBQW9CLENBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsSUFBSSxFQUFFLE9BQU8sRUFDYixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFDL0IsWUFBWSxFQUFFLE9BQU8sRUFDckIsYUFBYSxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQ3JDLEdBQUcsRUFBRSxLQUFLLEVBQ1YsV0FBVyxFQUFFLE1BQU0saUJBOEVwQiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy_l1_contracts_cmd.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts_cmd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAK5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAS3D,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,UAAU,EAAE,EAC/B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA8EpB"}
|
|
@@ -1,22 +1,57 @@
|
|
|
1
1
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
3
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
4
|
+
import { deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
4
5
|
import { SecretValue } from '@aztec/foundation/config';
|
|
6
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
5
7
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
6
|
-
import {
|
|
8
|
+
import { mnemonicToAccount } from 'viem/accounts';
|
|
9
|
+
import { addLeadingHex } from '../../utils/aztec.js';
|
|
7
10
|
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
8
|
-
export async function
|
|
11
|
+
export async function deployL1ContractsCmd(rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, testAccounts, sponsoredFPC, json, initialValidators, realVerifier, existingToken, log, debugLogger) {
|
|
9
12
|
const config = getL1ContractsConfigEnvVars();
|
|
13
|
+
// Compute initial accounts for genesis (test accounts + sponsored FPC)
|
|
10
14
|
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
11
15
|
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
12
16
|
const initialFundedAccounts = initialAccounts.map((a)=>a.address).concat(sponsoredFPCAddress);
|
|
13
17
|
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
18
|
+
// Get the VK tree root
|
|
19
|
+
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
20
|
+
const vkTreeRoot = getVKTreeRoot();
|
|
21
|
+
// Get private key (from direct input or mnemonic)
|
|
22
|
+
let deployerPrivateKey;
|
|
23
|
+
if (privateKey) {
|
|
24
|
+
deployerPrivateKey = addLeadingHex(privateKey);
|
|
25
|
+
} else {
|
|
26
|
+
const account = mnemonicToAccount(mnemonic, {
|
|
27
|
+
addressIndex: mnemonicIndex
|
|
28
|
+
});
|
|
29
|
+
deployerPrivateKey = `0x${Buffer.from(account.getHdKey().privateKey).toString('hex')}`;
|
|
30
|
+
}
|
|
31
|
+
// Prepare validator operators with bn254 keys
|
|
14
32
|
const initialValidatorOperators = initialValidators.map((a)=>({
|
|
15
33
|
attester: a,
|
|
16
34
|
withdrawer: a,
|
|
17
35
|
bn254SecretKey: new SecretValue(Fr.random().toBigInt())
|
|
18
36
|
}));
|
|
19
|
-
|
|
37
|
+
debugLogger.info('Deploying L1 contracts via Forge...');
|
|
38
|
+
// Deploy using l1-contracts Forge scripts
|
|
39
|
+
const { l1ContractAddresses, rollupVersion } = await deployAztecL1Contracts(rpcUrls[0], deployerPrivateKey, chainId, {
|
|
40
|
+
// Initial validators to add during deployment
|
|
41
|
+
initialValidators: initialValidatorOperators,
|
|
42
|
+
// Genesis config
|
|
43
|
+
vkTreeRoot,
|
|
44
|
+
protocolContractsHash,
|
|
45
|
+
genesisArchiveRoot,
|
|
46
|
+
// Deployment options
|
|
47
|
+
realVerifier,
|
|
48
|
+
...config,
|
|
49
|
+
feeJuicePortalInitialBalance: fundingNeeded,
|
|
50
|
+
existingTokenAddress: existingToken
|
|
51
|
+
});
|
|
52
|
+
debugLogger.info('Forge deployment complete', {
|
|
53
|
+
rollupVersion
|
|
54
|
+
});
|
|
20
55
|
if (json) {
|
|
21
56
|
log(JSON.stringify(Object.fromEntries(Object.entries(l1ContractAddresses).map(([k, v])=>[
|
|
22
57
|
k,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Operator } from '@aztec/ethereum/deploy-l1-contracts';
|
|
1
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
-
import type { LogFn
|
|
4
|
-
export declare function deployNewRollup(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number,
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
4
|
+
export declare function deployNewRollup(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, testAccounts: boolean, sponsoredFPC: boolean, json: boolean, initialValidators: Operator[], realVerifier: boolean, log: LogFn): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X25ld19yb2xsdXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2RlcGxveV9uZXdfcm9sbHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTW5ELHdCQUFzQixlQUFlLENBQ25DLGVBQWUsRUFBRSxVQUFVLEVBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsSUFBSSxFQUFFLE9BQU8sRUFDYixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsRUFDN0IsWUFBWSxFQUFFLE9BQU8sRUFDckIsR0FBRyxFQUFFLEtBQUssaUJBNENYIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_new_rollup.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_new_rollup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"deploy_new_rollup.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_new_rollup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMnD,wBAAsB,eAAe,CACnC,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,KAAK,iBA4CX"}
|
|
@@ -3,13 +3,13 @@ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
|
3
3
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
4
4
|
import { deployNewRollupContracts } from '../../utils/aztec.js';
|
|
5
5
|
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
6
|
-
export async function deployNewRollup(registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex,
|
|
6
|
+
export async function deployNewRollup(registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, testAccounts, sponsoredFPC, json, initialValidators, realVerifier, log) {
|
|
7
7
|
const config = getL1ContractsConfigEnvVars();
|
|
8
8
|
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
9
9
|
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
10
10
|
const initialFundedAccounts = initialAccounts.map((a)=>a.address).concat(sponsoredFPCAddress);
|
|
11
11
|
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
12
|
-
const { rollup, slashFactoryAddress } = await deployNewRollupContracts(registryAddress, rpcUrls,
|
|
12
|
+
const { rollup, slashFactoryAddress } = await deployNewRollupContracts(registryAddress, rpcUrls, privateKey, chainId, mnemonic, mnemonicIndex, initialValidators, genesisArchiveRoot, fundingNeeded, config, realVerifier);
|
|
13
13
|
if (json) {
|
|
14
14
|
log(JSON.stringify({
|
|
15
15
|
rollupAddress: rollup.address,
|
package/dest/cmds/l1/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
2
2
|
import { type Command } from 'commander';
|
|
3
|
-
export { addL1Validator } from './update_l1_validators.js';
|
|
4
3
|
export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQVUsTUFBTSxXQUFXLENBQUM7QUF3QmpELHdCQUFnQixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBNmUvRSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AAwBjD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WA6e/E"}
|
package/dest/cmds/l1/index.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import { Option } from 'commander';
|
|
3
|
-
import { getL1RollupAddressFromEnv } from '../../config/get_l1_config.js';
|
|
4
3
|
import { ETHEREUM_HOSTS, MNEMONIC, PRIVATE_KEY, l1ChainIdOption, nodeOption, parseAztecAddress, parseBigint, parseEthereumAddress } from '../../utils/commands.js';
|
|
5
|
-
export { addL1Validator } from './update_l1_validators.js';
|
|
6
4
|
const l1RpcUrlsOption = new Option('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)').env('ETHEREUM_HOSTS').default([
|
|
7
5
|
ETHEREUM_HOSTS
|
|
8
6
|
]).makeOptionMandatory(true).argParser((arg)=>arg.split(',').map((url)=>url.trim()));
|
|
9
7
|
const networkOption = new Option('--network <string>', 'Network to execute against').env('NETWORK');
|
|
10
8
|
export function injectCommands(program, log, debugLogger) {
|
|
11
|
-
program.command('deploy-l1-contracts').description('Deploys all necessary Ethereum contracts for Aztec.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--validators <string>', 'Comma separated list of validators').option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', (arg)=>parseInt(arg), 0).addOption(l1ChainIdOption).option('--
|
|
12
|
-
const {
|
|
9
|
+
program.command('deploy-l1-contracts').description('Deploys all necessary Ethereum contracts for Aztec.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--validators <string>', 'Comma separated list of validators').option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', (arg)=>parseInt(arg), 0).addOption(l1ChainIdOption).option('--json', 'Output the contract addresses in JSON format').option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts').option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract').option('--real-verifier', 'Deploy the real verifier', false).option('--existing-token <address>', 'Use an existing ERC20 for both fee and staking', parseEthereumAddress).action(async (options)=>{
|
|
10
|
+
const { deployL1ContractsCmd } = await import('./deploy_l1_contracts_cmd.js');
|
|
13
11
|
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
14
|
-
await
|
|
12
|
+
await deployL1ContractsCmd(options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.testAccounts, options.sponsoredFpc, options.json, initialValidators, options.realVerifier, options.existingToken, log, debugLogger);
|
|
15
13
|
});
|
|
16
|
-
program.command('deploy-new-rollup').description('Deploys a new rollup contract and adds it to the registry (if you are the owner).').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--validators <string>', 'Comma separated list of validators').option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', MNEMONIC ?? 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', (arg)=>parseInt(arg), 0).addOption(l1ChainIdOption).option('--
|
|
14
|
+
program.command('deploy-new-rollup').description('Deploys a new rollup contract and adds it to the registry (if you are the owner).').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--validators <string>', 'Comma separated list of validators').option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', MNEMONIC ?? 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', (arg)=>parseInt(arg), 0).addOption(l1ChainIdOption).option('--json', 'Output the contract addresses in JSON format').option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts').option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract').option('--real-verifier', 'Deploy the real verifier', false).action(async (options)=>{
|
|
17
15
|
const { deployNewRollup } = await import('./deploy_new_rollup.js');
|
|
18
16
|
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
19
|
-
await deployNewRollup(options.registryAddress, options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.
|
|
17
|
+
await deployNewRollup(options.registryAddress, options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.testAccounts, options.sponsoredFpc, options.json, initialValidators, options.realVerifier, log);
|
|
20
18
|
});
|
|
21
19
|
program.command('deposit-governance-tokens').description('Deposits governance tokens to the governance contract.').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).requiredOption('--recipient <string>', 'The recipient of the tokens', parseEthereumAddress).requiredOption('-a, --amount <string>', 'The amount of tokens to deposit', parseBigint).option('--mint', 'Mint the tokens on L1', false).addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('-p, --private-key <string>', 'The private key to use to deposit', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use to deposit', 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use to deposit', (arg)=>parseInt(arg), 0).action(async (options)=>{
|
|
22
20
|
const { depositGovernanceTokens } = await import('./governance_utils.js');
|
|
@@ -98,7 +96,11 @@ export function injectCommands(program, log, debugLogger) {
|
|
|
98
96
|
});
|
|
99
97
|
program.command('add-l1-validator').description('Adds a validator to the L1 rollup contract via a direct deposit.').addOption(l1RpcUrlsOption).addOption(networkOption).option('-pk, --private-key <string>', 'The private key to use sending the transaction', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use sending the transaction', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--attester <address>', 'ethereum address of the attester', parseEthereumAddress).option('--withdrawer <address>', 'ethereum address of the withdrawer', parseEthereumAddress).option('--bls-secret-key <string>', 'The BN254 scalar field element used as a secret key for BLS signatures. Will be associated with the attester address.', parseBigint).option('--move-with-latest-rollup', 'Whether to move with the latest rollup', true).option('--rollup <string>', 'Rollup contract address', parseEthereumAddress).action(async (options)=>{
|
|
100
98
|
const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
|
|
101
|
-
|
|
99
|
+
let rollupAddress = options.rollup;
|
|
100
|
+
if (!rollupAddress) {
|
|
101
|
+
const { getL1RollupAddressFromEnv } = await import('../../config/get_l1_config.js');
|
|
102
|
+
rollupAddress = await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
|
|
103
|
+
}
|
|
102
104
|
await addL1ValidatorViaRollup({
|
|
103
105
|
rpcUrls: options.l1RpcUrls,
|
|
104
106
|
chainId: options.l1ChainId,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec/foundation/log';
|
|
2
2
|
import type { Command } from 'commander';
|
|
3
3
|
export declare function injectCommands(program: Command, log: LogFn): Command;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL21pc2MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXpDLHdCQUFnQixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxXQThGMUQifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,WA8F1D"}
|
package/dest/cmds/misc/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { printENR } from '@aztec/p2p/enr';
|
|
2
1
|
import { l1ChainIdOption, prettyPrintJSON } from '../../utils/commands.js';
|
|
3
2
|
export function injectCommands(program, log) {
|
|
4
3
|
program.command('generate-keys').summary('Generates encryption and signing private keys.').description('Generates and encryption and signing private key pair.').option('--json', 'Output the keys in JSON format').action(async ({ json })=>{
|
|
@@ -21,6 +20,7 @@ export function injectCommands(program, log) {
|
|
|
21
20
|
await generateEncodedBootnodeENR(privateKey, p2pIp, p2pPort, options.l1ChainId, log);
|
|
22
21
|
});
|
|
23
22
|
program.command('decode-enr').summary('Decodes an ENR record').description('Decodes and ENR record').argument('<enr>', 'The encoded ENR string').action(async (enr)=>{
|
|
23
|
+
const { printENR } = await import('@aztec/p2p/enr');
|
|
24
24
|
await printENR(enr, log);
|
|
25
25
|
});
|
|
26
26
|
program.command('example-contracts').description('Lists the example contracts available to deploy from @aztec/noir-contracts.js').action(async ()=>{
|
|
@@ -22,4 +22,4 @@ export declare function validatePublisherOptions(options: {
|
|
|
22
22
|
publishers?: string[];
|
|
23
23
|
publisherCount?: number;
|
|
24
24
|
}): void;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL3ZhbGlkYXRvcl9rZXlzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSWhFLGVBQU8sTUFBTSxjQUFjLHVCQUF1QixDQUFDO0FBRW5ELHdCQUFnQixzQkFBc0IsQ0FBQyxPQUFPLEVBQUU7SUFDOUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2YsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNkLFFBV0E7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsT0FBTyxFQUFFO0lBQ25ELFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN2QixVQUFVLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDeEIsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDckIsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLFFBZUE7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsT0FBTyxFQUFFO0lBQUUsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsUUFNaEc7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsT0FBTyxFQUFFO0lBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUE7Q0FBRSxRQXdCbkcifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator_keys/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator_keys/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIhE,eAAO,MAAM,cAAc,uBAAuB,CAAC;AAEnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,QAWA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,QAeA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,QAMhG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,QAwBnG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ethPrivateKeySchema } from '@aztec/node-keystore';
|
|
1
|
+
import { ethPrivateKeySchema } from '@aztec/node-keystore/schemas';
|
|
2
2
|
export const defaultBlsPath = 'm/12381/3600/0/0/0';
|
|
3
3
|
export function validateBlsPathOptions(options) {
|
|
4
4
|
if (options.blsPath && options.blsPath !== defaultBlsPath) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type L1ContractsConfig } from '@aztec/ethereum/config';
|
|
2
|
-
import type { L1TxUtilsConfig } from '@aztec/ethereum/l1-tx-utils';
|
|
2
|
+
import type { L1TxUtilsConfig } from '@aztec/ethereum/l1-tx-utils/config';
|
|
3
3
|
import type { NetworkNames } from '@aztec/foundation/config';
|
|
4
4
|
import type { SharedNodeConfig } from '@aztec/node-lib/config';
|
|
5
|
-
import type { P2PConfig } from '@aztec/p2p';
|
|
5
|
+
import type { P2PConfig } from '@aztec/p2p/config';
|
|
6
6
|
import type { SequencerConfig, SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
7
7
|
export type L2ChainConfig = Omit<L1ContractsConfig, keyof L1TxUtilsConfig> & Omit<SlasherConfig, 'slashValidatorsNever' | 'slashValidatorsAlways' | 'slashOverridePayload' | 'slashSelfAllowed'> & Pick<P2PConfig, 'bootstrapNodes' | 'p2pEnabled' | 'txPoolDeleteTxsAfterReorg'> & Pick<SequencerConfig, 'minTxsPerBlock' | 'maxTxsPerBlock'> & {
|
|
8
8
|
l1ChainId: number;
|
|
@@ -38,4 +38,4 @@ export declare const devnetL2ChainConfig: L2ChainConfig;
|
|
|
38
38
|
export declare function getL2ChainConfig(networkName: NetworkNames): L2ChainConfig | undefined;
|
|
39
39
|
export declare function enrichEnvironmentWithChainName(networkName: NetworkNames): void;
|
|
40
40
|
export declare function enrichEnvironmentWithChainConfig(config: L2ChainConfig): void;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5fbDJfY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NoYWluX2wyX2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLEtBQUssaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVl0RixNQUFNLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQyxHQUN4RSxJQUFJLENBQUMsYUFBYSxFQUFFLHNCQUFzQixHQUFHLHVCQUF1QixHQUFHLHNCQUFzQixHQUFHLGtCQUFrQixDQUFDLEdBQ25ILElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLDJCQUEyQixDQUFDLEdBQzlFLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRztJQUMzRCxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLFlBQVksRUFBRSxPQUFPLENBQUM7SUFDdEIsWUFBWSxFQUFFLE9BQU8sQ0FBQztJQUN0QixjQUFjLEVBQUUsTUFBTSxDQUFDO0lBQ3ZCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUNwQixhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDeEIsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN2QixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQztJQUM3QixvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLHlCQUF5QixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ25DLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEMsdUJBQXVCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDbEMscUJBQXFCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFJaEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0lBQzNCLHNCQUFzQixFQUFFLE1BQU0sQ0FBQztJQUMvQixxQkFBcUIsRUFBRSxNQUFNLENBQUM7SUFDOUIsc0JBQXNCLEVBQUUsTUFBTSxDQUFDO0lBQy9CLHVCQUF1QixFQUFFLE1BQU0sQ0FBQztJQUdoQyxlQUFlLEVBQUUsT0FBTyxDQUFDO0lBQ3pCLG1CQUFtQixFQUFFLE9BQU8sQ0FBQztDQUM5QixDQUFDO0FBK0NKLGVBQU8sTUFBTSw0QkFBNEIsRUFBRSxhQW1GMUMsQ0FBQztBQUVGLGVBQU8sTUFBTSwwQkFBMEIsRUFBRSxhQXVEeEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxvQkFBb0IsRUFBRSxhQXVEbEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxvQkFBb0IsRUFBRSxhQXlGbEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxvQkFBb0IsRUFBRSxhQXdGbEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxtQkFBbUIsRUFBRSxhQXVEakMsQ0FBQztBQUVGLHdCQUFnQixnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsWUFBWSxHQUFHLGFBQWEsR0FBRyxTQUFTLENBZ0JyRjtBQU1ELHdCQUFnQiw4QkFBOEIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxRQWF2RTtBQUVELHdCQUFnQixnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQWlHckUifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain_l2_config.d.ts","sourceRoot":"","sources":["../../src/config/chain_l2_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"chain_l2_config.d.ts","sourceRoot":"","sources":["../../src/config/chain_l2_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAYtF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,eAAe,CAAC,GACxE,IAAI,CAAC,aAAa,EAAE,sBAAsB,GAAG,uBAAuB,GAAG,sBAAsB,GAAG,kBAAkB,CAAC,GACnH,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,YAAY,GAAG,2BAA2B,CAAC,GAC9E,IAAI,CAAC,eAAe,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,GAAG;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAIhC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAGhC,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AA+CJ,eAAO,MAAM,4BAA4B,EAAE,aAmF1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,aAuDxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aAuDlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aAyFlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aAwFlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,aAuDjC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAgBrF;AAMD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,YAAY,QAavE;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,aAAa,QAiGrE"}
|
package/dest/utils/aztec.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { type ContractArtifact, type FunctionAbi } from '@aztec/aztec.js/abi';
|
|
|
2
2
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
4
4
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
|
-
import type {
|
|
5
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
6
6
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
|
-
import type
|
|
7
|
+
import { type LogFn } from '@aztec/foundation/log';
|
|
8
8
|
import type { NoirPackageConfig } from '@aztec/foundation/noir';
|
|
9
9
|
/**
|
|
10
10
|
* Helper to get an ABI function or throw error if it doesn't exist.
|
|
@@ -13,15 +13,7 @@ import type { NoirPackageConfig } from '@aztec/foundation/noir';
|
|
|
13
13
|
* @returns The function's ABI.
|
|
14
14
|
*/
|
|
15
15
|
export declare function getFunctionAbi(artifact: ContractArtifact, fnName: string): FunctionAbi;
|
|
16
|
-
|
|
17
|
-
* Function to execute the 'deployRollupContracts' command.
|
|
18
|
-
* @param rpcUrls - The RPC URL of the ethereum node.
|
|
19
|
-
* @param chainId - The chain ID of the L1 host.
|
|
20
|
-
* @param privateKey - The private key to be used in contract deployment.
|
|
21
|
-
* @param mnemonic - The mnemonic to be used in contract deployment.
|
|
22
|
-
*/
|
|
23
|
-
export declare function deployAztecContracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, acceleratedTestDeployments: boolean, config: L1ContractsConfig, existingToken: EthAddress | undefined, realVerifier: boolean, createVerificationJson: string | false, debugLogger: Logger): Promise<DeployL1ContractsReturnType>;
|
|
24
|
-
export declare function deployNewRollupContracts(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, config: L1ContractsConfig, realVerifier: boolean, createVerificationJson: string | false, logger: Logger): Promise<{
|
|
16
|
+
export declare function deployNewRollupContracts(registryAddress: EthAddress, rpcUrls: string[], privateKey: string | undefined, chainId: number, mnemonic: string, mnemonicIndex: number, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, config: L1ContractsConfig, realVerifier: boolean): Promise<{
|
|
25
17
|
rollup: RollupContract;
|
|
26
18
|
slashFactoryAddress: EthAddress;
|
|
27
19
|
}>;
|
|
@@ -62,4 +54,4 @@ export declare const stripLeadingHex: (hex: string) => string;
|
|
|
62
54
|
*/
|
|
63
55
|
export declare const addLeadingHex: (hex: string) => `0x${string}`;
|
|
64
56
|
export declare function prettyPrintNargoToml(config: NoirPackageConfig): string;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9henRlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyxXQUFXLEVBSWpCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVdoRTs7Ozs7R0FLRztBQUNILHdCQUFnQixjQUFjLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsV0FBVyxDQU10RjtBQUVELHdCQUFzQix3QkFBd0IsQ0FDNUMsZUFBZSxFQUFFLFVBQVUsRUFDM0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUNqQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFDZixRQUFRLEVBQUUsTUFBTSxFQUNoQixhQUFhLEVBQUUsTUFBTSxFQUNyQixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsRUFDN0Isa0JBQWtCLEVBQUUsRUFBRSxFQUN0Qiw0QkFBNEIsRUFBRSxNQUFNLEVBQ3BDLE1BQU0sRUFBRSxpQkFBaUIsRUFDekIsWUFBWSxFQUFFLE9BQU8sR0FDcEIsT0FBTyxDQUFDO0lBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQTtDQUFFLENBQUMsQ0FnRHRFO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUtqRTtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyw2QkE0QnBFO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQixNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSzs7OztHQU8zRztBQUVEOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sZUFBZSx5QkFLM0IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sYUFBYSxnQ0FLekIsQ0FBQztBQU9GLHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEdBQUcsTUFBTSxDQVV0RSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAWhE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAMtF;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,mBAAmB,EAAE,UAAU,CAAA;CAAE,CAAC,CAgDtE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAKjE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,6BA4BpE;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;;GAO3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,yBAK3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,gCAKzB,CAAC;AAOF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAUtE"}
|
package/dest/utils/aztec.js
CHANGED
|
@@ -2,10 +2,12 @@ import { FunctionType, getAllFunctionAbis, loadContractArtifact } from '@aztec/a
|
|
|
2
2
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { SecretValue } from '@aztec/foundation/config';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
6
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
6
7
|
import TOML from '@iarna/toml';
|
|
7
8
|
import { readFile } from 'fs/promises';
|
|
8
9
|
import { encodeArgs } from './encoding.js';
|
|
10
|
+
const logger = createLogger('cli:utils:aztec');
|
|
9
11
|
/**
|
|
10
12
|
* Helper to get an ABI function or throw error if it doesn't exist.
|
|
11
13
|
* @param artifact - Contract's build artifact in JSON format.
|
|
@@ -18,46 +20,21 @@ import { encodeArgs } from './encoding.js';
|
|
|
18
20
|
}
|
|
19
21
|
return fn;
|
|
20
22
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* @param rpcUrls - The RPC URL of the ethereum node.
|
|
24
|
-
* @param chainId - The chain ID of the L1 host.
|
|
25
|
-
* @param privateKey - The private key to be used in contract deployment.
|
|
26
|
-
* @param mnemonic - The mnemonic to be used in contract deployment.
|
|
27
|
-
*/ export async function deployAztecContracts(rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, salt, initialValidators, genesisArchiveRoot, feeJuicePortalInitialBalance, acceleratedTestDeployments, config, existingToken, realVerifier, createVerificationJson, debugLogger) {
|
|
28
|
-
const { createEthereumChain } = await import('@aztec/ethereum/chain');
|
|
29
|
-
const { deployL1Contracts } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
30
|
-
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
31
|
-
const account = !privateKey ? mnemonicToAccount(mnemonic, {
|
|
32
|
-
addressIndex: mnemonicIndex
|
|
33
|
-
}) : privateKeyToAccount(addLeadingHex(privateKey));
|
|
34
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
35
|
-
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
36
|
-
const result = await deployL1Contracts(chain.rpcUrls, account, chain.chainInfo, debugLogger, {
|
|
37
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
38
|
-
protocolContractsHash,
|
|
39
|
-
genesisArchiveRoot,
|
|
40
|
-
salt,
|
|
41
|
-
initialValidators,
|
|
42
|
-
acceleratedTestDeployments,
|
|
43
|
-
feeJuicePortalInitialBalance,
|
|
44
|
-
realVerifier,
|
|
45
|
-
existingTokenAddress: existingToken,
|
|
46
|
-
...config
|
|
47
|
-
}, config, createVerificationJson);
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
export async function deployNewRollupContracts(registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, salt, initialValidators, genesisArchiveRoot, feeJuicePortalInitialBalance, config, realVerifier, createVerificationJson, logger) {
|
|
51
|
-
const { createEthereumChain } = await import('@aztec/ethereum/chain');
|
|
52
|
-
const { createExtendedL1Client } = await import('@aztec/ethereum/client');
|
|
53
|
-
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
23
|
+
export async function deployNewRollupContracts(registryAddress, rpcUrls, privateKey, chainId, mnemonic, mnemonicIndex, initialValidators, genesisArchiveRoot, feeJuicePortalInitialBalance, config, realVerifier) {
|
|
24
|
+
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-aztec-l1-contracts');
|
|
54
25
|
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
55
26
|
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
let account;
|
|
28
|
+
if (privateKey) {
|
|
29
|
+
account = privateKeyToAccount(addLeadingHex(privateKey));
|
|
30
|
+
} else {
|
|
31
|
+
account = mnemonicToAccount(mnemonic, {
|
|
32
|
+
addressIndex: mnemonicIndex
|
|
33
|
+
});
|
|
34
|
+
const privateKeyBuf = account.getHdKey().privateKey;
|
|
35
|
+
const privateKeyHex = Buffer.from(privateKeyBuf).toString('hex');
|
|
36
|
+
privateKey = `0x${privateKeyHex}`;
|
|
37
|
+
}
|
|
61
38
|
if (!initialValidators || initialValidators.length === 0) {
|
|
62
39
|
// initialize the new rollup with Amin's validator address.
|
|
63
40
|
const aminAddressString = '0x3b218d0F26d15B36C715cB06c949210a0d630637';
|
|
@@ -74,8 +51,7 @@ export async function deployNewRollupContracts(registryAddress, rpcUrls, chainId
|
|
|
74
51
|
initialValidators
|
|
75
52
|
});
|
|
76
53
|
}
|
|
77
|
-
const { rollup, slashFactoryAddress } = await deployRollupForUpgrade(
|
|
78
|
-
salt,
|
|
54
|
+
const { rollup, slashFactoryAddress } = await deployRollupForUpgrade(privateKey, rpcUrls[0], chainId, registryAddress, {
|
|
79
55
|
vkTreeRoot: getVKTreeRoot(),
|
|
80
56
|
protocolContractsHash,
|
|
81
57
|
genesisArchiveRoot,
|
|
@@ -83,10 +59,10 @@ export async function deployNewRollupContracts(registryAddress, rpcUrls, chainId
|
|
|
83
59
|
feeJuicePortalInitialBalance,
|
|
84
60
|
realVerifier,
|
|
85
61
|
...config
|
|
86
|
-
}
|
|
62
|
+
});
|
|
87
63
|
return {
|
|
88
64
|
rollup,
|
|
89
|
-
slashFactoryAddress
|
|
65
|
+
slashFactoryAddress: EthAddress.fromString(slashFactoryAddress)
|
|
90
66
|
};
|
|
91
67
|
}
|
|
92
68
|
/**
|
package/dest/utils/commands.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
-
import { LogId } from '@aztec/aztec.js/log';
|
|
5
|
-
import { TxHash } from '@aztec/aztec.js/tx';
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
7
4
|
import type { PXE } from '@aztec/pxe/server';
|
|
5
|
+
import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
|
|
6
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
7
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
8
|
+
import { LogId } from '@aztec/stdlib/logs/log-id';
|
|
9
|
+
import { TxHash } from '@aztec/stdlib/tx/tx-hash';
|
|
9
10
|
import { type Command, Option } from 'commander';
|
|
10
11
|
/**
|
|
11
12
|
* If we can successfully resolve 'host.docker.internal', then we are running in a container, and we should treat
|
|
@@ -148,4 +149,4 @@ export declare function parseFields(fields: string[]): Fr[];
|
|
|
148
149
|
* @returns A JSON string
|
|
149
150
|
*/
|
|
150
151
|
export declare function prettyPrintJSON(data: Record<string, any>): string;
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQXdDLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUl2Rjs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sWUFBWSx1QkFHSSxDQUFDO0FBRTlCLGVBQU8sTUFBTSxTQUFTLFFBQXVCLENBQUM7QUFDOUMsZUFBTyxNQUFRLGNBQWMsVUFBK0IsV0FBVyxzQkFBRSxRQUFRLHNCQUFFLE9BQU8sc0JBQUUsV0FBVyxvQkFBZ0IsQ0FBQztBQUV4SCx3QkFBZ0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUc3RDtBQUVELGVBQU8sTUFBTSxjQUFjLGdDQUlRLENBQUM7QUFFcEMsZUFBTyxNQUFNLFVBQVUsUUFBdUIsQ0FBQztBQUUvQyxlQUFPLE1BQU0sZUFBZSxRQVN4QixDQUFDO0FBRUwsZUFBTyxNQUFNLHFCQUFxQixxSEFRQyxDQUFDO0FBRXBDLGVBQU8sTUFBTSxPQUFPLHVDQUFxRSxDQUFDO0FBRTFGOzs7O0dBSUc7QUFDSCx3QkFBc0IsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFxQnhFO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQXNCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0seUJBZ0J6RDtBQUVEOzs7Ozs7O0dBT0c7QUFFSCx3QkFBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLENBaUJwRTtBQWNELHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUU5RDtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsdUJBQXVCLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBcUJ2RDtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsWUFBWSxDQU0vRDtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsVUFBVSxDQU1oRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLFNBQVMsQ0FLbkY7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxTQUFTLENBS25FO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLENBU3BGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLG9CQUFvQixDQUNsQyxLQUFLLEVBQUUsTUFBTSxFQUNiLEdBQUcsR0FBRSxNQUFnQyxFQUNyQyxHQUFHLEdBQUUsTUFBZ0MsR0FDcEMsTUFBTSxHQUFHLFNBQVMsQ0FlcEI7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBTWxEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FLdEU7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxVQUFVLEdBQUcsU0FBUyxDQVN4RTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsRUFBRSxDQU12RDtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FNcEQ7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBeUI1QztBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FFbEQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBY2pFIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/utils/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/utils/commands.ts"],"names":[],"mappings":"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"}
|
package/dest/utils/commands.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { TxHash } from '@aztec/aztec.js/tx';
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
|
|
4
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
5
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
6
|
+
import { LogId } from '@aztec/stdlib/logs/log-id';
|
|
7
|
+
import { TxHash } from '@aztec/stdlib/tx/tx-hash';
|
|
7
8
|
import { CommanderError, InvalidArgumentError, Option } from 'commander';
|
|
8
9
|
import { lookup } from 'dns/promises';
|
|
9
10
|
import { rename, writeFile } from 'fs/promises';
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/cli",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20251214",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./contracts": "./dest/cmds/contracts/index.js",
|
|
7
7
|
"./devnet": "./dest/cmds/devnet/index.js",
|
|
8
8
|
"./infrastructure": "./dest/cmds/infrastructure/index.js",
|
|
9
9
|
"./l1": "./dest/cmds/l1/index.js",
|
|
10
|
+
"./l1/validators": "./dest/cmds/l1/update_l1_validators.js",
|
|
10
11
|
"./aztec_node": "./dest/cmds/aztec_node/index.js",
|
|
11
12
|
"./cli-utils": "./dest/utils/index.js",
|
|
12
13
|
"./misc": "./dest/cmds/misc/index.js",
|
|
@@ -14,7 +15,9 @@
|
|
|
14
15
|
"./setup-contracts": "./dest/cmds/misc/setup_contracts.js",
|
|
15
16
|
"./utils": "./dest/utils/index.js",
|
|
16
17
|
"./inspect": "./dest/utils/inspect.js",
|
|
17
|
-
"./config": "./dest/config/index.js"
|
|
18
|
+
"./config": "./dest/config/index.js",
|
|
19
|
+
"./config/chain": "./dest/config/chain_l2_config.js",
|
|
20
|
+
"./config/network": "./dest/config/network_config.js"
|
|
18
21
|
},
|
|
19
22
|
"typedocOptions": {
|
|
20
23
|
"entryPoints": [
|
|
@@ -71,21 +74,21 @@
|
|
|
71
74
|
]
|
|
72
75
|
},
|
|
73
76
|
"dependencies": {
|
|
74
|
-
"@aztec/accounts": "3.0.0-nightly.
|
|
75
|
-
"@aztec/archiver": "3.0.0-nightly.
|
|
76
|
-
"@aztec/aztec.js": "3.0.0-nightly.
|
|
77
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
78
|
-
"@aztec/entrypoints": "3.0.0-nightly.
|
|
79
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
80
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
81
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
82
|
-
"@aztec/node-keystore": "3.0.0-nightly.
|
|
83
|
-
"@aztec/node-lib": "3.0.0-nightly.
|
|
84
|
-
"@aztec/p2p": "3.0.0-nightly.
|
|
85
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
86
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
87
|
-
"@aztec/test-wallet": "3.0.0-nightly.
|
|
88
|
-
"@aztec/world-state": "3.0.0-nightly.
|
|
77
|
+
"@aztec/accounts": "3.0.0-nightly.20251214",
|
|
78
|
+
"@aztec/archiver": "3.0.0-nightly.20251214",
|
|
79
|
+
"@aztec/aztec.js": "3.0.0-nightly.20251214",
|
|
80
|
+
"@aztec/constants": "3.0.0-nightly.20251214",
|
|
81
|
+
"@aztec/entrypoints": "3.0.0-nightly.20251214",
|
|
82
|
+
"@aztec/ethereum": "3.0.0-nightly.20251214",
|
|
83
|
+
"@aztec/foundation": "3.0.0-nightly.20251214",
|
|
84
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251214",
|
|
85
|
+
"@aztec/node-keystore": "3.0.0-nightly.20251214",
|
|
86
|
+
"@aztec/node-lib": "3.0.0-nightly.20251214",
|
|
87
|
+
"@aztec/p2p": "3.0.0-nightly.20251214",
|
|
88
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251214",
|
|
89
|
+
"@aztec/stdlib": "3.0.0-nightly.20251214",
|
|
90
|
+
"@aztec/test-wallet": "3.0.0-nightly.20251214",
|
|
91
|
+
"@aztec/world-state": "3.0.0-nightly.20251214",
|
|
89
92
|
"@ethersproject/wallet": "^5.8.0",
|
|
90
93
|
"@iarna/toml": "^2.2.5",
|
|
91
94
|
"@libp2p/peer-id-factory": "^3.0.4",
|
|
@@ -99,9 +102,9 @@
|
|
|
99
102
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
100
103
|
},
|
|
101
104
|
"devDependencies": {
|
|
102
|
-
"@aztec/aztec-node": "3.0.0-nightly.
|
|
103
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
104
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
105
|
+
"@aztec/aztec-node": "3.0.0-nightly.20251214",
|
|
106
|
+
"@aztec/kv-store": "3.0.0-nightly.20251214",
|
|
107
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251214",
|
|
105
108
|
"@jest/globals": "^30.0.0",
|
|
106
109
|
"@types/jest": "^30.0.0",
|
|
107
110
|
"@types/lodash.chunk": "^4.2.9",
|
|
@@ -118,15 +121,15 @@
|
|
|
118
121
|
"typescript": "^5.3.3"
|
|
119
122
|
},
|
|
120
123
|
"peerDependencies": {
|
|
121
|
-
"@aztec/accounts": "3.0.0-nightly.
|
|
122
|
-
"@aztec/bb-prover": "3.0.0-nightly.
|
|
123
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
124
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
125
|
-
"@aztec/noir-contracts.js": "3.0.0-nightly.
|
|
126
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
127
|
-
"@aztec/noir-test-contracts.js": "3.0.0-nightly.
|
|
128
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
129
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
124
|
+
"@aztec/accounts": "3.0.0-nightly.20251214",
|
|
125
|
+
"@aztec/bb-prover": "3.0.0-nightly.20251214",
|
|
126
|
+
"@aztec/ethereum": "3.0.0-nightly.20251214",
|
|
127
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251214",
|
|
128
|
+
"@aztec/noir-contracts.js": "3.0.0-nightly.20251214",
|
|
129
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251214",
|
|
130
|
+
"@aztec/noir-test-contracts.js": "3.0.0-nightly.20251214",
|
|
131
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251214",
|
|
132
|
+
"@aztec/stdlib": "3.0.0-nightly.20251214"
|
|
130
133
|
},
|
|
131
134
|
"files": [
|
|
132
135
|
"dest",
|
|
@@ -2,25 +2,26 @@ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
|
2
2
|
import type { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
4
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
5
|
+
import { type Operator, deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
5
6
|
import { SecretValue } from '@aztec/foundation/config';
|
|
6
7
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
8
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
7
9
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
8
10
|
|
|
9
|
-
import {
|
|
11
|
+
import { mnemonicToAccount } from 'viem/accounts';
|
|
12
|
+
|
|
13
|
+
import { addLeadingHex } from '../../utils/aztec.js';
|
|
10
14
|
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
11
15
|
|
|
12
|
-
export async function
|
|
16
|
+
export async function deployL1ContractsCmd(
|
|
13
17
|
rpcUrls: string[],
|
|
14
18
|
chainId: number,
|
|
15
19
|
privateKey: string | undefined,
|
|
16
20
|
mnemonic: string,
|
|
17
21
|
mnemonicIndex: number,
|
|
18
|
-
salt: number | undefined,
|
|
19
22
|
testAccounts: boolean,
|
|
20
23
|
sponsoredFPC: boolean,
|
|
21
|
-
acceleratedTestDeployments: boolean,
|
|
22
24
|
json: boolean,
|
|
23
|
-
createVerificationJson: string | false,
|
|
24
25
|
initialValidators: EthAddress[],
|
|
25
26
|
realVerifier: boolean,
|
|
26
27
|
existingToken: EthAddress | undefined,
|
|
@@ -29,34 +30,50 @@ export async function deployL1Contracts(
|
|
|
29
30
|
) {
|
|
30
31
|
const config = getL1ContractsConfigEnvVars();
|
|
31
32
|
|
|
33
|
+
// Compute initial accounts for genesis (test accounts + sponsored FPC)
|
|
32
34
|
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
33
35
|
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
34
36
|
const initialFundedAccounts = initialAccounts.map(a => a.address).concat(sponsoredFPCAddress);
|
|
35
37
|
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
// Get the VK tree root
|
|
40
|
+
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
41
|
+
const vkTreeRoot = getVKTreeRoot();
|
|
42
|
+
|
|
43
|
+
// Get private key (from direct input or mnemonic)
|
|
44
|
+
let deployerPrivateKey: `0x${string}`;
|
|
45
|
+
if (privateKey) {
|
|
46
|
+
deployerPrivateKey = addLeadingHex(privateKey);
|
|
47
|
+
} else {
|
|
48
|
+
const account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
|
|
49
|
+
deployerPrivateKey = `0x${Buffer.from(account.getHdKey().privateKey!).toString('hex')}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Prepare validator operators with bn254 keys
|
|
53
|
+
const initialValidatorOperators: Operator[] = initialValidators.map(a => ({
|
|
38
54
|
attester: a,
|
|
39
55
|
withdrawer: a,
|
|
40
56
|
bn254SecretKey: new SecretValue(Fr.random().toBigInt()),
|
|
41
57
|
}));
|
|
42
58
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
debugLogger.info('Deploying L1 contracts via Forge...');
|
|
60
|
+
|
|
61
|
+
// Deploy using l1-contracts Forge scripts
|
|
62
|
+
const { l1ContractAddresses, rollupVersion } = await deployAztecL1Contracts(rpcUrls[0], deployerPrivateKey, chainId, {
|
|
63
|
+
// Initial validators to add during deployment
|
|
64
|
+
initialValidators: initialValidatorOperators,
|
|
65
|
+
// Genesis config
|
|
66
|
+
vkTreeRoot,
|
|
67
|
+
protocolContractsHash,
|
|
51
68
|
genesisArchiveRoot,
|
|
52
|
-
|
|
53
|
-
acceleratedTestDeployments,
|
|
54
|
-
config,
|
|
55
|
-
existingToken,
|
|
69
|
+
// Deployment options
|
|
56
70
|
realVerifier,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
...config,
|
|
72
|
+
feeJuicePortalInitialBalance: fundingNeeded,
|
|
73
|
+
existingTokenAddress: existingToken,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
debugLogger.info('Forge deployment complete', { rollupVersion });
|
|
60
77
|
|
|
61
78
|
if (json) {
|
|
62
79
|
log(
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
2
2
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
3
|
-
import type { Operator } from '@aztec/ethereum/deploy-l1-contracts';
|
|
3
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
4
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
-
import type { LogFn
|
|
5
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
6
6
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
7
7
|
|
|
8
8
|
import { deployNewRollupContracts } from '../../utils/aztec.js';
|
|
@@ -15,15 +15,12 @@ export async function deployNewRollup(
|
|
|
15
15
|
privateKey: string | undefined,
|
|
16
16
|
mnemonic: string,
|
|
17
17
|
mnemonicIndex: number,
|
|
18
|
-
salt: number | undefined,
|
|
19
18
|
testAccounts: boolean,
|
|
20
19
|
sponsoredFPC: boolean,
|
|
21
20
|
json: boolean,
|
|
22
21
|
initialValidators: Operator[],
|
|
23
22
|
realVerifier: boolean,
|
|
24
|
-
createVerificationJson: string | false,
|
|
25
23
|
log: LogFn,
|
|
26
|
-
debugLogger: Logger,
|
|
27
24
|
) {
|
|
28
25
|
const config = getL1ContractsConfigEnvVars();
|
|
29
26
|
|
|
@@ -35,18 +32,15 @@ export async function deployNewRollup(
|
|
|
35
32
|
const { rollup, slashFactoryAddress } = await deployNewRollupContracts(
|
|
36
33
|
registryAddress,
|
|
37
34
|
rpcUrls,
|
|
38
|
-
chainId,
|
|
39
35
|
privateKey,
|
|
36
|
+
chainId,
|
|
40
37
|
mnemonic,
|
|
41
38
|
mnemonicIndex,
|
|
42
|
-
salt,
|
|
43
39
|
initialValidators,
|
|
44
40
|
genesisArchiveRoot,
|
|
45
41
|
fundingNeeded,
|
|
46
42
|
config,
|
|
47
43
|
realVerifier,
|
|
48
|
-
createVerificationJson,
|
|
49
|
-
debugLogger,
|
|
50
44
|
);
|
|
51
45
|
|
|
52
46
|
if (json) {
|
package/src/cmds/l1/index.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
|
3
3
|
|
|
4
4
|
import { type Command, Option } from 'commander';
|
|
5
5
|
|
|
6
|
-
import { getL1RollupAddressFromEnv } from '../../config/get_l1_config.js';
|
|
7
6
|
import {
|
|
8
7
|
ETHEREUM_HOSTS,
|
|
9
8
|
MNEMONIC,
|
|
@@ -15,8 +14,6 @@ import {
|
|
|
15
14
|
parseEthereumAddress,
|
|
16
15
|
} from '../../utils/commands.js';
|
|
17
16
|
|
|
18
|
-
export { addL1Validator } from './update_l1_validators.js';
|
|
19
|
-
|
|
20
17
|
const l1RpcUrlsOption = new Option(
|
|
21
18
|
'--l1-rpc-urls <string>',
|
|
22
19
|
'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)',
|
|
@@ -42,31 +39,25 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
42
39
|
)
|
|
43
40
|
.option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
|
|
44
41
|
.addOption(l1ChainIdOption)
|
|
45
|
-
.option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
|
|
46
42
|
.option('--json', 'Output the contract addresses in JSON format')
|
|
47
43
|
.option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
|
|
48
44
|
.option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
|
|
49
|
-
.option('--accelerated-test-deployments', 'Fire and forget deployment transactions, use in testing only', false)
|
|
50
45
|
.option('--real-verifier', 'Deploy the real verifier', false)
|
|
51
46
|
.option('--existing-token <address>', 'Use an existing ERC20 for both fee and staking', parseEthereumAddress)
|
|
52
|
-
.option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
|
|
53
47
|
.action(async options => {
|
|
54
|
-
const {
|
|
48
|
+
const { deployL1ContractsCmd } = await import('./deploy_l1_contracts_cmd.js');
|
|
55
49
|
|
|
56
50
|
const initialValidators =
|
|
57
51
|
options.validators?.split(',').map((validator: string) => EthAddress.fromString(validator)) || [];
|
|
58
|
-
await
|
|
52
|
+
await deployL1ContractsCmd(
|
|
59
53
|
options.l1RpcUrls,
|
|
60
54
|
options.l1ChainId,
|
|
61
55
|
options.privateKey,
|
|
62
56
|
options.mnemonic,
|
|
63
57
|
options.mnemonicIndex,
|
|
64
|
-
options.salt,
|
|
65
58
|
options.testAccounts,
|
|
66
59
|
options.sponsoredFpc,
|
|
67
|
-
options.acceleratedTestDeployments,
|
|
68
60
|
options.json,
|
|
69
|
-
options.createVerificationJson,
|
|
70
61
|
initialValidators,
|
|
71
62
|
options.realVerifier,
|
|
72
63
|
options.existingToken,
|
|
@@ -89,12 +80,10 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
89
80
|
)
|
|
90
81
|
.option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
|
|
91
82
|
.addOption(l1ChainIdOption)
|
|
92
|
-
.option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
|
|
93
83
|
.option('--json', 'Output the contract addresses in JSON format')
|
|
94
84
|
.option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
|
|
95
85
|
.option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
|
|
96
86
|
.option('--real-verifier', 'Deploy the real verifier', false)
|
|
97
|
-
.option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
|
|
98
87
|
.action(async options => {
|
|
99
88
|
const { deployNewRollup } = await import('./deploy_new_rollup.js');
|
|
100
89
|
|
|
@@ -107,15 +96,12 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
107
96
|
options.privateKey,
|
|
108
97
|
options.mnemonic,
|
|
109
98
|
options.mnemonicIndex,
|
|
110
|
-
options.salt,
|
|
111
99
|
options.testAccounts,
|
|
112
100
|
options.sponsoredFpc,
|
|
113
101
|
options.json,
|
|
114
102
|
initialValidators,
|
|
115
103
|
options.realVerifier,
|
|
116
|
-
options.createVerificationJson,
|
|
117
104
|
log,
|
|
118
|
-
debugLogger,
|
|
119
105
|
);
|
|
120
106
|
});
|
|
121
107
|
|
|
@@ -313,7 +299,11 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
313
299
|
.action(async options => {
|
|
314
300
|
const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
|
|
315
301
|
|
|
316
|
-
|
|
302
|
+
let rollupAddress = options.rollup;
|
|
303
|
+
if (!rollupAddress) {
|
|
304
|
+
const { getL1RollupAddressFromEnv } = await import('../../config/get_l1_config.js');
|
|
305
|
+
rollupAddress = await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
|
|
306
|
+
}
|
|
317
307
|
|
|
318
308
|
await addL1ValidatorViaRollup({
|
|
319
309
|
rpcUrls: options.l1RpcUrls,
|
package/src/cmds/misc/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
-
import { printENR } from '@aztec/p2p/enr';
|
|
3
2
|
|
|
4
3
|
import type { Command } from 'commander';
|
|
5
4
|
|
|
@@ -49,6 +48,7 @@ export function injectCommands(program: Command, log: LogFn) {
|
|
|
49
48
|
.description('Decodes and ENR record')
|
|
50
49
|
.argument('<enr>', 'The encoded ENR string')
|
|
51
50
|
.action(async (enr: string) => {
|
|
51
|
+
const { printENR } = await import('@aztec/p2p/enr');
|
|
52
52
|
await printENR(enr, log);
|
|
53
53
|
});
|
|
54
54
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import {
|
|
2
|
+
import { ethPrivateKeySchema } from '@aztec/node-keystore/schemas';
|
|
3
|
+
import type { EthPrivateKey } from '@aztec/node-keystore/types';
|
|
3
4
|
|
|
4
5
|
export const defaultBlsPath = 'm/12381/3600/0/0/0';
|
|
5
6
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { DefaultL1ContractsConfig, type L1ContractsConfig } from '@aztec/ethereum/config';
|
|
2
|
-
import type { L1TxUtilsConfig } from '@aztec/ethereum/l1-tx-utils';
|
|
2
|
+
import type { L1TxUtilsConfig } from '@aztec/ethereum/l1-tx-utils/config';
|
|
3
3
|
import type { NetworkNames } from '@aztec/foundation/config';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import type { SharedNodeConfig } from '@aztec/node-lib/config';
|
|
6
|
-
import type { P2PConfig } from '@aztec/p2p';
|
|
6
|
+
import type { P2PConfig } from '@aztec/p2p/config';
|
|
7
7
|
import type { SequencerConfig, SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
8
8
|
|
|
9
9
|
import path from 'path';
|
package/src/utils/aztec.ts
CHANGED
|
@@ -8,18 +8,21 @@ import {
|
|
|
8
8
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
9
9
|
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
10
10
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
11
|
-
import type {
|
|
11
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
12
12
|
import { SecretValue } from '@aztec/foundation/config';
|
|
13
13
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
14
|
-
import type
|
|
14
|
+
import { type LogFn, createLogger } from '@aztec/foundation/log';
|
|
15
15
|
import type { NoirPackageConfig } from '@aztec/foundation/noir';
|
|
16
16
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
17
17
|
|
|
18
18
|
import TOML from '@iarna/toml';
|
|
19
19
|
import { readFile } from 'fs/promises';
|
|
20
|
+
import type { HDAccount, Hex, PrivateKeyAccount } from 'viem';
|
|
20
21
|
|
|
21
22
|
import { encodeArgs } from './encoding.js';
|
|
22
23
|
|
|
24
|
+
const logger = createLogger('cli:utils:aztec');
|
|
25
|
+
|
|
23
26
|
/**
|
|
24
27
|
* Helper to get an ABI function or throw error if it doesn't exist.
|
|
25
28
|
* @param artifact - Contract's build artifact in JSON format.
|
|
@@ -34,92 +37,32 @@ export function getFunctionAbi(artifact: ContractArtifact, fnName: string): Func
|
|
|
34
37
|
return fn;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
/**
|
|
38
|
-
* Function to execute the 'deployRollupContracts' command.
|
|
39
|
-
* @param rpcUrls - The RPC URL of the ethereum node.
|
|
40
|
-
* @param chainId - The chain ID of the L1 host.
|
|
41
|
-
* @param privateKey - The private key to be used in contract deployment.
|
|
42
|
-
* @param mnemonic - The mnemonic to be used in contract deployment.
|
|
43
|
-
*/
|
|
44
|
-
export async function deployAztecContracts(
|
|
45
|
-
rpcUrls: string[],
|
|
46
|
-
chainId: number,
|
|
47
|
-
privateKey: string | undefined,
|
|
48
|
-
mnemonic: string,
|
|
49
|
-
mnemonicIndex: number,
|
|
50
|
-
salt: number | undefined,
|
|
51
|
-
initialValidators: Operator[],
|
|
52
|
-
genesisArchiveRoot: Fr,
|
|
53
|
-
feeJuicePortalInitialBalance: bigint,
|
|
54
|
-
acceleratedTestDeployments: boolean,
|
|
55
|
-
config: L1ContractsConfig,
|
|
56
|
-
existingToken: EthAddress | undefined,
|
|
57
|
-
realVerifier: boolean,
|
|
58
|
-
createVerificationJson: string | false,
|
|
59
|
-
debugLogger: Logger,
|
|
60
|
-
): Promise<DeployL1ContractsReturnType> {
|
|
61
|
-
const { createEthereumChain } = await import('@aztec/ethereum/chain');
|
|
62
|
-
const { deployL1Contracts } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
63
|
-
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
64
|
-
|
|
65
|
-
const account = !privateKey
|
|
66
|
-
? mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex })
|
|
67
|
-
: privateKeyToAccount(addLeadingHex(privateKey));
|
|
68
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
69
|
-
|
|
70
|
-
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
71
|
-
|
|
72
|
-
const result = await deployL1Contracts(
|
|
73
|
-
chain.rpcUrls,
|
|
74
|
-
account,
|
|
75
|
-
chain.chainInfo,
|
|
76
|
-
debugLogger,
|
|
77
|
-
{
|
|
78
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
79
|
-
protocolContractsHash,
|
|
80
|
-
genesisArchiveRoot,
|
|
81
|
-
salt,
|
|
82
|
-
initialValidators,
|
|
83
|
-
acceleratedTestDeployments,
|
|
84
|
-
feeJuicePortalInitialBalance,
|
|
85
|
-
realVerifier,
|
|
86
|
-
existingTokenAddress: existingToken,
|
|
87
|
-
...config,
|
|
88
|
-
},
|
|
89
|
-
config,
|
|
90
|
-
createVerificationJson,
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
return result;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
40
|
export async function deployNewRollupContracts(
|
|
97
41
|
registryAddress: EthAddress,
|
|
98
42
|
rpcUrls: string[],
|
|
99
|
-
chainId: number,
|
|
100
43
|
privateKey: string | undefined,
|
|
44
|
+
chainId: number,
|
|
101
45
|
mnemonic: string,
|
|
102
46
|
mnemonicIndex: number,
|
|
103
|
-
salt: number | undefined,
|
|
104
47
|
initialValidators: Operator[],
|
|
105
48
|
genesisArchiveRoot: Fr,
|
|
106
49
|
feeJuicePortalInitialBalance: bigint,
|
|
107
50
|
config: L1ContractsConfig,
|
|
108
51
|
realVerifier: boolean,
|
|
109
|
-
createVerificationJson: string | false,
|
|
110
|
-
logger: Logger,
|
|
111
52
|
): Promise<{ rollup: RollupContract; slashFactoryAddress: EthAddress }> {
|
|
112
|
-
const {
|
|
113
|
-
const { createExtendedL1Client } = await import('@aztec/ethereum/client');
|
|
114
|
-
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
53
|
+
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-aztec-l1-contracts');
|
|
115
54
|
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
116
55
|
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
117
56
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
57
|
+
let account: HDAccount | PrivateKeyAccount;
|
|
58
|
+
if (privateKey) {
|
|
59
|
+
account = privateKeyToAccount(addLeadingHex(privateKey));
|
|
60
|
+
} else {
|
|
61
|
+
account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
|
|
62
|
+
const privateKeyBuf = account.getHdKey().privateKey;
|
|
63
|
+
const privateKeyHex = Buffer.from(privateKeyBuf!).toString('hex');
|
|
64
|
+
privateKey = `0x${privateKeyHex}`;
|
|
65
|
+
}
|
|
123
66
|
|
|
124
67
|
if (!initialValidators || initialValidators.length === 0) {
|
|
125
68
|
// initialize the new rollup with Amin's validator address.
|
|
@@ -138,9 +81,11 @@ export async function deployNewRollupContracts(
|
|
|
138
81
|
}
|
|
139
82
|
|
|
140
83
|
const { rollup, slashFactoryAddress } = await deployRollupForUpgrade(
|
|
141
|
-
|
|
84
|
+
privateKey as Hex,
|
|
85
|
+
rpcUrls[0],
|
|
86
|
+
chainId,
|
|
87
|
+
registryAddress,
|
|
142
88
|
{
|
|
143
|
-
salt,
|
|
144
89
|
vkTreeRoot: getVKTreeRoot(),
|
|
145
90
|
protocolContractsHash,
|
|
146
91
|
genesisArchiveRoot,
|
|
@@ -149,13 +94,9 @@ export async function deployNewRollupContracts(
|
|
|
149
94
|
realVerifier,
|
|
150
95
|
...config,
|
|
151
96
|
},
|
|
152
|
-
registryAddress,
|
|
153
|
-
logger,
|
|
154
|
-
config,
|
|
155
|
-
createVerificationJson,
|
|
156
97
|
);
|
|
157
98
|
|
|
158
|
-
return { rollup, slashFactoryAddress };
|
|
99
|
+
return { rollup, slashFactoryAddress: EthAddress.fromString(slashFactoryAddress!) };
|
|
159
100
|
}
|
|
160
101
|
|
|
161
102
|
/**
|
package/src/utils/commands.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
-
import { LogId } from '@aztec/aztec.js/log';
|
|
5
|
-
import { TxHash } from '@aztec/aztec.js/tx';
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
7
4
|
import type { PXE } from '@aztec/pxe/server';
|
|
5
|
+
import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
|
|
6
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
7
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
8
|
+
import { LogId } from '@aztec/stdlib/logs/log-id';
|
|
9
|
+
import { TxHash } from '@aztec/stdlib/tx/tx-hash';
|
|
9
10
|
|
|
10
11
|
import { type Command, CommanderError, InvalidArgumentError, Option } from 'commander';
|
|
11
12
|
import { lookup } from 'dns/promises';
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
|
-
export declare function deployL1Contracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, acceleratedTestDeployments: boolean, json: boolean, createVerificationJson: string | false, initialValidators: EthAddress[], realVerifier: boolean, existingToken: EthAddress | undefined, log: LogFn, debugLogger: Logger): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0cy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvbDEvZGVwbG95X2wxX2NvbnRyYWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUk1RCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNM0Qsd0JBQXNCLGlCQUFpQixDQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQzlCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLElBQUksRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUN4QixZQUFZLEVBQUUsT0FBTyxFQUNyQixZQUFZLEVBQUUsT0FBTyxFQUNyQiwwQkFBMEIsRUFBRSxPQUFPLEVBQ25DLElBQUksRUFBRSxPQUFPLEVBQ2Isc0JBQXNCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFDdEMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQy9CLFlBQVksRUFBRSxPQUFPLEVBQ3JCLGFBQWEsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUNyQyxHQUFHLEVBQUUsS0FBSyxFQUNWLFdBQVcsRUFBRSxNQUFNLGlCQThEcEIifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,0BAA0B,EAAE,OAAO,EACnC,IAAI,EAAE,OAAO,EACb,sBAAsB,EAAE,MAAM,GAAG,KAAK,EACtC,iBAAiB,EAAE,UAAU,EAAE,EAC/B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA8DpB"}
|