@aztec-labs/cli 6.0.0-nightly.20260829
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 +23 -0
- package/dest/cmds/aztec_node/block_number.d.ts +3 -0
- package/dest/cmds/aztec_node/block_number.d.ts.map +1 -0
- package/dest/cmds/aztec_node/block_number.js +10 -0
- package/dest/cmds/aztec_node/get_block.d.ts +3 -0
- package/dest/cmds/aztec_node/get_block.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_block.js +10 -0
- package/dest/cmds/aztec_node/get_current_min_fee.d.ts +3 -0
- package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_current_min_fee.js +7 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +5 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.js +12 -0
- package/dest/cmds/aztec_node/get_logs.d.ts +33 -0
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_logs.js +61 -0
- package/dest/cmds/aztec_node/get_node_info.d.ts +3 -0
- package/dest/cmds/aztec_node/get_node_info.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_node_info.js +58 -0
- package/dest/cmds/aztec_node/index.d.ts +4 -0
- package/dest/cmds/aztec_node/index.d.ts.map +1 -0
- package/dest/cmds/aztec_node/index.js +38 -0
- package/dest/cmds/infrastructure/index.d.ts +4 -0
- package/dest/cmds/infrastructure/index.d.ts.map +1 -0
- package/dest/cmds/infrastructure/index.js +22 -0
- package/dest/cmds/infrastructure/sequencers.d.ts +12 -0
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -0
- package/dest/cmds/infrastructure/sequencers.js +113 -0
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +3 -0
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -0
- package/dest/cmds/infrastructure/setup_l2_contract.js +35 -0
- package/dest/cmds/l1/advance_epoch.d.ts +3 -0
- package/dest/cmds/l1/advance_epoch.d.ts.map +1 -0
- package/dest/cmds/l1/advance_epoch.js +12 -0
- package/dest/cmds/l1/assume_proven_through.d.ts +4 -0
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -0
- package/dest/cmds/l1/assume_proven_through.js +12 -0
- package/dest/cmds/l1/compute_genesis_values.d.ts +4 -0
- package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
- package/dest/cmds/l1/compute_genesis_values.js +17 -0
- package/dest/cmds/l1/create_l1_account.d.ts +3 -0
- package/dest/cmds/l1/create_l1_account.d.ts.map +1 -0
- package/dest/cmds/l1/create_l1_account.js +15 -0
- 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_cmd.js +80 -0
- package/dest/cmds/l1/deploy_new_rollup.d.ts +5 -0
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -0
- package/dest/cmds/l1/deploy_new_rollup.js +26 -0
- package/dest/cmds/l1/get_l1_addresses.d.ts +4 -0
- package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -0
- package/dest/cmds/l1/get_l1_addresses.js +21 -0
- package/dest/cmds/l1/get_l1_balance.d.ts +4 -0
- package/dest/cmds/l1/get_l1_balance.d.ts.map +1 -0
- package/dest/cmds/l1/get_l1_balance.js +35 -0
- package/dest/cmds/l1/governance_utils.d.ts +50 -0
- package/dest/cmds/l1/governance_utils.d.ts.map +1 -0
- package/dest/cmds/l1/governance_utils.js +87 -0
- package/dest/cmds/l1/index.d.ts +4 -0
- package/dest/cmds/l1/index.d.ts.map +1 -0
- package/dest/cmds/l1/index.js +201 -0
- package/dest/cmds/l1/prover_stats.d.ts +14 -0
- package/dest/cmds/l1/prover_stats.d.ts.map +1 -0
- package/dest/cmds/l1/prover_stats.js +147 -0
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts +6 -0
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
- package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
- package/dest/cmds/l1/update_l1_validators.d.ts +45 -0
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -0
- package/dest/cmds/l1/update_l1_validators.js +280 -0
- package/dest/cmds/misc/generate_bootnode_enr.d.ts +3 -0
- package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -0
- package/dest/cmds/misc/generate_bootnode_enr.js +5 -0
- package/dest/cmds/misc/generate_p2p_private_key.d.ts +3 -0
- package/dest/cmds/misc/generate_p2p_private_key.d.ts.map +1 -0
- package/dest/cmds/misc/generate_p2p_private_key.js +7 -0
- package/dest/cmds/misc/generate_secret_key.d.ts +5 -0
- package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -0
- package/dest/cmds/misc/generate_secret_key.js +6 -0
- package/dest/cmds/misc/index.d.ts +4 -0
- package/dest/cmds/misc/index.d.ts.map +1 -0
- package/dest/cmds/misc/index.js +32 -0
- package/dest/cmds/misc/update/common.d.ts +17 -0
- package/dest/cmds/misc/update/common.d.ts.map +1 -0
- package/dest/cmds/misc/update/common.js +3 -0
- package/dest/cmds/misc/update/github.d.ts +3 -0
- package/dest/cmds/misc/update/github.d.ts.map +1 -0
- package/dest/cmds/misc/update/github.js +2 -0
- package/dest/cmds/misc/update/noir.d.ts +10 -0
- package/dest/cmds/misc/update/noir.d.ts.map +1 -0
- package/dest/cmds/misc/update/noir.js +45 -0
- package/dest/cmds/misc/update/npm.d.ts +34 -0
- package/dest/cmds/misc/update/npm.d.ts.map +1 -0
- package/dest/cmds/misc/update/npm.js +123 -0
- package/dest/cmds/misc/update/utils.d.ts +14 -0
- package/dest/cmds/misc/update/utils.d.ts.map +1 -0
- package/dest/cmds/misc/update/utils.js +38 -0
- package/dest/cmds/misc/update.d.ts +3 -0
- package/dest/cmds/misc/update.d.ts.map +1 -0
- package/dest/cmds/misc/update.js +51 -0
- package/dest/cmds/validator_keys/add.d.ts +5 -0
- package/dest/cmds/validator_keys/add.d.ts.map +1 -0
- package/dest/cmds/validator_keys/add.js +83 -0
- package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts +2 -0
- package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts.map +1 -0
- package/dest/cmds/validator_keys/eth_json_v3_worker.js +27 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
- package/dest/cmds/validator_keys/index.d.ts +4 -0
- package/dest/cmds/validator_keys/index.d.ts.map +1 -0
- package/dest/cmds/validator_keys/index.js +33 -0
- package/dest/cmds/validator_keys/new.d.ts +35 -0
- package/dest/cmds/validator_keys/new.d.ts.map +1 -0
- package/dest/cmds/validator_keys/new.js +220 -0
- package/dest/cmds/validator_keys/set_funding_account.d.ts +14 -0
- package/dest/cmds/validator_keys/set_funding_account.d.ts.map +1 -0
- package/dest/cmds/validator_keys/set_funding_account.js +37 -0
- package/dest/cmds/validator_keys/shared.d.ts +81 -0
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
- package/dest/cmds/validator_keys/shared.js +352 -0
- package/dest/cmds/validator_keys/staker.d.ts +38 -0
- package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
- package/dest/cmds/validator_keys/staker.js +210 -0
- package/dest/cmds/validator_keys/utils.d.ts +35 -0
- package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
- package/dest/cmds/validator_keys/utils.js +86 -0
- package/dest/config/cached_fetch.d.ts +27 -0
- package/dest/config/cached_fetch.d.ts.map +1 -0
- package/dest/config/cached_fetch.js +132 -0
- package/dest/config/chain_l2_config.d.ts +19 -0
- package/dest/config/chain_l2_config.d.ts.map +1 -0
- package/dest/config/chain_l2_config.js +60 -0
- package/dest/config/enrich_env.d.ts +4 -0
- package/dest/config/enrich_env.d.ts.map +1 -0
- package/dest/config/enrich_env.js +12 -0
- package/dest/config/generated/networks.d.ts +236 -0
- package/dest/config/generated/networks.d.ts.map +1 -0
- package/dest/config/generated/networks.js +237 -0
- package/dest/config/get_l1_config.d.ts +9 -0
- package/dest/config/get_l1_config.d.ts.map +1 -0
- package/dest/config/get_l1_config.js +24 -0
- package/dest/config/index.d.ts +5 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +4 -0
- package/dest/config/network_config.d.ts +22 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +119 -0
- package/dest/utils/aztec.d.ts +56 -0
- package/dest/utils/aztec.d.ts.map +1 -0
- package/dest/utils/aztec.js +161 -0
- package/dest/utils/commands.d.ts +161 -0
- package/dest/utils/commands.d.ts.map +1 -0
- package/dest/utils/commands.js +341 -0
- package/dest/utils/encoding.d.ts +15 -0
- package/dest/utils/encoding.d.ts.map +1 -0
- package/dest/utils/encoding.js +103 -0
- package/dest/utils/github.d.ts +3 -0
- package/dest/utils/github.d.ts.map +1 -0
- package/dest/utils/github.js +2 -0
- package/dest/utils/index.d.ts +6 -0
- package/dest/utils/index.d.ts.map +1 -0
- package/dest/utils/index.js +5 -0
- package/dest/utils/inspect.d.ts +11 -0
- package/dest/utils/inspect.d.ts.map +1 -0
- package/dest/utils/inspect.js +90 -0
- package/dest/utils/setup_contracts.d.ts +3 -0
- package/dest/utils/setup_contracts.d.ts.map +1 -0
- package/dest/utils/setup_contracts.js +16 -0
- package/package.json +141 -0
- package/public_include_metric_prefixes.json +1 -0
- package/src/cmds/aztec_node/block_number.ts +9 -0
- package/src/cmds/aztec_node/get_block.ts +11 -0
- package/src/cmds/aztec_node/get_current_min_fee.ts +9 -0
- package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
- package/src/cmds/aztec_node/get_logs.ts +100 -0
- package/src/cmds/aztec_node/get_node_info.ts +61 -0
- package/src/cmds/aztec_node/index.ts +91 -0
- package/src/cmds/infrastructure/index.ts +51 -0
- package/src/cmds/infrastructure/sequencers.ts +122 -0
- package/src/cmds/infrastructure/setup_l2_contract.ts +40 -0
- package/src/cmds/l1/advance_epoch.ts +14 -0
- package/src/cmds/l1/assume_proven_through.ts +20 -0
- package/src/cmds/l1/compute_genesis_values.ts +29 -0
- package/src/cmds/l1/create_l1_account.ts +16 -0
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +105 -0
- package/src/cmds/l1/deploy_new_rollup.ts +65 -0
- package/src/cmds/l1/get_l1_addresses.ts +31 -0
- package/src/cmds/l1/get_l1_balance.ts +44 -0
- package/src/cmds/l1/governance_utils.ts +183 -0
- package/src/cmds/l1/index.ts +499 -0
- package/src/cmds/l1/prover_stats.ts +213 -0
- package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
- package/src/cmds/l1/update_l1_validators.ts +358 -0
- package/src/cmds/misc/generate_bootnode_enr.ts +13 -0
- package/src/cmds/misc/generate_p2p_private_key.ts +9 -0
- package/src/cmds/misc/generate_secret_key.ts +5 -0
- package/src/cmds/misc/index.ts +67 -0
- package/src/cmds/misc/update/common.ts +16 -0
- package/src/cmds/misc/update/github.ts +2 -0
- package/src/cmds/misc/update/noir.ts +56 -0
- package/src/cmds/misc/update/npm.ts +148 -0
- package/src/cmds/misc/update/utils.ts +49 -0
- package/src/cmds/misc/update.ts +71 -0
- package/src/cmds/validator_keys/add.ts +122 -0
- package/src/cmds/validator_keys/eth_json_v3_worker.ts +30 -0
- package/src/cmds/validator_keys/generate_bls_keypair.ts +33 -0
- package/src/cmds/validator_keys/index.ts +181 -0
- package/src/cmds/validator_keys/new.ts +326 -0
- package/src/cmds/validator_keys/set_funding_account.ts +54 -0
- package/src/cmds/validator_keys/shared.ts +414 -0
- package/src/cmds/validator_keys/staker.ts +300 -0
- package/src/cmds/validator_keys/utils.ts +124 -0
- package/src/config/cached_fetch.ts +154 -0
- package/src/config/chain_l2_config.ts +71 -0
- package/src/config/enrich_env.ts +15 -0
- package/src/config/generated/networks.ts +241 -0
- package/src/config/get_l1_config.ts +31 -0
- package/src/config/index.ts +4 -0
- package/src/config/network_config.ts +150 -0
- package/src/utils/aztec.ts +203 -0
- package/src/utils/commands.ts +434 -0
- package/src/utils/encoding.ts +117 -0
- package/src/utils/github.ts +2 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/inspect.ts +111 -0
- package/src/utils/setup_contracts.ts +19 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
2
|
+
export declare function createL1Account(json: boolean, log: LogFn): void;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2wxX2FjY291bnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2NyZWF0ZV9sMV9hY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS3hELHdCQUFnQixlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxRQVV4RCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_l1_account.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/create_l1_account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,QAUxD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
|
|
2
|
+
import { prettyPrintJSON } from '../../utils/commands.js';
|
|
3
|
+
export function createL1Account(json, log) {
|
|
4
|
+
const privateKey = generatePrivateKey();
|
|
5
|
+
const account = privateKeyToAccount(privateKey);
|
|
6
|
+
if (json) {
|
|
7
|
+
log(prettyPrintJSON({
|
|
8
|
+
privateKey,
|
|
9
|
+
address: account.address
|
|
10
|
+
}));
|
|
11
|
+
} else {
|
|
12
|
+
log(`Private Key: ${privateKey}`);
|
|
13
|
+
log(`Address: ${account.address}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EthAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
|
+
import type { LogFn, Logger } from '@aztec-labs/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0c19jbWQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2RlcGxveV9sMV9jb250cmFjdHNfY21kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBS2pFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVFoRSx3QkFBc0Isb0JBQW9CLENBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsSUFBSSxFQUFFLE9BQU8sRUFDYixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFDL0IsWUFBWSxFQUFFLE9BQU8sRUFDckIsYUFBYSxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQ3JDLEdBQUcsRUFBRSxLQUFLLEVBQ1YsV0FBVyxFQUFFLE1BQU0saUJBNkVwQiJ9
|
|
@@ -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,gCAAgC,CAAC;AAKjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAQhE,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,iBA6EpB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { getInitialTestAccountsData } from '@aztec-labs/accounts/testing';
|
|
2
|
+
import { Fr } from '@aztec-labs/aztec.js/fields';
|
|
3
|
+
import { getL1ContractsConfigEnvVars } from '@aztec-labs/ethereum/config';
|
|
4
|
+
import { deployAztecL1Contracts } from '@aztec-labs/ethereum/deploy-aztec-l1-contracts';
|
|
5
|
+
import { SecretValue } from '@aztec-labs/foundation/config';
|
|
6
|
+
import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
|
|
7
|
+
import { getGenesisValues } from '@aztec-labs/world-state/testing';
|
|
8
|
+
import { mnemonicToAccount } from 'viem/accounts';
|
|
9
|
+
import { addLeadingHex } from '../../utils/aztec.js';
|
|
10
|
+
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
11
|
+
export async function deployL1ContractsCmd(rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, testAccounts, sponsoredFPC, json, initialValidators, realVerifier, existingToken, log, debugLogger) {
|
|
12
|
+
const config = getL1ContractsConfigEnvVars();
|
|
13
|
+
// Compute initial accounts for genesis (test accounts + sponsored FPC)
|
|
14
|
+
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
15
|
+
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
16
|
+
const initialFundedAccounts = initialAccounts.map((a)=>a.address).concat(sponsoredFPCAddress);
|
|
17
|
+
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
18
|
+
// Get the VK tree root
|
|
19
|
+
const { getVKTreeRoot } = await import('@aztec-labs/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
|
|
32
|
+
const initialValidatorOperators = initialValidators.map((a)=>({
|
|
33
|
+
attester: a,
|
|
34
|
+
withdrawer: a,
|
|
35
|
+
bn254SecretKey: new SecretValue(Fr.random().toBigInt())
|
|
36
|
+
}));
|
|
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
|
+
});
|
|
55
|
+
if (json) {
|
|
56
|
+
log(JSON.stringify(Object.fromEntries(Object.entries(l1ContractAddresses).map(([k, v])=>[
|
|
57
|
+
k,
|
|
58
|
+
v?.toString() ?? 'Not deployed'
|
|
59
|
+
])), null, 2));
|
|
60
|
+
} else {
|
|
61
|
+
log(`Rollup Address: ${l1ContractAddresses.rollupAddress.toString()}`);
|
|
62
|
+
log(`Registry Address: ${l1ContractAddresses.registryAddress.toString()}`);
|
|
63
|
+
log(`GSE Address: ${l1ContractAddresses.gseAddress?.toString()}`);
|
|
64
|
+
log(`L1 -> L2 Inbox Address: ${l1ContractAddresses.inboxAddress.toString()}`);
|
|
65
|
+
log(`L2 -> L1 Outbox Address: ${l1ContractAddresses.outboxAddress.toString()}`);
|
|
66
|
+
log(`Fee Juice Address: ${l1ContractAddresses.feeJuiceAddress.toString()}`);
|
|
67
|
+
log(`Staking Asset Address: ${l1ContractAddresses.stakingAssetAddress.toString()}`);
|
|
68
|
+
log(`Fee Juice Portal Address: ${l1ContractAddresses.feeJuicePortalAddress.toString()}`);
|
|
69
|
+
log(`CoinIssuer Address: ${l1ContractAddresses.coinIssuerAddress.toString()}`);
|
|
70
|
+
log(`RewardDistributor Address: ${l1ContractAddresses.rewardDistributorAddress.toString()}`);
|
|
71
|
+
log(`GovernanceProposer Address: ${l1ContractAddresses.governanceProposerAddress.toString()}`);
|
|
72
|
+
log(`Governance Address: ${l1ContractAddresses.governanceAddress.toString()}`);
|
|
73
|
+
log(`FeeAssetHandler Address: ${l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
|
|
74
|
+
log(`StakingAssetHandler Address: ${l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
|
|
75
|
+
log(`ZK Passport Verifier Address: ${l1ContractAddresses.zkPassportVerifierAddress?.toString()}`);
|
|
76
|
+
log(`Initial funded accounts: ${initialFundedAccounts.map((a)=>a.toString()).join(', ')}`);
|
|
77
|
+
log(`Initial validators: ${initialValidators.map((a)=>a.toString()).join(', ')}`);
|
|
78
|
+
log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Operator } from '@aztec-labs/ethereum/deploy-aztec-l1-contracts';
|
|
2
|
+
import type { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
3
|
+
import type { LogFn } from '@aztec-labs/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X25ld19yb2xsdXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2RlcGxveV9uZXdfcm9sbHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQy9FLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTXhELHdCQUFzQixlQUFlLENBQ25DLGVBQWUsRUFBRSxVQUFVLEVBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsSUFBSSxFQUFFLE9BQU8sRUFDYixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsRUFDN0IsWUFBWSxFQUFFLE9BQU8sRUFDckIsR0FBRyxFQUFFLEtBQUssaUJBMENYIn0=
|
|
@@ -0,0 +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,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,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,iBA0CX"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getInitialTestAccountsData } from '@aztec-labs/accounts/testing';
|
|
2
|
+
import { getL1ContractsConfigEnvVars } from '@aztec-labs/ethereum/config';
|
|
3
|
+
import { getGenesisValues } from '@aztec-labs/world-state/testing';
|
|
4
|
+
import { deployNewRollupContracts } from '../../utils/aztec.js';
|
|
5
|
+
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
6
|
+
export async function deployNewRollup(registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, testAccounts, sponsoredFPC, json, initialValidators, realVerifier, log) {
|
|
7
|
+
const config = getL1ContractsConfigEnvVars();
|
|
8
|
+
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
9
|
+
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
10
|
+
const initialFundedAccounts = initialAccounts.map((a)=>a.address).concat(sponsoredFPCAddress);
|
|
11
|
+
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
12
|
+
const { rollup } = await deployNewRollupContracts(registryAddress, rpcUrls, privateKey, chainId, mnemonic, mnemonicIndex, initialValidators, genesisArchiveRoot, fundingNeeded, config, realVerifier);
|
|
13
|
+
if (json) {
|
|
14
|
+
log(JSON.stringify({
|
|
15
|
+
rollupAddress: rollup.address,
|
|
16
|
+
initialFundedAccounts: initialFundedAccounts.map((a)=>a.toString()),
|
|
17
|
+
initialValidators: initialValidators.map((a)=>a.attester.toString()),
|
|
18
|
+
genesisArchiveRoot: genesisArchiveRoot.toString()
|
|
19
|
+
}, null, 2));
|
|
20
|
+
} else {
|
|
21
|
+
log(`Rollup Address: ${rollup.address}`);
|
|
22
|
+
log(`Initial funded accounts: ${initialFundedAccounts.map((a)=>a.toString()).join(', ')}`);
|
|
23
|
+
log(`Initial validators: ${initialValidators.map((a)=>a.attester.toString()).join(', ')}`);
|
|
24
|
+
log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
|
+
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
3
|
+
export declare function getL1Addresses(registryAddress: EthAddress, rollupVersion: number | bigint | 'canonical', rpcUrls: string[], chainId: number, json: boolean, log: LogFn): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2wxX2FkZHJlc3Nlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvbDEvZ2V0X2wxX2FkZHJlc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJNUQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsd0JBQXNCLGNBQWMsQ0FDbEMsZUFBZSxFQUFFLFVBQVUsRUFDM0IsYUFBYSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsV0FBVyxFQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsSUFBSSxFQUFFLE9BQU8sRUFDYixHQUFHLEVBQUUsS0FBSyxpQkFpQlgifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_l1_addresses.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/get_l1_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAI5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGxD,wBAAsB,cAAc,CAClC,eAAe,EAAE,UAAU,EAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,EAC5C,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,iBAiBX"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createEthereumChain } from '@aztec-labs/ethereum/chain';
|
|
2
|
+
import { RegistryContract } from '@aztec-labs/ethereum/contracts';
|
|
3
|
+
import { createPublicClient, fallback, http } from 'viem';
|
|
4
|
+
export async function getL1Addresses(registryAddress, rollupVersion, rpcUrls, chainId, json, log) {
|
|
5
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
6
|
+
const publicClient = createPublicClient({
|
|
7
|
+
chain: chain.chainInfo,
|
|
8
|
+
transport: fallback(rpcUrls.map((url)=>http(url, {
|
|
9
|
+
batch: false
|
|
10
|
+
}))),
|
|
11
|
+
pollingInterval: 100
|
|
12
|
+
});
|
|
13
|
+
const addresses = await RegistryContract.collectAddresses(publicClient, registryAddress.toString(), rollupVersion);
|
|
14
|
+
if (json) {
|
|
15
|
+
log(JSON.stringify(addresses, null, 2));
|
|
16
|
+
} else {
|
|
17
|
+
for (const [key, value] of Object.entries(addresses)){
|
|
18
|
+
log(`${key}: ${value.toString()}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
2
|
+
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
3
|
+
export declare function getL1Balance(who: EthAddress, token: EthAddress | undefined, l1RpcUrls: string[], chainId: number, json: boolean, log: LogFn): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2wxX2JhbGFuY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2dldF9sMV9iYWxhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS3hELHdCQUFzQixZQUFZLENBQ2hDLEdBQUcsRUFBRSxVQUFVLEVBQ2YsS0FBSyxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQzdCLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFDbkIsT0FBTyxFQUFFLE1BQU0sRUFDZixJQUFJLEVBQUUsT0FBTyxFQUNiLEdBQUcsRUFBRSxLQUFLLGlCQTRCWCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_l1_balance.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/get_l1_balance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKxD,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,iBA4BX"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { TestERC20Abi } from '@aztec/l1-artifacts';
|
|
2
|
+
import { createEthereumChain } from '@aztec-labs/ethereum/chain';
|
|
3
|
+
import { createPublicClient, fallback, getContract, http } from 'viem';
|
|
4
|
+
import { prettyPrintJSON } from '../../utils/commands.js';
|
|
5
|
+
export async function getL1Balance(who, token, l1RpcUrls, chainId, json, log) {
|
|
6
|
+
const chain = createEthereumChain(l1RpcUrls, chainId);
|
|
7
|
+
const publicClient = createPublicClient({
|
|
8
|
+
chain: chain.chainInfo,
|
|
9
|
+
transport: fallback(l1RpcUrls.map((url)=>http(url, {
|
|
10
|
+
batch: false
|
|
11
|
+
})))
|
|
12
|
+
});
|
|
13
|
+
let balance = 0n;
|
|
14
|
+
if (token) {
|
|
15
|
+
const gasL1 = getContract({
|
|
16
|
+
address: token.toString(),
|
|
17
|
+
abi: TestERC20Abi,
|
|
18
|
+
client: publicClient
|
|
19
|
+
});
|
|
20
|
+
balance = await gasL1.read.balanceOf([
|
|
21
|
+
who.toString()
|
|
22
|
+
]);
|
|
23
|
+
} else {
|
|
24
|
+
balance = await publicClient.getBalance({
|
|
25
|
+
address: who.toString()
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (json) {
|
|
29
|
+
log(prettyPrintJSON({
|
|
30
|
+
balance
|
|
31
|
+
}));
|
|
32
|
+
} else {
|
|
33
|
+
log(`L1 balance of ${who.toString()} is ${balance.toString()}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { LogFn, Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
export declare function depositGovernanceTokens({ registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, recipient, amount, debugLogger, mint }: {
|
|
3
|
+
registryAddress: `0x${string}`;
|
|
4
|
+
rpcUrls: string[];
|
|
5
|
+
chainId: number;
|
|
6
|
+
privateKey: string | undefined;
|
|
7
|
+
mnemonic: string;
|
|
8
|
+
mnemonicIndex: number;
|
|
9
|
+
recipient: `0x${string}`;
|
|
10
|
+
amount: bigint;
|
|
11
|
+
debugLogger: Logger;
|
|
12
|
+
mint: boolean;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function proposeWithLock({ payloadAddress, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, json, debugLogger, log }: {
|
|
15
|
+
payloadAddress: `0x${string}`;
|
|
16
|
+
registryAddress: `0x${string}`;
|
|
17
|
+
rpcUrls: string[];
|
|
18
|
+
chainId: number;
|
|
19
|
+
privateKey: string | undefined;
|
|
20
|
+
mnemonic: string;
|
|
21
|
+
mnemonicIndex: number;
|
|
22
|
+
debugLogger: Logger;
|
|
23
|
+
log: LogFn;
|
|
24
|
+
json: boolean;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
export declare function voteOnGovernanceProposal({ proposalId, voteAmount, inFavor, waitTilActive, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, debugLogger }: {
|
|
27
|
+
proposalId: bigint;
|
|
28
|
+
voteAmount: bigint | undefined;
|
|
29
|
+
inFavor: boolean;
|
|
30
|
+
waitTilActive: boolean;
|
|
31
|
+
registryAddress: `0x${string}`;
|
|
32
|
+
rpcUrls: string[];
|
|
33
|
+
chainId: number;
|
|
34
|
+
privateKey: string | undefined;
|
|
35
|
+
mnemonic: string;
|
|
36
|
+
mnemonicIndex: number;
|
|
37
|
+
debugLogger: Logger;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
export declare function executeGovernanceProposal({ proposalId, waitTilExecutable, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, debugLogger }: {
|
|
40
|
+
proposalId: bigint;
|
|
41
|
+
waitTilExecutable: boolean;
|
|
42
|
+
registryAddress: `0x${string}`;
|
|
43
|
+
rpcUrls: string[];
|
|
44
|
+
chainId: number;
|
|
45
|
+
privateKey: string | undefined;
|
|
46
|
+
mnemonic: string;
|
|
47
|
+
mnemonicIndex: number;
|
|
48
|
+
debugLogger: Logger;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvbDEvZ292ZXJuYW5jZV91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsd0JBQXNCLHVCQUF1QixDQUFDLEVBQzVDLGVBQWUsRUFDZixPQUFPLEVBQ1AsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEVBQ1IsYUFBYSxFQUNiLFNBQVMsRUFDVCxNQUFNLEVBQ04sV0FBVyxFQUNYLElBQUksRUFDTCxFQUFFO0lBQ0QsZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUM7Q0FDZixpQkEyQkE7QUFFRCx3QkFBc0IsZUFBZSxDQUFDLEVBQ3BDLGNBQWMsRUFDZCxlQUFlLEVBQ2YsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGFBQWEsRUFDYixJQUFJLEVBQ0osV0FBVyxFQUNYLEdBQUcsRUFDSixFQUFFO0lBQ0QsY0FBYyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDOUIsZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQztJQUNYLElBQUksRUFBRSxPQUFPLENBQUM7Q0FDZixpQkFvQkE7QUFFRCx3QkFBc0Isd0JBQXdCLENBQUMsRUFDN0MsVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxFQUNiLGVBQWUsRUFDZixPQUFPLEVBQ1AsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEVBQ1IsYUFBYSxFQUNiLFdBQVcsRUFDWixFQUFFO0lBQ0QsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDdkIsZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFdBQVcsRUFBRSxNQUFNLENBQUM7Q0FDckIsaUJBbUJBO0FBRUQsd0JBQXNCLHlCQUF5QixDQUFDLEVBQzlDLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLE9BQU8sRUFDUCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFFBQVEsRUFDUixhQUFhLEVBQ2IsV0FBVyxFQUNaLEVBQUU7SUFDRCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztJQUMzQixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsV0FBVyxFQUFFLE1BQU0sQ0FBQztDQUNyQixpQkFpQkEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance_utils.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/governance_utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEhE,wBAAsB,uBAAuB,CAAC,EAC5C,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,MAAM,EACN,WAAW,EACX,IAAI,EACL,EAAE;IACD,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,iBA2BA;AAED,wBAAsB,eAAe,CAAC,EACpC,cAAc,EACd,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,WAAW,EACX,GAAG,EACJ,EAAE;IACD,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,KAAK,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;CACf,iBAoBA;AAED,wBAAsB,wBAAwB,CAAC,EAC7C,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACZ,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,iBAmBA;AAED,wBAAsB,yBAAyB,CAAC,EAC9C,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACZ,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,iBAiBA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createEthereumChain } from '@aztec-labs/ethereum/chain';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec-labs/ethereum/client';
|
|
3
|
+
import { FeeJuiceContract, GovernanceContract, ProposalState, RegistryContract } from '@aztec-labs/ethereum/contracts';
|
|
4
|
+
export async function depositGovernanceTokens({ registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, recipient, amount, debugLogger, mint }) {
|
|
5
|
+
debugLogger.info(`Depositing ${amount} governance tokens to ${recipient}`);
|
|
6
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
7
|
+
const extendedClient = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic, chain.chainInfo, undefined, mnemonicIndex);
|
|
8
|
+
const addresses = await RegistryContract.collectAddresses(extendedClient, registryAddress, 'canonical');
|
|
9
|
+
const governanceAddress = addresses.governanceAddress.toString();
|
|
10
|
+
const tokenAddress = addresses.stakingAssetAddress.toString();
|
|
11
|
+
const feeJuice = new FeeJuiceContract(tokenAddress, extendedClient);
|
|
12
|
+
const governance = new GovernanceContract(governanceAddress, extendedClient);
|
|
13
|
+
if (mint) {
|
|
14
|
+
await feeJuice.mint(recipient, amount);
|
|
15
|
+
debugLogger.info(`Minted ${amount} tokens to ${recipient}`);
|
|
16
|
+
}
|
|
17
|
+
await feeJuice.approve(governanceAddress, amount);
|
|
18
|
+
debugLogger.info(`Approved ${amount} tokens for governance`);
|
|
19
|
+
await governance.deposit(recipient, amount);
|
|
20
|
+
debugLogger.info(`Deposited ${amount} tokens to ${recipient}`);
|
|
21
|
+
}
|
|
22
|
+
export async function proposeWithLock({ payloadAddress, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, json, debugLogger, log }) {
|
|
23
|
+
debugLogger.info(`Proposing with lock from ${payloadAddress} to ${registryAddress}`);
|
|
24
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
25
|
+
const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic, chain.chainInfo, undefined, mnemonicIndex);
|
|
26
|
+
const addresses = await RegistryContract.collectAddresses(client, registryAddress, 'canonical');
|
|
27
|
+
const governanceAddress = addresses.governanceAddress.toString();
|
|
28
|
+
const governance = new GovernanceContract(governanceAddress, client);
|
|
29
|
+
const proposalId = await governance.proposeWithLock({
|
|
30
|
+
payloadAddress,
|
|
31
|
+
withdrawAddress: client.account.address
|
|
32
|
+
});
|
|
33
|
+
if (json) {
|
|
34
|
+
log(JSON.stringify({
|
|
35
|
+
proposalId: Number(proposalId)
|
|
36
|
+
}, null, 2));
|
|
37
|
+
} else {
|
|
38
|
+
log(`Proposed with lock`);
|
|
39
|
+
log(`Proposal ID: ${proposalId}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function voteOnGovernanceProposal({ proposalId, voteAmount, inFavor, waitTilActive, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, debugLogger }) {
|
|
43
|
+
debugLogger.info(`Voting on proposal ${proposalId} with ${voteAmount ? voteAmount : 'all'} tokens in favor: ${inFavor}`);
|
|
44
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
45
|
+
const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic, chain.chainInfo, undefined, mnemonicIndex);
|
|
46
|
+
const addresses = await RegistryContract.collectAddresses(client, registryAddress, 'canonical');
|
|
47
|
+
const governanceAddress = addresses.governanceAddress.toString();
|
|
48
|
+
const governance = new GovernanceContract(governanceAddress, client);
|
|
49
|
+
const state = await governance.getProposalState(proposalId);
|
|
50
|
+
if (state !== ProposalState.Active && !waitTilActive) {
|
|
51
|
+
debugLogger.warn(`Proposal is not active, but waitTilActive is false. Not voting.`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
await governance.awaitProposalActive({
|
|
55
|
+
proposalId,
|
|
56
|
+
logger: debugLogger
|
|
57
|
+
});
|
|
58
|
+
await governance.vote({
|
|
59
|
+
proposalId,
|
|
60
|
+
voteAmount,
|
|
61
|
+
inFavor,
|
|
62
|
+
retries: 10,
|
|
63
|
+
logger: debugLogger
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export async function executeGovernanceProposal({ proposalId, waitTilExecutable, registryAddress, rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, debugLogger }) {
|
|
67
|
+
debugLogger.info(`Executing proposal ${proposalId}`);
|
|
68
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
69
|
+
const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic, chain.chainInfo, undefined, mnemonicIndex);
|
|
70
|
+
const addresses = await RegistryContract.collectAddresses(client, registryAddress, 'canonical');
|
|
71
|
+
const governanceAddress = addresses.governanceAddress.toString();
|
|
72
|
+
const governance = new GovernanceContract(governanceAddress, client);
|
|
73
|
+
const state = await governance.getProposalState(proposalId);
|
|
74
|
+
if (state !== ProposalState.Executable && !waitTilExecutable) {
|
|
75
|
+
debugLogger.warn(`Proposal is not executable, but waitTilExecutable is false. Not executing.`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
await governance.awaitProposalExecutable({
|
|
79
|
+
proposalId,
|
|
80
|
+
logger: debugLogger
|
|
81
|
+
});
|
|
82
|
+
await governance.executeProposal({
|
|
83
|
+
proposalId,
|
|
84
|
+
retries: 10,
|
|
85
|
+
logger: debugLogger
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LogFn, Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { type Command } from 'commander';
|
|
3
|
+
export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQVUsTUFBTSxXQUFXLENBQUM7QUF1QmpELHdCQUFnQixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBd2QvRSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AAuBjD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAwd/E"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec-labs/foundation/branded-types';
|
|
2
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
3
|
+
import { Option } from 'commander';
|
|
4
|
+
import { ETHEREUM_HOSTS, MNEMONIC, PRIVATE_KEY, l1ChainIdOption, nodeOption, parseBigint, parseEthereumAddress } from '../../utils/commands.js';
|
|
5
|
+
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([
|
|
6
|
+
ETHEREUM_HOSTS
|
|
7
|
+
]).makeOptionMandatory(true).argParser((arg)=>arg.split(',').map((url)=>url.trim()));
|
|
8
|
+
const networkOption = new Option('--network <string>', 'Network to execute against').env('NETWORK');
|
|
9
|
+
export function injectCommands(program, log, debugLogger) {
|
|
10
|
+
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)=>{
|
|
11
|
+
const { deployL1ContractsCmd } = await import('./deploy_l1_contracts_cmd.js');
|
|
12
|
+
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
13
|
+
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);
|
|
14
|
+
});
|
|
15
|
+
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)=>{
|
|
16
|
+
const { deployNewRollup } = await import('./deploy_new_rollup.js');
|
|
17
|
+
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
18
|
+
await deployNewRollup(options.registryAddress, options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.testAccounts, options.sponsoredFpc, options.json, initialValidators, options.realVerifier, log);
|
|
19
|
+
});
|
|
20
|
+
program.command('compute-genesis-values').description('Computes genesis values (VK tree root, protocol contracts hash, genesis archive root).').addOption(new Option('--test-accounts <boolean>', 'Include initial test accounts in genesis state').env('TEST_ACCOUNTS').argParser((arg)=>arg === 'true')).addOption(new Option('--sponsored-fpc <boolean>', 'Include sponsored FPC contract in genesis state').env('SPONSORED_FPC').argParser((arg)=>arg === 'true')).action(async (options)=>{
|
|
21
|
+
const { computeGenesisValuesCmd } = await import('./compute_genesis_values.js');
|
|
22
|
+
await computeGenesisValuesCmd(options.testAccounts, options.sponsoredFpc, log);
|
|
23
|
+
});
|
|
24
|
+
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)=>{
|
|
25
|
+
const { depositGovernanceTokens } = await import('./governance_utils.js');
|
|
26
|
+
await depositGovernanceTokens({
|
|
27
|
+
registryAddress: options.registryAddress.toString(),
|
|
28
|
+
recipient: options.recipient.toString(),
|
|
29
|
+
amount: options.amount,
|
|
30
|
+
mint: options.mint,
|
|
31
|
+
rpcUrls: options.l1RpcUrls,
|
|
32
|
+
chainId: options.l1ChainId,
|
|
33
|
+
privateKey: options.privateKey,
|
|
34
|
+
mnemonic: options.mnemonic,
|
|
35
|
+
mnemonicIndex: options.mnemonicIndex,
|
|
36
|
+
debugLogger
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
program.command('propose-with-lock').description('Makes a proposal to governance with a lock').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).requiredOption('-p, --payload-address <string>', 'The address of the payload contract', parseEthereumAddress).addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('-pk, --private-key <string>', 'The private key to use to propose', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use to propose', '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 propose', (arg)=>parseInt(arg), 0).option('--json', 'Output the proposal ID in JSON format').action(async (options)=>{
|
|
40
|
+
const { proposeWithLock } = await import('./governance_utils.js');
|
|
41
|
+
await proposeWithLock({
|
|
42
|
+
payloadAddress: options.payloadAddress.toString(),
|
|
43
|
+
registryAddress: options.registryAddress.toString(),
|
|
44
|
+
rpcUrls: options.l1RpcUrls,
|
|
45
|
+
chainId: options.l1ChainId,
|
|
46
|
+
privateKey: options.privateKey,
|
|
47
|
+
mnemonic: options.mnemonic,
|
|
48
|
+
mnemonicIndex: options.mnemonicIndex,
|
|
49
|
+
debugLogger: debugLogger,
|
|
50
|
+
json: options.json,
|
|
51
|
+
log
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
program.command('vote-on-governance-proposal').description('Votes on a governance proposal.').requiredOption('-p, --proposal-id <string>', 'The ID of the proposal', parseBigint).option('-a, --vote-amount <string>', 'The amount of tokens to vote', parseBigint).requiredOption('--in-favor <boolean>', 'Whether to vote in favor of the proposal. Use "yea" for true, any other value for false.', (arg)=>arg === 'yea' || arg === 'true' || arg === '1' || arg === 'yes').requiredOption('--wait <boolean>', 'Whether to wait until the proposal is active', (arg)=>arg === 'true').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('-pk, --private-key <string>', 'The private key to use to vote', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use to vote', '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 vote', (arg)=>parseInt(arg), 0).action(async (options)=>{
|
|
55
|
+
const { voteOnGovernanceProposal } = await import('./governance_utils.js');
|
|
56
|
+
await voteOnGovernanceProposal({
|
|
57
|
+
proposalId: options.proposalId,
|
|
58
|
+
voteAmount: options.voteAmount,
|
|
59
|
+
inFavor: options.inFavor,
|
|
60
|
+
waitTilActive: options.wait,
|
|
61
|
+
registryAddress: options.registryAddress.toString(),
|
|
62
|
+
rpcUrls: options.l1RpcUrls,
|
|
63
|
+
chainId: options.l1ChainId,
|
|
64
|
+
privateKey: options.privateKey,
|
|
65
|
+
mnemonic: options.mnemonic,
|
|
66
|
+
mnemonicIndex: options.mnemonicIndex,
|
|
67
|
+
debugLogger
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
program.command('execute-governance-proposal').description('Executes a governance proposal.').requiredOption('-p, --proposal-id <string>', 'The ID of the proposal', parseBigint).requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).requiredOption('--wait <boolean>', 'Whether to wait until the proposal is executable', (arg)=>arg === 'true').addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('-pk, --private-key <string>', 'The private key to use to vote', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use to vote', '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 vote', (arg)=>parseInt(arg), 0).action(async (options)=>{
|
|
71
|
+
const { executeGovernanceProposal } = await import('./governance_utils.js');
|
|
72
|
+
await executeGovernanceProposal({
|
|
73
|
+
proposalId: options.proposalId,
|
|
74
|
+
registryAddress: options.registryAddress.toString(),
|
|
75
|
+
waitTilExecutable: options.wait,
|
|
76
|
+
rpcUrls: options.l1RpcUrls,
|
|
77
|
+
chainId: options.l1ChainId,
|
|
78
|
+
privateKey: options.privateKey,
|
|
79
|
+
mnemonic: options.mnemonic,
|
|
80
|
+
mnemonicIndex: options.mnemonicIndex,
|
|
81
|
+
debugLogger
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
program.command('get-l1-addresses').description('Gets the addresses of the L1 contracts.').requiredOption('-r, --registry-address <string>', 'The address of the registry contract', parseEthereumAddress).addOption(l1RpcUrlsOption).requiredOption('-v, --rollup-version <number>', 'The version of the rollup', (arg)=>{
|
|
85
|
+
if (arg === 'canonical' || arg === 'latest' || arg === '') {
|
|
86
|
+
return 'canonical';
|
|
87
|
+
}
|
|
88
|
+
const version = parseInt(arg);
|
|
89
|
+
if (isNaN(version)) {
|
|
90
|
+
throw new Error('Invalid rollup version');
|
|
91
|
+
}
|
|
92
|
+
return version;
|
|
93
|
+
}).addOption(l1ChainIdOption).option('--json', 'Output the addresses in JSON format').action(async (options)=>{
|
|
94
|
+
const { getL1Addresses } = await import('./get_l1_addresses.js');
|
|
95
|
+
await getL1Addresses(options.registryAddress, options.rollupVersion, options.l1RpcUrls, options.l1ChainId, options.json, log);
|
|
96
|
+
});
|
|
97
|
+
program.command('generate-l1-account').description('Generates a new private key for an account on L1.').option('--json', 'Output the private key in JSON format').action(async ()=>{
|
|
98
|
+
const { generateL1Account } = await import('./update_l1_validators.js');
|
|
99
|
+
const account = generateL1Account();
|
|
100
|
+
log(JSON.stringify(account, null, 2));
|
|
101
|
+
});
|
|
102
|
+
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)=>{
|
|
103
|
+
const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
|
|
104
|
+
let rollupAddress = options.rollup;
|
|
105
|
+
if (!rollupAddress) {
|
|
106
|
+
const { getL1RollupAddressFromEnv } = await import('../../config/get_l1_config.js');
|
|
107
|
+
rollupAddress = await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
|
|
108
|
+
}
|
|
109
|
+
await addL1ValidatorViaRollup({
|
|
110
|
+
rpcUrls: options.l1RpcUrls,
|
|
111
|
+
chainId: options.l1ChainId,
|
|
112
|
+
privateKey: options.privateKey,
|
|
113
|
+
mnemonic: options.mnemonic,
|
|
114
|
+
attesterAddress: options.attester,
|
|
115
|
+
blsSecretKey: options.blsSecretKey,
|
|
116
|
+
withdrawerAddress: options.withdrawer,
|
|
117
|
+
rollupAddress,
|
|
118
|
+
moveWithLatestRollup: options.moveWithLatestRollup,
|
|
119
|
+
log,
|
|
120
|
+
debugLogger
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
program.command('remove-l1-validator').description('Removes a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--validator <address>', 'ethereum address of the validator', parseEthereumAddress).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).action(async (options)=>{
|
|
124
|
+
const { removeL1Validator } = await import('./update_l1_validators.js');
|
|
125
|
+
await removeL1Validator({
|
|
126
|
+
rpcUrls: options.l1RpcUrls,
|
|
127
|
+
chainId: options.l1ChainId,
|
|
128
|
+
privateKey: options.privateKey,
|
|
129
|
+
mnemonic: options.mnemonic,
|
|
130
|
+
validatorAddress: options.validator,
|
|
131
|
+
rollupAddress: options.rollup,
|
|
132
|
+
log,
|
|
133
|
+
debugLogger
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
program.command('fast-forward-epochs').description('Fast forwards the epoch of the L1 rollup contract.').addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).option('--count <number>', 'The number of epochs to fast forward', (arg)=>BigInt(parseInt(arg)), 1n).action(async (options)=>{
|
|
137
|
+
const { fastForwardEpochs } = await import('./update_l1_validators.js');
|
|
138
|
+
await fastForwardEpochs({
|
|
139
|
+
rpcUrls: options.l1RpcUrls,
|
|
140
|
+
chainId: options.l1ChainId,
|
|
141
|
+
rollupAddress: options.rollup,
|
|
142
|
+
numEpochs: options.count,
|
|
143
|
+
log,
|
|
144
|
+
debugLogger
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
program.command('trigger-seed-snapshot').description('Triggers a seed snapshot for the next epoch.').option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).action(async (options)=>{
|
|
148
|
+
const { triggerSeedSnapshot } = await import('./trigger_seed_snapshot.js');
|
|
149
|
+
await triggerSeedSnapshot({
|
|
150
|
+
rollupAddress: options.rollup,
|
|
151
|
+
rpcUrls: options.l1RpcUrls,
|
|
152
|
+
chainId: options.l1ChainId,
|
|
153
|
+
privateKey: options.privateKey,
|
|
154
|
+
mnemonic: options.mnemonic,
|
|
155
|
+
log
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
program.command('debug-rollup').description('Debugs the rollup contract.').addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).action(async (options)=>{
|
|
159
|
+
const { debugRollup } = await import('./update_l1_validators.js');
|
|
160
|
+
await debugRollup({
|
|
161
|
+
rpcUrls: options.l1RpcUrls,
|
|
162
|
+
chainId: options.l1ChainId,
|
|
163
|
+
privateKey: options.privateKey,
|
|
164
|
+
mnemonic: options.mnemonic,
|
|
165
|
+
rollupAddress: options.rollup,
|
|
166
|
+
log,
|
|
167
|
+
debugLogger
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
program.command('prune-rollup').description('Prunes the pending chain on the rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).action(async (options)=>{
|
|
171
|
+
const { pruneRollup } = await import('./update_l1_validators.js');
|
|
172
|
+
await pruneRollup({
|
|
173
|
+
rpcUrls: options.rpcUrls,
|
|
174
|
+
chainId: options.l1ChainId,
|
|
175
|
+
privateKey: options.privateKey,
|
|
176
|
+
mnemonic: options.mnemonic,
|
|
177
|
+
rollupAddress: options.rollup,
|
|
178
|
+
log,
|
|
179
|
+
debugLogger
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
program.command('create-l1-account').option('--json', 'Output the account in JSON format').action(async (options)=>{
|
|
183
|
+
const { createL1Account } = await import('./create_l1_account.js');
|
|
184
|
+
createL1Account(options.json, log);
|
|
185
|
+
});
|
|
186
|
+
program.command('get-l1-balance').description('Gets the balance of an ERC token in L1 for the given Ethereum address.').argument('<who>', 'Ethereum address to check.', parseEthereumAddress).addOption(l1RpcUrlsOption).option('-t, --token <string>', 'The address of the token to check the balance of', parseEthereumAddress).addOption(l1ChainIdOption).option('--json', 'Output the balance in JSON format').action(async (who, options)=>{
|
|
187
|
+
const { getL1Balance } = await import('./get_l1_balance.js');
|
|
188
|
+
await getL1Balance(who, options.token, options.l1RpcUrls, options.l1ChainId, options.json, log);
|
|
189
|
+
});
|
|
190
|
+
program.command('set-proven-through', {
|
|
191
|
+
hidden: true
|
|
192
|
+
}).description('Instructs the L1 rollup contract to assume all blocks until the given checkpoint are automatically proven.').argument('[checkpoint]', 'The target checkpoint, defaults to the latest pending checkpoint.', parseBigint).addOption(l1RpcUrlsOption).addOption(nodeOption).action(async (checkpoint, options)=>{
|
|
193
|
+
const { assumeProvenThrough } = await import('./assume_proven_through.js');
|
|
194
|
+
await assumeProvenThrough(CheckpointNumber.fromBigInt(checkpoint), options.l1RpcUrls, options.nodeUrl, log);
|
|
195
|
+
});
|
|
196
|
+
program.command('advance-epoch').description('Use L1 cheat codes to warp time until the next epoch.').addOption(l1RpcUrlsOption).addOption(nodeOption).action(async (options)=>{
|
|
197
|
+
const { advanceEpoch } = await import('./advance_epoch.js');
|
|
198
|
+
await advanceEpoch(options.l1RpcUrls, options.nodeUrl, log);
|
|
199
|
+
});
|
|
200
|
+
return program;
|
|
201
|
+
}
|