@aztec/cli 0.0.0-test.1 → 0.0.1-commit.24de95ac
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 +1 -427
- 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 +9 -0
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts +3 -0
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_current_base_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 +6 -0
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
- package/dest/cmds/{pxe → aztec_node}/get_logs.js +4 -4
- 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/{pxe → aztec_node}/get_node_info.js +14 -15
- package/dest/cmds/aztec_node/index.d.ts.map +1 -0
- package/dest/cmds/aztec_node/index.js +28 -0
- package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
- package/dest/cmds/contracts/inspect_contract.js +9 -5
- package/dest/cmds/infrastructure/index.d.ts +2 -2
- package/dest/cmds/infrastructure/index.d.ts.map +1 -1
- package/dest/cmds/infrastructure/index.js +8 -9
- package/dest/cmds/infrastructure/sequencers.d.ts +4 -4
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +29 -16
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.js +11 -24
- package/dest/cmds/l1/advance_epoch.d.ts +1 -1
- package/dest/cmds/l1/advance_epoch.d.ts.map +1 -1
- package/dest/cmds/l1/advance_epoch.js +8 -6
- package/dest/cmds/l1/assume_proven_through.d.ts +1 -1
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
- package/dest/cmds/l1/assume_proven_through.js +9 -8
- package/dest/cmds/l1/bridge_erc20.d.ts +2 -2
- package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
- package/dest/cmds/l1/bridge_erc20.js +5 -5
- package/dest/cmds/l1/deploy_l1_contracts.d.ts +2 -2
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_l1_contracts.js +23 -6
- package/dest/cmds/l1/deploy_new_rollup.d.ts +2 -1
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +17 -8
- package/dest/cmds/l1/get_l1_addresses.d.ts +1 -1
- package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
- package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
- package/dest/cmds/l1/governance_utils.js +17 -17
- package/dest/cmds/l1/index.d.ts +1 -0
- package/dest/cmds/l1/index.d.ts.map +1 -1
- package/dest/cmds/l1/index.js +33 -43
- 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 +19 -0
- package/dest/cmds/l1/update_l1_validators.d.ts +17 -2
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +159 -103
- package/dest/cmds/misc/generate_bootnode_enr.d.ts +1 -1
- package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -1
- package/dest/cmds/misc/generate_bootnode_enr.js +2 -2
- package/dest/cmds/misc/generate_secret_and_hash.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.js +3 -3
- package/dest/cmds/misc/generate_secret_key.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -1
- package/dest/cmds/misc/generate_secret_key.js +1 -1
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +3 -0
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts.map +1 -0
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.js +4 -0
- package/dest/cmds/misc/index.d.ts.map +1 -1
- package/dest/cmds/misc/index.js +7 -3
- package/dest/cmds/misc/update/github.d.ts +0 -1
- package/dest/cmds/misc/update/github.d.ts.map +1 -1
- package/dest/cmds/misc/update/github.js +0 -1
- package/dest/cmds/misc/update.d.ts.map +1 -1
- package/dest/cmds/misc/update.js +2 -3
- 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 +70 -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 +26 -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 +20 -0
- package/dest/cmds/validator_keys/new.d.ts +26 -0
- package/dest/cmds/validator_keys/new.d.ts.map +1 -0
- package/dest/cmds/validator_keys/new.js +60 -0
- package/dest/cmds/validator_keys/shared.d.ts +68 -0
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
- package/dest/cmds/validator_keys/shared.js +271 -0
- package/dest/config/cached_fetch.d.ts +18 -0
- package/dest/config/cached_fetch.d.ts.map +1 -0
- package/dest/config/cached_fetch.js +54 -0
- package/dest/config/chain_l2_config.d.ts +39 -0
- package/dest/config/chain_l2_config.d.ts.map +1 -0
- package/dest/config/chain_l2_config.js +475 -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/get_l1_config.d.ts +8 -0
- package/dest/config/get_l1_config.d.ts.map +1 -0
- package/dest/config/get_l1_config.js +22 -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 +19 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +79 -0
- package/dest/utils/aztec.d.ts +12 -17
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +54 -49
- package/dest/utils/commands.d.ts +17 -9
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +40 -14
- package/dest/utils/encoding.js +1 -1
- package/dest/utils/github.d.ts +0 -1
- package/dest/utils/github.d.ts.map +1 -1
- package/dest/utils/github.js +0 -1
- package/dest/utils/index.d.ts +1 -0
- package/dest/utils/index.d.ts.map +1 -1
- package/dest/utils/index.js +1 -0
- package/dest/utils/inspect.d.ts +3 -10
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +19 -109
- 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 +44 -33
- package/src/cmds/aztec_node/block_number.ts +9 -0
- package/src/cmds/aztec_node/get_block.ts +10 -0
- package/src/cmds/aztec_node/get_current_base_fee.ts +9 -0
- package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
- package/src/cmds/{pxe → aztec_node}/get_logs.ts +8 -7
- package/src/cmds/{pxe → aztec_node}/get_node_info.ts +15 -23
- package/src/cmds/aztec_node/index.ts +87 -0
- package/src/cmds/contracts/inspect_contract.ts +16 -6
- package/src/cmds/infrastructure/index.ts +8 -10
- package/src/cmds/infrastructure/sequencers.ts +36 -19
- package/src/cmds/infrastructure/setup_l2_contract.ts +13 -25
- package/src/cmds/l1/advance_epoch.ts +7 -5
- package/src/cmds/l1/assume_proven_through.ts +8 -7
- package/src/cmds/l1/bridge_erc20.ts +7 -4
- package/src/cmds/l1/deploy_l1_contracts.ts +32 -7
- package/src/cmds/l1/deploy_new_rollup.ts +23 -9
- package/src/cmds/l1/get_l1_addresses.ts +1 -1
- package/src/cmds/l1/governance_utils.ts +18 -17
- package/src/cmds/l1/index.ts +74 -101
- package/src/cmds/l1/trigger_seed_snapshot.ts +31 -0
- package/src/cmds/l1/update_l1_validators.ts +194 -94
- package/src/cmds/misc/generate_bootnode_enr.ts +3 -2
- package/src/cmds/misc/generate_secret_and_hash.ts +3 -3
- package/src/cmds/misc/generate_secret_key.ts +1 -1
- package/src/cmds/misc/get_canonical_sponsored_fpc_address.ts +7 -0
- package/src/cmds/misc/index.ts +13 -4
- package/src/cmds/misc/update/github.ts +0 -1
- package/src/cmds/misc/update.ts +1 -7
- package/src/cmds/validator_keys/add.ts +113 -0
- package/src/cmds/validator_keys/generate_bls_keypair.ts +33 -0
- package/src/cmds/validator_keys/index.ts +96 -0
- package/src/cmds/validator_keys/new.ts +120 -0
- package/src/cmds/validator_keys/shared.ts +321 -0
- package/src/config/cached_fetch.ts +67 -0
- package/src/config/chain_l2_config.ts +627 -0
- package/src/config/enrich_env.ts +15 -0
- package/src/config/get_l1_config.ts +28 -0
- package/src/config/index.ts +4 -0
- package/src/config/network_config.ts +102 -0
- package/src/utils/aztec.ts +78 -65
- package/src/utils/commands.ts +54 -18
- package/src/utils/encoding.ts +1 -1
- package/src/utils/github.ts +0 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/inspect.ts +23 -123
- package/src/utils/setup_contracts.ts +19 -0
- package/dest/cmds/devnet/bootstrap_network.d.ts +0 -3
- package/dest/cmds/devnet/bootstrap_network.d.ts.map +0 -1
- package/dest/cmds/devnet/bootstrap_network.js +0 -196
- package/dest/cmds/devnet/faucet.d.ts +0 -4
- package/dest/cmds/devnet/faucet.d.ts.map +0 -1
- package/dest/cmds/devnet/faucet.js +0 -26
- package/dest/cmds/devnet/index.d.ts.map +0 -1
- package/dest/cmds/devnet/index.js +0 -14
- package/dest/cmds/l1/deploy_l1_verifier.d.ts +0 -5
- package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +0 -1
- package/dest/cmds/l1/deploy_l1_verifier.js +0 -54
- package/dest/cmds/misc/setup_contracts.d.ts +0 -7
- package/dest/cmds/misc/setup_contracts.d.ts.map +0 -1
- package/dest/cmds/misc/setup_contracts.js +0 -27
- package/dest/cmds/pxe/add_contract.d.ts +0 -5
- package/dest/cmds/pxe/add_contract.d.ts.map +0 -1
- package/dest/cmds/pxe/add_contract.js +0 -29
- package/dest/cmds/pxe/block_number.d.ts +0 -3
- package/dest/cmds/pxe/block_number.d.ts.map +0 -1
- package/dest/cmds/pxe/block_number.js +0 -10
- package/dest/cmds/pxe/get_account.d.ts +0 -4
- package/dest/cmds/pxe/get_account.d.ts.map +0 -1
- package/dest/cmds/pxe/get_account.js +0 -10
- package/dest/cmds/pxe/get_accounts.d.ts +0 -3
- package/dest/cmds/pxe/get_accounts.d.ts.map +0 -1
- package/dest/cmds/pxe/get_accounts.js +0 -25
- package/dest/cmds/pxe/get_block.d.ts +0 -3
- package/dest/cmds/pxe/get_block.d.ts.map +0 -1
- package/dest/cmds/pxe/get_block.js +0 -9
- package/dest/cmds/pxe/get_contract_data.d.ts +0 -4
- package/dest/cmds/pxe/get_contract_data.d.ts.map +0 -1
- package/dest/cmds/pxe/get_contract_data.js +0 -31
- package/dest/cmds/pxe/get_current_base_fee.d.ts +0 -3
- package/dest/cmds/pxe/get_current_base_fee.d.ts.map +0 -1
- package/dest/cmds/pxe/get_current_base_fee.js +0 -7
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +0 -4
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +0 -1
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +0 -11
- package/dest/cmds/pxe/get_logs.d.ts +0 -4
- package/dest/cmds/pxe/get_logs.d.ts.map +0 -1
- package/dest/cmds/pxe/get_node_info.d.ts +0 -3
- package/dest/cmds/pxe/get_node_info.d.ts.map +0 -1
- package/dest/cmds/pxe/get_pxe_info.d.ts +0 -3
- package/dest/cmds/pxe/get_pxe_info.d.ts.map +0 -1
- package/dest/cmds/pxe/get_pxe_info.js +0 -11
- package/dest/cmds/pxe/index.d.ts +0 -4
- package/dest/cmds/pxe/index.d.ts.map +0 -1
- package/dest/cmds/pxe/index.js +0 -55
- package/src/cmds/devnet/bootstrap_network.ts +0 -318
- package/src/cmds/devnet/faucet.ts +0 -33
- package/src/cmds/devnet/index.ts +0 -60
- package/src/cmds/l1/deploy_l1_verifier.ts +0 -105
- package/src/cmds/misc/setup_contracts.ts +0 -40
- package/src/cmds/pxe/add_contract.ts +0 -41
- package/src/cmds/pxe/block_number.ts +0 -9
- package/src/cmds/pxe/get_account.ts +0 -16
- package/src/cmds/pxe/get_accounts.ts +0 -35
- package/src/cmds/pxe/get_block.ts +0 -10
- package/src/cmds/pxe/get_contract_data.ts +0 -51
- package/src/cmds/pxe/get_current_base_fee.ts +0 -9
- package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +0 -25
- package/src/cmds/pxe/get_pxe_info.ts +0 -13
- package/src/cmds/pxe/index.ts +0 -170
- /package/dest/cmds/{devnet → aztec_node}/index.d.ts +0 -0
|
@@ -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;AAcjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAof/E"}
|
package/dest/cmds/l1/index.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import { Option } from 'commander';
|
|
3
|
-
import {
|
|
3
|
+
import { getL1RollupAddressFromEnv } from '../../config/get_l1_config.js';
|
|
4
|
+
import { ETHEREUM_HOSTS, MNEMONIC, PRIVATE_KEY, l1ChainIdOption, nodeOption, parseAztecAddress, parseBigint, parseEthereumAddress } from '../../utils/commands.js';
|
|
5
|
+
export { addL1Validator } from './update_l1_validators.js';
|
|
4
6
|
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([
|
|
5
7
|
ETHEREUM_HOSTS
|
|
6
8
|
]).makeOptionMandatory(true).argParser((arg)=>arg.split(',').map((url)=>url.trim()));
|
|
9
|
+
const networkOption = new Option('--network <string>', 'Network to execute against').env('NETWORK');
|
|
7
10
|
export function injectCommands(program, log, debugLogger) {
|
|
8
|
-
|
|
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('--salt <number>', 'The optional salt to use in deployment', (arg)=>parseInt(arg)).option('--json', 'Output the contract addresses in JSON format').option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts').option('--accelerated-test-deployments', 'Fire and forget deployment transactions, use in testing only', false).action(async (options)=>{
|
|
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('--salt <number>', 'The optional salt to use in deployment', (arg)=>parseInt(arg)).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('--accelerated-test-deployments', 'Fire and forget deployment transactions, use in testing only', false).option('--real-verifier', 'Deploy the real verifier', false).option('--existing-token <address>', 'Use an existing ERC20 for both fee and staking', parseEthereumAddress).option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false).action(async (options)=>{
|
|
10
12
|
const { deployL1Contracts } = await import('./deploy_l1_contracts.js');
|
|
11
13
|
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
12
|
-
await deployL1Contracts(options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.salt, options.testAccounts, options.acceleratedTestDeployments, options.json, initialValidators, log, debugLogger);
|
|
14
|
+
await deployL1Contracts(options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.salt, options.testAccounts, options.sponsoredFpc, options.acceleratedTestDeployments, options.json, options.createVerificationJson, initialValidators, options.realVerifier, options.existingToken, log, debugLogger);
|
|
13
15
|
});
|
|
14
|
-
program.command('deploy-new-rollup').description('Deploys a new rollup contract and
|
|
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('--salt <number>', 'The optional salt to use in deployment', (arg)=>parseInt(arg)).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('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false).action(async (options)=>{
|
|
15
17
|
const { deployNewRollup } = await import('./deploy_new_rollup.js');
|
|
16
18
|
const initialValidators = options.validators?.split(',').map((validator)=>EthAddress.fromString(validator)) || [];
|
|
17
|
-
await deployNewRollup(options.registryAddress, options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.salt, options.testAccounts, options.json, initialValidators, log, debugLogger);
|
|
19
|
+
await deployNewRollup(options.registryAddress, options.l1RpcUrls, options.l1ChainId, options.privateKey, options.mnemonic, options.mnemonicIndex, options.salt, options.testAccounts, options.sponsoredFpc, options.json, initialValidators, options.realVerifier, options.createVerificationJson, log, debugLogger);
|
|
18
20
|
});
|
|
19
21
|
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)=>{
|
|
20
22
|
const { depositGovernanceTokens } = await import('./governance_utils.js');
|
|
@@ -94,16 +96,19 @@ export function injectCommands(program, log, debugLogger) {
|
|
|
94
96
|
const account = generateL1Account();
|
|
95
97
|
log(JSON.stringify(account, null, 2));
|
|
96
98
|
});
|
|
97
|
-
program.command('add-l1-validator').description('Adds a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use
|
|
98
|
-
const {
|
|
99
|
-
await
|
|
99
|
+
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
|
+
const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
|
|
101
|
+
const rollupAddress = options.rollup ?? await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
|
|
102
|
+
await addL1ValidatorViaRollup({
|
|
100
103
|
rpcUrls: options.l1RpcUrls,
|
|
101
104
|
chainId: options.l1ChainId,
|
|
102
105
|
privateKey: options.privateKey,
|
|
103
106
|
mnemonic: options.mnemonic,
|
|
104
|
-
|
|
105
|
-
|
|
107
|
+
attesterAddress: options.attester,
|
|
108
|
+
blsSecretKey: options.blsSecretKey,
|
|
106
109
|
withdrawerAddress: options.withdrawer,
|
|
110
|
+
rollupAddress,
|
|
111
|
+
moveWithLatestRollup: options.moveWithLatestRollup,
|
|
107
112
|
log,
|
|
108
113
|
debugLogger
|
|
109
114
|
});
|
|
@@ -132,6 +137,17 @@ export function injectCommands(program, log, debugLogger) {
|
|
|
132
137
|
debugLogger
|
|
133
138
|
});
|
|
134
139
|
});
|
|
140
|
+
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)=>{
|
|
141
|
+
const { triggerSeedSnapshot } = await import('./trigger_seed_snapshot.js');
|
|
142
|
+
await triggerSeedSnapshot({
|
|
143
|
+
rollupAddress: options.rollup,
|
|
144
|
+
rpcUrls: options.l1RpcUrls,
|
|
145
|
+
chainId: options.l1ChainId,
|
|
146
|
+
privateKey: options.privateKey,
|
|
147
|
+
mnemonic: options.mnemonic,
|
|
148
|
+
log
|
|
149
|
+
});
|
|
150
|
+
});
|
|
135
151
|
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)=>{
|
|
136
152
|
const { debugRollup } = await import('./update_l1_validators.js');
|
|
137
153
|
await debugRollup({
|
|
@@ -156,17 +172,9 @@ export function injectCommands(program, log, debugLogger) {
|
|
|
156
172
|
debugLogger
|
|
157
173
|
});
|
|
158
174
|
});
|
|
159
|
-
program.command('
|
|
160
|
-
const { deployMockVerifier, deployUltraHonkVerifier } = await import('./deploy_l1_verifier.js');
|
|
161
|
-
if (options.verifier === 'mock') {
|
|
162
|
-
await deployMockVerifier(options.rollupAddress?.toString(), options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.rpcUrl, log, debugLogger);
|
|
163
|
-
} else {
|
|
164
|
-
await deployUltraHonkVerifier(options.rollupAddress?.toString(), options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.rpcUrl, options.bb, options.bbWorkingDir, log, debugLogger);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
program.command('bridge-erc20').description('Bridges ERC20 tokens to L2.').argument('<amount>', 'The amount of Fee Juice to mint and bridge.', parseBigint).argument('<recipient>', 'Aztec address of the recipient.', parseAztecAddress).addOption(l1RpcUrlsOption).option('-m, --mnemonic <string>', 'The mnemonic to use for deriving the Ethereum address that will mint and bridge', 'test test test test test test test test test test test junk').option('--mint', 'Mint the tokens on L1', false).option('--private', 'If the bridge should use the private flow', false).addOption(l1ChainIdOption).requiredOption('-t, --token <string>', 'The address of the token to bridge', parseEthereumAddress).requiredOption('-p, --portal <string>', 'The address of the portal contract', parseEthereumAddress).option('--l1-private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--json', 'Output the claim in JSON format').action(async (amount, recipient, options)=>{
|
|
175
|
+
program.command('bridge-erc20').description('Bridges ERC20 tokens to L2.').argument('<amount>', 'The amount of Fee Juice to mint and bridge.', parseBigint).argument('<recipient>', 'Aztec address of the recipient.', parseAztecAddress).addOption(l1RpcUrlsOption).option('-m, --mnemonic <string>', 'The mnemonic to use for deriving the Ethereum address that will mint and bridge', 'test test test test test test test test test test test junk').option('--mint', 'Mint the tokens on L1', false).option('--private', 'If the bridge should use the private flow', false).addOption(l1ChainIdOption).requiredOption('-t, --token <string>', 'The address of the token to bridge', parseEthereumAddress).requiredOption('-p, --portal <string>', 'The address of the portal contract', parseEthereumAddress).option('-f, --faucet <string>', 'The address of the faucet contract (only used if minting)', parseEthereumAddress).option('--l1-private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--json', 'Output the claim in JSON format').action(async (amount, recipient, options)=>{
|
|
168
176
|
const { bridgeERC20 } = await import('./bridge_erc20.js');
|
|
169
|
-
await bridgeERC20(amount, recipient, options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.token, options.portal, options.private, options.mint, options.json, log, debugLogger);
|
|
177
|
+
await bridgeERC20(amount, recipient, options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.token, options.faucet, options.portal, options.private, options.mint, options.json, log, debugLogger);
|
|
170
178
|
});
|
|
171
179
|
program.command('create-l1-account').option('--json', 'Output the account in JSON format').action(async (options)=>{
|
|
172
180
|
const { createL1Account } = await import('./create_l1_account.js');
|
|
@@ -178,31 +186,13 @@ export function injectCommands(program, log, debugLogger) {
|
|
|
178
186
|
});
|
|
179
187
|
program.command('set-proven-through', {
|
|
180
188
|
hidden: true
|
|
181
|
-
}).description('Instructs the L1 rollup contract to assume all blocks until the given number are automatically proven.').argument('[blockNumber]', 'The target block number, defaults to the latest pending block number.', parseBigint).addOption(l1RpcUrlsOption).addOption(
|
|
189
|
+
}).description('Instructs the L1 rollup contract to assume all blocks until the given number are automatically proven.').argument('[blockNumber]', 'The target block number, defaults to the latest pending block number.', parseBigint).addOption(l1RpcUrlsOption).addOption(nodeOption).action(async (blockNumber, options)=>{
|
|
182
190
|
const { assumeProvenThrough } = await import('./assume_proven_through.js');
|
|
183
|
-
await assumeProvenThrough(blockNumber, options.l1RpcUrls, options.
|
|
191
|
+
await assumeProvenThrough(blockNumber, options.l1RpcUrls, options.nodeUrl, log);
|
|
184
192
|
});
|
|
185
|
-
program.command('advance-epoch').description('Use L1 cheat codes to warp time until the next epoch.').addOption(l1RpcUrlsOption).addOption(
|
|
193
|
+
program.command('advance-epoch').description('Use L1 cheat codes to warp time until the next epoch.').addOption(l1RpcUrlsOption).addOption(nodeOption).action(async (options)=>{
|
|
186
194
|
const { advanceEpoch } = await import('./advance_epoch.js');
|
|
187
|
-
await advanceEpoch(options.l1RpcUrls, options.
|
|
188
|
-
});
|
|
189
|
-
program.command('prover-stats', {
|
|
190
|
-
hidden: true
|
|
191
|
-
}).addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).option('--start-block <number>', 'The L1 block number to start from', parseBigint, 1n).option('--end-block <number>', 'The last L1 block number to query', parseBigint).option('--batch-size <number>', 'The number of blocks to query in each batch', parseBigint, 100n).option('--proving-timeout <number>', 'Cutoff for proving time to consider a block', parseBigint).option('--l1-rollup-address <string>', 'Address of the rollup contract (required if node URL is not set)').option('--node-url <string>', 'JSON RPC URL of an Aztec node to retrieve the rollup contract address (required if L1 rollup address is not set)').option('--raw-logs', 'Output raw logs instead of aggregated stats').action(async (options)=>{
|
|
192
|
-
const { proverStats } = await import('./prover_stats.js');
|
|
193
|
-
const { l1RpcUrls, chainId, l1RollupAddress, startBlock, endBlock, batchSize, nodeUrl, provingTimeout, rawLogs } = options;
|
|
194
|
-
await proverStats({
|
|
195
|
-
l1RpcUrls,
|
|
196
|
-
chainId,
|
|
197
|
-
l1RollupAddress,
|
|
198
|
-
startBlock,
|
|
199
|
-
endBlock,
|
|
200
|
-
batchSize,
|
|
201
|
-
nodeUrl,
|
|
202
|
-
provingTimeout,
|
|
203
|
-
rawLogs,
|
|
204
|
-
log
|
|
205
|
-
});
|
|
195
|
+
await advanceEpoch(options.l1RpcUrls, options.nodeUrl, log);
|
|
206
196
|
});
|
|
207
197
|
return program;
|
|
208
198
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
+
import type { RollupCommandArgs } from './update_l1_validators.js';
|
|
3
|
+
export declare function triggerSeedSnapshot({ rpcUrls, chainId, privateKey, mnemonic, rollupAddress, log, }: RollupCommandArgs & {
|
|
4
|
+
log: LogFn;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=trigger_seed_snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger_seed_snapshot.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/trigger_seed_snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAKnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,GAAG,GACJ,EAAE,iBAAiB,GAAG;IAAE,GAAG,EAAE,KAAK,CAAA;CAAE,iBAepC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
|
|
2
|
+
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
3
|
+
import { getContract } from 'viem';
|
|
4
|
+
export async function triggerSeedSnapshot({ rpcUrls, chainId, privateKey, mnemonic, rollupAddress, log }) {
|
|
5
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
6
|
+
const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic, chain.chainInfo);
|
|
7
|
+
const rollup = getContract({
|
|
8
|
+
address: rollupAddress.toString(),
|
|
9
|
+
abi: RollupAbi,
|
|
10
|
+
client
|
|
11
|
+
});
|
|
12
|
+
log('Triggering seed snapshot for next epoch');
|
|
13
|
+
const txHash = await rollup.write.checkpointRandao();
|
|
14
|
+
log(`Sent! | Seed snapshot setup for next epoch | tx hash: ${txHash}`);
|
|
15
|
+
const receipt = await client.waitForTransactionReceipt({
|
|
16
|
+
hash: txHash
|
|
17
|
+
});
|
|
18
|
+
log(`Done! | Seed snapshot setup for next epoch | tx hash: ${txHash} | status: ${receipt.status}`);
|
|
19
|
+
}
|
|
@@ -8,6 +8,13 @@ export interface RollupCommandArgs {
|
|
|
8
8
|
rollupAddress: EthAddress;
|
|
9
9
|
withdrawerAddress?: EthAddress;
|
|
10
10
|
}
|
|
11
|
+
export interface StakingAssetHandlerCommandArgs {
|
|
12
|
+
rpcUrls: string[];
|
|
13
|
+
chainId: number;
|
|
14
|
+
privateKey?: string;
|
|
15
|
+
mnemonic?: string;
|
|
16
|
+
stakingAssetHandlerAddress: EthAddress;
|
|
17
|
+
}
|
|
11
18
|
export interface LoggerArgs {
|
|
12
19
|
log: LogFn;
|
|
13
20
|
debugLogger: Logger;
|
|
@@ -16,8 +23,16 @@ export declare function generateL1Account(): {
|
|
|
16
23
|
privateKey: `0x${string}`;
|
|
17
24
|
address: `0x${string}`;
|
|
18
25
|
};
|
|
19
|
-
export declare function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic,
|
|
20
|
-
|
|
26
|
+
export declare function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, stakingAssetHandlerAddress, merkleProof, proofParams, blsSecretKey, log, debugLogger, }: StakingAssetHandlerCommandArgs & LoggerArgs & {
|
|
27
|
+
blsSecretKey: bigint;
|
|
28
|
+
attesterAddress: EthAddress;
|
|
29
|
+
proofParams: Buffer;
|
|
30
|
+
merkleProof: string[];
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
export declare function addL1ValidatorViaRollup({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, withdrawerAddress, blsSecretKey, moveWithLatestRollup, rollupAddress, log, debugLogger, }: RollupCommandArgs & LoggerArgs & {
|
|
33
|
+
blsSecretKey: bigint;
|
|
34
|
+
attesterAddress: EthAddress;
|
|
35
|
+
moveWithLatestRollup: boolean;
|
|
21
36
|
}): Promise<void>;
|
|
22
37
|
export declare function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, rollupAddress, log, debugLogger, }: RollupCommandArgs & LoggerArgs & {
|
|
23
38
|
validatorAddress: EthAddress;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,EAAE,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,KAAK,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB;;;EAQhC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,eAAe,EACf,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,YAAY,EACZ,GAAG,EACH,WAAW,GACZ,EAAE,8BAA8B,GAC/B,UAAU,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,UAAU,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,iBA4DF;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAClB,UAAU,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,UAAU,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;CAC/B,iBAuDF;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,gBAAgB,EAAE,UAAU,CAAA;CAAE,iBAiBnE;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,iBAgBhC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,aAAa,EACb,SAAS,EACT,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAyBxD;AAED,wBAAsB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,iBAAiB,GAAG,UAAU,iBAwBzG"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { GSEContract, RollupContract, createEthereumChain, createExtendedL1Client, createL1TxUtilsFromViemWallet, getL1ContractsConfigEnvVars, getPublicClient, isAnvilTestChain } from '@aztec/ethereum';
|
|
2
|
+
import { EthCheatCodes } from '@aztec/ethereum/test';
|
|
3
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
4
|
+
import { RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
|
|
5
|
+
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
6
|
+
import { encodeFunctionData, formatEther, getContract } from 'viem';
|
|
4
7
|
import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
8
|
+
import { addLeadingHex } from '../../utils/aztec.js';
|
|
5
9
|
export function generateL1Account() {
|
|
6
10
|
const privateKey = generatePrivateKey();
|
|
7
11
|
const account = privateKeyToAccount(privateKey);
|
|
@@ -11,106 +15,171 @@ export function generateL1Account() {
|
|
|
11
15
|
address: account.address
|
|
12
16
|
};
|
|
13
17
|
}
|
|
14
|
-
export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic,
|
|
15
|
-
const config = getL1ContractsConfigEnvVars();
|
|
18
|
+
export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, stakingAssetHandlerAddress, merkleProof, proofParams, blsSecretKey, log, debugLogger }) {
|
|
16
19
|
const dualLog = makeDualLog(log, debugLogger);
|
|
17
|
-
const
|
|
18
|
-
const
|
|
20
|
+
const account = getAccount(privateKey, mnemonic);
|
|
21
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
22
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
23
|
+
const stakingAssetHandler = getContract({
|
|
24
|
+
address: stakingAssetHandlerAddress.toString(),
|
|
25
|
+
abi: StakingAssetHandlerAbi,
|
|
26
|
+
client: l1Client
|
|
27
|
+
});
|
|
28
|
+
const rollupAddress = await stakingAssetHandler.read.getRollup();
|
|
29
|
+
dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()}`);
|
|
19
30
|
const rollup = getContract({
|
|
20
|
-
address: rollupAddress
|
|
31
|
+
address: rollupAddress,
|
|
21
32
|
abi: RollupAbi,
|
|
22
|
-
client:
|
|
23
|
-
});
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
dualLog(`Transaction hash: ${txHash}`);
|
|
52
|
-
await publicClient.waitForTransactionReceipt({
|
|
53
|
-
hash: txHash
|
|
33
|
+
client: l1Client
|
|
34
|
+
});
|
|
35
|
+
const gseAddress = await rollup.read.getGSE();
|
|
36
|
+
const gse = new GSEContract(l1Client, gseAddress);
|
|
37
|
+
const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
|
|
38
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client, {
|
|
39
|
+
logger: debugLogger
|
|
40
|
+
});
|
|
41
|
+
const proofParamsObj = ZkPassportProofParams.fromBuffer(proofParams);
|
|
42
|
+
const merkleProofArray = merkleProof.map((proof)=>addLeadingHex(proof));
|
|
43
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
44
|
+
to: stakingAssetHandlerAddress.toString(),
|
|
45
|
+
data: encodeFunctionData({
|
|
46
|
+
abi: StakingAssetHandlerAbi,
|
|
47
|
+
functionName: 'addValidator',
|
|
48
|
+
args: [
|
|
49
|
+
attesterAddress.toString(),
|
|
50
|
+
merkleProofArray,
|
|
51
|
+
proofParamsObj.toViem(),
|
|
52
|
+
registrationTuple.publicKeyInG1,
|
|
53
|
+
registrationTuple.publicKeyInG2,
|
|
54
|
+
registrationTuple.proofOfPossession
|
|
55
|
+
]
|
|
56
|
+
}),
|
|
57
|
+
abi: StakingAssetHandlerAbi
|
|
58
|
+
});
|
|
59
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
60
|
+
await l1Client.waitForTransactionReceipt({
|
|
61
|
+
hash: receipt.transactionHash
|
|
54
62
|
});
|
|
55
63
|
if (isAnvilTestChain(chainId)) {
|
|
56
64
|
dualLog(`Funding validator on L1`);
|
|
57
|
-
const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
|
|
58
|
-
await cheatCodes.setBalance(
|
|
65
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
66
|
+
await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
|
|
59
67
|
} else {
|
|
60
|
-
const balance = await
|
|
61
|
-
address:
|
|
68
|
+
const balance = await l1Client.getBalance({
|
|
69
|
+
address: attesterAddress.toString()
|
|
62
70
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
dualLog(`WARNING: Validator has no balance. Remember to fund it!`);
|
|
71
|
+
dualLog(`Validator balance: ${formatEther(balance)} ETH`);
|
|
72
|
+
if (balance === 0n) {
|
|
73
|
+
dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
|
|
67
74
|
}
|
|
68
75
|
}
|
|
69
76
|
}
|
|
70
|
-
export async function
|
|
77
|
+
export async function addL1ValidatorViaRollup({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, withdrawerAddress, blsSecretKey, moveWithLatestRollup, rollupAddress, log, debugLogger }) {
|
|
71
78
|
const dualLog = makeDualLog(log, debugLogger);
|
|
72
|
-
const
|
|
73
|
-
const
|
|
79
|
+
const account = getAccount(privateKey, mnemonic);
|
|
80
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
81
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
82
|
+
dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()} via direct deposit`);
|
|
83
|
+
if (!withdrawerAddress) {
|
|
84
|
+
throw new Error(`Withdrawer address required`);
|
|
85
|
+
}
|
|
74
86
|
const rollup = getContract({
|
|
75
87
|
address: rollupAddress.toString(),
|
|
76
88
|
abi: RollupAbi,
|
|
77
|
-
client:
|
|
89
|
+
client: l1Client
|
|
90
|
+
});
|
|
91
|
+
const gseAddress = await rollup.read.getGSE();
|
|
92
|
+
const gse = new GSEContract(l1Client, gseAddress);
|
|
93
|
+
const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
|
|
94
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client, {
|
|
95
|
+
logger: debugLogger
|
|
96
|
+
});
|
|
97
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
98
|
+
to: rollupAddress.toString(),
|
|
99
|
+
data: encodeFunctionData({
|
|
100
|
+
abi: RollupAbi,
|
|
101
|
+
functionName: 'deposit',
|
|
102
|
+
args: [
|
|
103
|
+
attesterAddress.toString(),
|
|
104
|
+
withdrawerAddress.toString(),
|
|
105
|
+
registrationTuple.publicKeyInG1,
|
|
106
|
+
registrationTuple.publicKeyInG2,
|
|
107
|
+
registrationTuple.proofOfPossession,
|
|
108
|
+
moveWithLatestRollup
|
|
109
|
+
]
|
|
110
|
+
}),
|
|
111
|
+
abi: StakingAssetHandlerAbi
|
|
112
|
+
});
|
|
113
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
114
|
+
await l1Client.waitForTransactionReceipt({
|
|
115
|
+
hash: receipt.transactionHash
|
|
116
|
+
});
|
|
117
|
+
if (isAnvilTestChain(chainId)) {
|
|
118
|
+
dualLog(`Funding validator on L1`);
|
|
119
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
120
|
+
await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
|
|
121
|
+
} else {
|
|
122
|
+
const balance = await l1Client.getBalance({
|
|
123
|
+
address: attesterAddress.toString()
|
|
124
|
+
});
|
|
125
|
+
dualLog(`Validator balance: ${formatEther(balance)} ETH`);
|
|
126
|
+
if (balance === 0n) {
|
|
127
|
+
dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, rollupAddress, log, debugLogger }) {
|
|
132
|
+
const dualLog = makeDualLog(log, debugLogger);
|
|
133
|
+
const account = getAccount(privateKey, mnemonic);
|
|
134
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
135
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
136
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client, {
|
|
137
|
+
logger: debugLogger
|
|
78
138
|
});
|
|
79
139
|
dualLog(`Removing validator ${validatorAddress.toString()} from rollup ${rollupAddress.toString()}`);
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
140
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
141
|
+
to: rollupAddress.toString(),
|
|
142
|
+
data: encodeFunctionData({
|
|
143
|
+
abi: RollupAbi,
|
|
144
|
+
functionName: 'initiateWithdraw',
|
|
145
|
+
args: [
|
|
146
|
+
validatorAddress.toString(),
|
|
147
|
+
validatorAddress.toString()
|
|
148
|
+
]
|
|
149
|
+
})
|
|
87
150
|
});
|
|
151
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
88
152
|
}
|
|
89
153
|
export async function pruneRollup({ rpcUrls, chainId, privateKey, mnemonic, rollupAddress, log, debugLogger }) {
|
|
90
154
|
const dualLog = makeDualLog(log, debugLogger);
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
client: walletClient
|
|
155
|
+
const account = getAccount(privateKey, mnemonic);
|
|
156
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
157
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
158
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client, {
|
|
159
|
+
logger: debugLogger
|
|
97
160
|
});
|
|
98
161
|
dualLog(`Trying prune`);
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
162
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
163
|
+
to: rollupAddress.toString(),
|
|
164
|
+
data: encodeFunctionData({
|
|
165
|
+
abi: RollupAbi,
|
|
166
|
+
functionName: 'prune'
|
|
167
|
+
})
|
|
103
168
|
});
|
|
169
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
104
170
|
}
|
|
105
171
|
export async function fastForwardEpochs({ rpcUrls, chainId, rollupAddress, numEpochs, log, debugLogger }) {
|
|
106
172
|
const dualLog = makeDualLog(log, debugLogger);
|
|
107
|
-
const publicClient = getPublicClient(
|
|
173
|
+
const publicClient = getPublicClient({
|
|
174
|
+
l1RpcUrls: rpcUrls,
|
|
175
|
+
l1ChainId: chainId
|
|
176
|
+
});
|
|
108
177
|
const rollup = getContract({
|
|
109
178
|
address: rollupAddress.toString(),
|
|
110
179
|
abi: RollupAbi,
|
|
111
180
|
client: publicClient
|
|
112
181
|
});
|
|
113
|
-
const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
|
|
182
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
114
183
|
const currentSlot = await rollup.read.getCurrentSlot();
|
|
115
184
|
const l2SlotsInEpoch = await rollup.read.getEpochDuration();
|
|
116
185
|
const timestamp = await rollup.read.getTimestampForSlot([
|
|
@@ -118,7 +187,9 @@ export async function fastForwardEpochs({ rpcUrls, chainId, rollupAddress, numEp
|
|
|
118
187
|
]);
|
|
119
188
|
dualLog(`Fast forwarding ${numEpochs} epochs to ${timestamp}`);
|
|
120
189
|
try {
|
|
121
|
-
await cheatCodes.warp(Number(timestamp)
|
|
190
|
+
await cheatCodes.warp(Number(timestamp), {
|
|
191
|
+
resetBlockInterval: true
|
|
192
|
+
});
|
|
122
193
|
dualLog(`Fast forwarded ${numEpochs} epochs to ${timestamp}`);
|
|
123
194
|
} catch (error) {
|
|
124
195
|
if (error instanceof Error && error.message.includes("is lower than or equal to previous block's timestamp")) {
|
|
@@ -131,32 +202,29 @@ export async function fastForwardEpochs({ rpcUrls, chainId, rollupAddress, numEp
|
|
|
131
202
|
}
|
|
132
203
|
export async function debugRollup({ rpcUrls, chainId, rollupAddress, log }) {
|
|
133
204
|
const config = getL1ContractsConfigEnvVars();
|
|
134
|
-
const publicClient = getPublicClient(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
abi: RollupAbi,
|
|
138
|
-
client: publicClient
|
|
205
|
+
const publicClient = getPublicClient({
|
|
206
|
+
l1RpcUrls: rpcUrls,
|
|
207
|
+
l1ChainId: chainId
|
|
139
208
|
});
|
|
140
|
-
const
|
|
209
|
+
const rollup = new RollupContract(publicClient, rollupAddress);
|
|
210
|
+
const pendingNum = await rollup.getBlockNumber();
|
|
141
211
|
log(`Pending block num: ${pendingNum}`);
|
|
142
|
-
const provenNum = await rollup.
|
|
212
|
+
const provenNum = await rollup.getProvenBlockNumber();
|
|
143
213
|
log(`Proven block num: ${provenNum}`);
|
|
144
|
-
const validators = await rollup.
|
|
214
|
+
const validators = await rollup.getAttesters();
|
|
145
215
|
log(`Validators: ${validators.map((v)=>v.toString()).join(', ')}`);
|
|
146
|
-
const committee = await rollup.
|
|
147
|
-
log(`Committee: ${committee
|
|
148
|
-
const archive = await rollup.
|
|
216
|
+
const committee = await rollup.getCurrentEpochCommittee();
|
|
217
|
+
log(`Committee: ${committee?.map((v)=>v.toString()).join(', ')}`);
|
|
218
|
+
const archive = await rollup.archive();
|
|
149
219
|
log(`Archive: ${archive}`);
|
|
150
|
-
const epochNum = await rollup.
|
|
220
|
+
const epochNum = await rollup.getCurrentEpochNumber();
|
|
151
221
|
log(`Current epoch: ${epochNum}`);
|
|
152
|
-
const slot = await rollup.
|
|
222
|
+
const slot = await rollup.getSlotNumber();
|
|
153
223
|
log(`Current slot: ${slot}`);
|
|
154
|
-
const proposerDuringPrevL1Block = await rollup.
|
|
224
|
+
const proposerDuringPrevL1Block = await rollup.getCurrentProposer();
|
|
155
225
|
log(`Proposer during previous L1 block: ${proposerDuringPrevL1Block}`);
|
|
156
226
|
const nextBlockTS = BigInt((await publicClient.getBlock()).timestamp + BigInt(config.ethereumSlotDuration));
|
|
157
|
-
const proposer = await rollup.
|
|
158
|
-
nextBlockTS
|
|
159
|
-
]);
|
|
227
|
+
const proposer = await rollup.getProposerAt(nextBlockTS);
|
|
160
228
|
log(`Proposer NOW: ${proposer.toString()}`);
|
|
161
229
|
}
|
|
162
230
|
function makeDualLog(log, debugLogger) {
|
|
@@ -165,22 +233,10 @@ function makeDualLog(log, debugLogger) {
|
|
|
165
233
|
debugLogger.info(msg);
|
|
166
234
|
};
|
|
167
235
|
}
|
|
168
|
-
function
|
|
169
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
170
|
-
return createPublicClient({
|
|
171
|
-
chain: chain.chainInfo,
|
|
172
|
-
transport: fallback(rpcUrls.map((url)=>http(url)))
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
function getWalletClient(rpcUrls, chainId, privateKey, mnemonic) {
|
|
236
|
+
function getAccount(privateKey, mnemonic) {
|
|
176
237
|
if (!privateKey && !mnemonic) {
|
|
177
238
|
throw new Error('Either privateKey or mnemonic must be provided to create a wallet client');
|
|
178
239
|
}
|
|
179
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
180
240
|
const account = !privateKey ? mnemonicToAccount(mnemonic) : privateKeyToAccount(`${privateKey.startsWith('0x') ? '' : '0x'}${privateKey}`);
|
|
181
|
-
return
|
|
182
|
-
account,
|
|
183
|
-
chain: chain.chainInfo,
|
|
184
|
-
transport: fallback(rpcUrls.map((url)=>http(url)))
|
|
185
|
-
});
|
|
241
|
+
return account;
|
|
186
242
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
-
export declare function generateEncodedBootnodeENR(privateKey: string,
|
|
2
|
+
export declare function generateEncodedBootnodeENR(privateKey: string, p2pIp: string, p2pPort: number, l1ChainId: number, log: LogFn): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=generate_bootnode_enr.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_bootnode_enr.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_bootnode_enr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,
|
|
1
|
+
{"version":3,"file":"generate_bootnode_enr.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_bootnode_enr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,iBAIX"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createBootnodeENRandPeerId } from '@aztec/p2p/enr';
|
|
2
|
-
export async function generateEncodedBootnodeENR(privateKey,
|
|
3
|
-
const { enr } = await createBootnodeENRandPeerId(privateKey,
|
|
2
|
+
export async function generateEncodedBootnodeENR(privateKey, p2pIp, p2pPort, l1ChainId, log) {
|
|
3
|
+
const { enr } = await createBootnodeENRandPeerId(privateKey, p2pIp, p2pPort, l1ChainId);
|
|
4
4
|
log(`ENR: ${enr.encodeTxt()}`);
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_secret_and_hash.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_secret_and_hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,
|
|
1
|
+
{"version":3,"file":"generate_secret_and_hash.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_secret_and_hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,iBAUrD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { computeSecretHash } from '@aztec/aztec.js';
|
|
1
|
+
import { computeSecretHash } from '@aztec/aztec.js/crypto';
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
-
export function generateSecretAndHash(log) {
|
|
3
|
+
export async function generateSecretAndHash(log) {
|
|
4
4
|
const secret = Fr.random();
|
|
5
5
|
// We hash this the same way that aztec nr hash does.
|
|
6
|
-
const secretHash = computeSecretHash(secret);
|
|
6
|
+
const secretHash = await computeSecretHash(secret);
|
|
7
7
|
log(`
|
|
8
8
|
Secret: ${secret}
|
|
9
9
|
Secret hash: ${secretHash}
|