@aztec/cli 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
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 -1
- package/dest/cmds/aztec_node/block_number.d.ts +1 -1
- package/dest/cmds/aztec_node/get_block.d.ts +1 -1
- package/dest/cmds/aztec_node/get_block.d.ts.map +1 -1
- package/dest/cmds/aztec_node/get_block.js +2 -1
- 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_base_fee.js → get_current_min_fee.js} +2 -2
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +1 -1
- package/dest/cmds/aztec_node/get_logs.d.ts +3 -2
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -1
- package/dest/cmds/aztec_node/get_node_info.d.ts +1 -1
- package/dest/cmds/aztec_node/index.d.ts +1 -1
- package/dest/cmds/aztec_node/index.js +3 -3
- package/dest/cmds/contracts/index.d.ts +1 -1
- package/dest/cmds/contracts/inspect_contract.d.ts +1 -1
- package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
- package/dest/cmds/contracts/inspect_contract.js +4 -10
- package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
- package/dest/cmds/infrastructure/index.d.ts +1 -1
- package/dest/cmds/infrastructure/index.d.ts.map +1 -1
- package/dest/cmds/infrastructure/index.js +0 -1
- package/dest/cmds/infrastructure/sequencers.d.ts +1 -2
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +11 -4
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.js +1 -1
- package/dest/cmds/l1/advance_epoch.d.ts +1 -1
- package/dest/cmds/l1/assume_proven_through.d.ts +3 -2
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
- package/dest/cmds/l1/assume_proven_through.js +3 -4
- package/dest/cmds/l1/bridge_erc20.d.ts +1 -1
- package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
- package/dest/cmds/l1/bridge_erc20.js +2 -1
- package/dest/cmds/l1/create_l1_account.d.ts +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
- package/dest/cmds/l1/{deploy_l1_contracts.js → deploy_l1_contracts_cmd.js} +39 -4
- package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -4
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +3 -3
- 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/get_l1_addresses.js +5 -2
- package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
- package/dest/cmds/l1/get_l1_balance.js +4 -2
- package/dest/cmds/l1/governance_utils.d.ts +5 -5
- package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
- package/dest/cmds/l1/governance_utils.js +3 -1
- package/dest/cmds/l1/index.d.ts +1 -2
- package/dest/cmds/l1/index.d.ts.map +1 -1
- package/dest/cmds/l1/index.js +13 -10
- package/dest/cmds/l1/prover_stats.d.ts +1 -1
- package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
- package/dest/cmds/l1/prover_stats.js +32 -30
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts +2 -2
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -1
- package/dest/cmds/l1/trigger_seed_snapshot.js +2 -1
- package/dest/cmds/l1/update_l1_validators.d.ts +7 -7
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +54 -15
- package/dest/cmds/misc/compute_selector.d.ts +1 -1
- package/dest/cmds/misc/example_contracts.d.ts +1 -1
- package/dest/cmds/misc/generate_bootnode_enr.d.ts +1 -1
- package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.js +1 -1
- package/dest/cmds/misc/generate_secret_key.d.ts +1 -1
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +1 -1
- package/dest/cmds/misc/index.d.ts +1 -1
- package/dest/cmds/misc/index.d.ts.map +1 -1
- package/dest/cmds/misc/index.js +1 -1
- package/dest/cmds/misc/update/common.d.ts +1 -1
- package/dest/cmds/misc/update/github.d.ts +1 -1
- package/dest/cmds/misc/update/noir.d.ts +1 -1
- package/dest/cmds/misc/update/npm.d.ts +1 -1
- package/dest/cmds/misc/update/npm.js +1 -1
- package/dest/cmds/misc/update/utils.d.ts +1 -1
- package/dest/cmds/misc/update.d.ts +1 -1
- package/dest/cmds/validator_keys/add.d.ts +1 -1
- package/dest/cmds/validator_keys/add.d.ts.map +1 -1
- package/dest/cmds/validator_keys/add.js +20 -7
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +1 -1
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -1
- package/dest/cmds/validator_keys/generate_bls_keypair.js +3 -2
- package/dest/cmds/validator_keys/index.d.ts +1 -1
- package/dest/cmds/validator_keys/index.d.ts.map +1 -1
- package/dest/cmds/validator_keys/index.js +16 -4
- package/dest/cmds/validator_keys/new.d.ts +7 -4
- package/dest/cmds/validator_keys/new.d.ts.map +1 -1
- package/dest/cmds/validator_keys/new.js +90 -16
- package/dest/cmds/validator_keys/shared.d.ts +4 -4
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -1
- package/dest/cmds/validator_keys/shared.js +31 -28
- 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 +25 -0
- package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
- package/dest/cmds/validator_keys/utils.js +52 -0
- package/dest/config/cached_fetch.d.ts +1 -1
- package/dest/config/chain_l2_config.d.ts +13 -38
- package/dest/config/chain_l2_config.d.ts.map +1 -1
- package/dest/config/chain_l2_config.js +33 -463
- package/dest/config/enrich_env.d.ts +1 -1
- package/dest/config/generated/networks.d.ts +205 -0
- package/dest/config/generated/networks.d.ts.map +1 -0
- package/dest/config/generated/networks.js +206 -0
- package/dest/config/get_l1_config.d.ts +3 -2
- package/dest/config/get_l1_config.d.ts.map +1 -1
- package/dest/config/get_l1_config.js +3 -1
- package/dest/config/index.d.ts +1 -1
- package/dest/config/network_config.d.ts +7 -4
- package/dest/config/network_config.d.ts.map +1 -1
- package/dest/config/network_config.js +65 -29
- package/dest/utils/aztec.d.ts +7 -13
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +19 -40
- package/dest/utils/commands.d.ts +8 -7
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +6 -5
- package/dest/utils/encoding.d.ts +1 -1
- package/dest/utils/encoding.js +1 -1
- package/dest/utils/github.d.ts +1 -1
- package/dest/utils/index.d.ts +1 -1
- package/dest/utils/inspect.d.ts +3 -2
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +4 -1
- package/dest/utils/setup_contracts.d.ts +1 -1
- package/package.json +44 -31
- package/public_include_metric_prefixes.json +1 -0
- package/src/cmds/aztec_node/get_block.ts +2 -1
- package/src/cmds/aztec_node/{get_current_base_fee.ts → get_current_min_fee.ts} +2 -2
- package/src/cmds/aztec_node/get_logs.ts +3 -2
- package/src/cmds/aztec_node/index.ts +3 -3
- package/src/cmds/contracts/inspect_contract.ts +4 -11
- package/src/cmds/infrastructure/index.ts +0 -1
- package/src/cmds/infrastructure/sequencers.ts +7 -5
- package/src/cmds/infrastructure/setup_l2_contract.ts +1 -1
- package/src/cmds/l1/assume_proven_through.ts +4 -4
- package/src/cmds/l1/bridge_erc20.ts +2 -1
- package/src/cmds/l1/{deploy_l1_contracts.ts → deploy_l1_contracts_cmd.ts} +39 -22
- package/src/cmds/l1/deploy_new_rollup.ts +4 -9
- package/src/cmds/l1/get_l1_addresses.ts +4 -2
- package/src/cmds/l1/get_l1_balance.ts +2 -2
- package/src/cmds/l1/governance_utils.ts +3 -8
- package/src/cmds/l1/index.ts +12 -21
- package/src/cmds/l1/prover_stats.ts +42 -31
- package/src/cmds/l1/trigger_seed_snapshot.ts +2 -1
- package/src/cmds/l1/update_l1_validators.ts +48 -27
- package/src/cmds/misc/generate_secret_and_hash.ts +1 -1
- package/src/cmds/misc/index.ts +1 -1
- package/src/cmds/misc/update/npm.ts +1 -1
- package/src/cmds/validator_keys/add.ts +20 -10
- package/src/cmds/validator_keys/generate_bls_keypair.ts +3 -2
- package/src/cmds/validator_keys/index.ts +67 -21
- package/src/cmds/validator_keys/new.ts +110 -23
- package/src/cmds/validator_keys/shared.ts +32 -27
- package/src/cmds/validator_keys/staker.ts +301 -0
- package/src/cmds/validator_keys/utils.ts +81 -0
- package/src/config/chain_l2_config.ts +34 -604
- package/src/config/generated/networks.ts +210 -0
- package/src/config/get_l1_config.ts +4 -1
- package/src/config/network_config.ts +75 -30
- package/src/utils/aztec.ts +24 -83
- package/src/utils/commands.ts +6 -5
- package/src/utils/encoding.ts +1 -1
- package/src/utils/inspect.ts +6 -2
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts +0 -3
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts.map +0 -1
- package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { L1ToL2TokenPortalManager } from '@aztec/aztec.js/ethereum';
|
|
3
3
|
import type { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
-
import { createEthereumChain
|
|
4
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
5
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
5
6
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
6
7
|
|
|
7
8
|
import { prettyPrintJSON } from '../../utils/commands.js';
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
2
2
|
import type { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
-
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum';
|
|
4
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
5
|
+
import { type Operator, deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
5
6
|
import { SecretValue } from '@aztec/foundation/config';
|
|
6
7
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
8
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
7
9
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
8
10
|
|
|
9
|
-
import {
|
|
11
|
+
import { mnemonicToAccount } from 'viem/accounts';
|
|
12
|
+
|
|
13
|
+
import { addLeadingHex } from '../../utils/aztec.js';
|
|
10
14
|
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
|
11
15
|
|
|
12
|
-
export async function
|
|
16
|
+
export async function deployL1ContractsCmd(
|
|
13
17
|
rpcUrls: string[],
|
|
14
18
|
chainId: number,
|
|
15
19
|
privateKey: string | undefined,
|
|
16
20
|
mnemonic: string,
|
|
17
21
|
mnemonicIndex: number,
|
|
18
|
-
salt: number | undefined,
|
|
19
22
|
testAccounts: boolean,
|
|
20
23
|
sponsoredFPC: boolean,
|
|
21
|
-
acceleratedTestDeployments: boolean,
|
|
22
24
|
json: boolean,
|
|
23
|
-
createVerificationJson: string | false,
|
|
24
25
|
initialValidators: EthAddress[],
|
|
25
26
|
realVerifier: boolean,
|
|
26
27
|
existingToken: EthAddress | undefined,
|
|
@@ -29,34 +30,50 @@ export async function deployL1Contracts(
|
|
|
29
30
|
) {
|
|
30
31
|
const config = getL1ContractsConfigEnvVars();
|
|
31
32
|
|
|
33
|
+
// Compute initial accounts for genesis (test accounts + sponsored FPC)
|
|
32
34
|
const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
|
|
33
35
|
const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
|
|
34
36
|
const initialFundedAccounts = initialAccounts.map(a => a.address).concat(sponsoredFPCAddress);
|
|
35
37
|
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
// Get the VK tree root
|
|
40
|
+
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
41
|
+
const vkTreeRoot = getVKTreeRoot();
|
|
42
|
+
|
|
43
|
+
// Get private key (from direct input or mnemonic)
|
|
44
|
+
let deployerPrivateKey: `0x${string}`;
|
|
45
|
+
if (privateKey) {
|
|
46
|
+
deployerPrivateKey = addLeadingHex(privateKey);
|
|
47
|
+
} else {
|
|
48
|
+
const account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
|
|
49
|
+
deployerPrivateKey = `0x${Buffer.from(account.getHdKey().privateKey!).toString('hex')}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Prepare validator operators with bn254 keys
|
|
53
|
+
const initialValidatorOperators: Operator[] = initialValidators.map(a => ({
|
|
38
54
|
attester: a,
|
|
39
55
|
withdrawer: a,
|
|
40
56
|
bn254SecretKey: new SecretValue(Fr.random().toBigInt()),
|
|
41
57
|
}));
|
|
42
58
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
debugLogger.info('Deploying L1 contracts via Forge...');
|
|
60
|
+
|
|
61
|
+
// Deploy using l1-contracts Forge scripts
|
|
62
|
+
const { l1ContractAddresses, rollupVersion } = await deployAztecL1Contracts(rpcUrls[0], deployerPrivateKey, chainId, {
|
|
63
|
+
// Initial validators to add during deployment
|
|
64
|
+
initialValidators: initialValidatorOperators,
|
|
65
|
+
// Genesis config
|
|
66
|
+
vkTreeRoot,
|
|
67
|
+
protocolContractsHash,
|
|
51
68
|
genesisArchiveRoot,
|
|
52
|
-
|
|
53
|
-
acceleratedTestDeployments,
|
|
54
|
-
config,
|
|
55
|
-
existingToken,
|
|
69
|
+
// Deployment options
|
|
56
70
|
realVerifier,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
...config,
|
|
72
|
+
feeJuicePortalInitialBalance: fundingNeeded,
|
|
73
|
+
existingTokenAddress: existingToken,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
debugLogger.info('Forge deployment complete', { rollupVersion });
|
|
60
77
|
|
|
61
78
|
if (json) {
|
|
62
79
|
log(
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing';
|
|
2
|
-
import {
|
|
2
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
3
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
3
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
-
import type { LogFn
|
|
5
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
5
6
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
6
7
|
|
|
7
8
|
import { deployNewRollupContracts } from '../../utils/aztec.js';
|
|
@@ -14,15 +15,12 @@ export async function deployNewRollup(
|
|
|
14
15
|
privateKey: string | undefined,
|
|
15
16
|
mnemonic: string,
|
|
16
17
|
mnemonicIndex: number,
|
|
17
|
-
salt: number | undefined,
|
|
18
18
|
testAccounts: boolean,
|
|
19
19
|
sponsoredFPC: boolean,
|
|
20
20
|
json: boolean,
|
|
21
21
|
initialValidators: Operator[],
|
|
22
22
|
realVerifier: boolean,
|
|
23
|
-
createVerificationJson: string | false,
|
|
24
23
|
log: LogFn,
|
|
25
|
-
debugLogger: Logger,
|
|
26
24
|
) {
|
|
27
25
|
const config = getL1ContractsConfigEnvVars();
|
|
28
26
|
|
|
@@ -34,18 +32,15 @@ export async function deployNewRollup(
|
|
|
34
32
|
const { rollup, slashFactoryAddress } = await deployNewRollupContracts(
|
|
35
33
|
registryAddress,
|
|
36
34
|
rpcUrls,
|
|
37
|
-
chainId,
|
|
38
35
|
privateKey,
|
|
36
|
+
chainId,
|
|
39
37
|
mnemonic,
|
|
40
38
|
mnemonicIndex,
|
|
41
|
-
salt,
|
|
42
39
|
initialValidators,
|
|
43
40
|
genesisArchiveRoot,
|
|
44
41
|
fundingNeeded,
|
|
45
42
|
config,
|
|
46
43
|
realVerifier,
|
|
47
|
-
createVerificationJson,
|
|
48
|
-
debugLogger,
|
|
49
44
|
);
|
|
50
45
|
|
|
51
46
|
if (json) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import {
|
|
2
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
3
|
+
import { RegistryContract } from '@aztec/ethereum/contracts';
|
|
4
|
+
import type { ViemPublicClient } from '@aztec/ethereum/types';
|
|
3
5
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
6
|
|
|
5
7
|
import { createPublicClient, fallback, http } from 'viem';
|
|
@@ -15,7 +17,7 @@ export async function getL1Addresses(
|
|
|
15
17
|
const chain = createEthereumChain(rpcUrls, chainId);
|
|
16
18
|
const publicClient: ViemPublicClient = createPublicClient({
|
|
17
19
|
chain: chain.chainInfo,
|
|
18
|
-
transport: fallback(rpcUrls.map(url => http(url))),
|
|
20
|
+
transport: fallback(rpcUrls.map(url => http(url, { batch: false }))),
|
|
19
21
|
pollingInterval: 100,
|
|
20
22
|
});
|
|
21
23
|
const addresses = await RegistryContract.collectAddresses(publicClient, registryAddress.toString(), rollupVersion);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createEthereumChain } from '@aztec/ethereum';
|
|
1
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
4
|
import { TestERC20Abi } from '@aztec/l1-artifacts';
|
|
@@ -18,7 +18,7 @@ export async function getL1Balance(
|
|
|
18
18
|
const chain = createEthereumChain(l1RpcUrls, chainId);
|
|
19
19
|
const publicClient = createPublicClient({
|
|
20
20
|
chain: chain.chainInfo,
|
|
21
|
-
transport: fallback(l1RpcUrls.map(url => http(url))),
|
|
21
|
+
transport: fallback(l1RpcUrls.map(url => http(url, { batch: false }))),
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
let balance = 0n;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
ProposalState,
|
|
5
|
-
RegistryContract,
|
|
6
|
-
createEthereumChain,
|
|
7
|
-
createExtendedL1Client,
|
|
8
|
-
} from '@aztec/ethereum';
|
|
1
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
3
|
+
import { FeeJuiceContract, GovernanceContract, ProposalState, RegistryContract } from '@aztec/ethereum/contracts';
|
|
9
4
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
10
5
|
|
|
11
6
|
export async function depositGovernanceTokens({
|
package/src/cmds/l1/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
4
|
|
|
4
5
|
import { type Command, Option } from 'commander';
|
|
5
6
|
|
|
6
|
-
import { getL1RollupAddressFromEnv } from '../../config/get_l1_config.js';
|
|
7
7
|
import {
|
|
8
8
|
ETHEREUM_HOSTS,
|
|
9
9
|
MNEMONIC,
|
|
@@ -15,8 +15,6 @@ import {
|
|
|
15
15
|
parseEthereumAddress,
|
|
16
16
|
} from '../../utils/commands.js';
|
|
17
17
|
|
|
18
|
-
export { addL1Validator } from './update_l1_validators.js';
|
|
19
|
-
|
|
20
18
|
const l1RpcUrlsOption = new Option(
|
|
21
19
|
'--l1-rpc-urls <string>',
|
|
22
20
|
'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)',
|
|
@@ -42,31 +40,25 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
42
40
|
)
|
|
43
41
|
.option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
|
|
44
42
|
.addOption(l1ChainIdOption)
|
|
45
|
-
.option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
|
|
46
43
|
.option('--json', 'Output the contract addresses in JSON format')
|
|
47
44
|
.option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
|
|
48
45
|
.option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
|
|
49
|
-
.option('--accelerated-test-deployments', 'Fire and forget deployment transactions, use in testing only', false)
|
|
50
46
|
.option('--real-verifier', 'Deploy the real verifier', false)
|
|
51
47
|
.option('--existing-token <address>', 'Use an existing ERC20 for both fee and staking', parseEthereumAddress)
|
|
52
|
-
.option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
|
|
53
48
|
.action(async options => {
|
|
54
|
-
const {
|
|
49
|
+
const { deployL1ContractsCmd } = await import('./deploy_l1_contracts_cmd.js');
|
|
55
50
|
|
|
56
51
|
const initialValidators =
|
|
57
52
|
options.validators?.split(',').map((validator: string) => EthAddress.fromString(validator)) || [];
|
|
58
|
-
await
|
|
53
|
+
await deployL1ContractsCmd(
|
|
59
54
|
options.l1RpcUrls,
|
|
60
55
|
options.l1ChainId,
|
|
61
56
|
options.privateKey,
|
|
62
57
|
options.mnemonic,
|
|
63
58
|
options.mnemonicIndex,
|
|
64
|
-
options.salt,
|
|
65
59
|
options.testAccounts,
|
|
66
60
|
options.sponsoredFpc,
|
|
67
|
-
options.acceleratedTestDeployments,
|
|
68
61
|
options.json,
|
|
69
|
-
options.createVerificationJson,
|
|
70
62
|
initialValidators,
|
|
71
63
|
options.realVerifier,
|
|
72
64
|
options.existingToken,
|
|
@@ -89,12 +81,10 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
89
81
|
)
|
|
90
82
|
.option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
|
|
91
83
|
.addOption(l1ChainIdOption)
|
|
92
|
-
.option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
|
|
93
84
|
.option('--json', 'Output the contract addresses in JSON format')
|
|
94
85
|
.option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
|
|
95
86
|
.option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
|
|
96
87
|
.option('--real-verifier', 'Deploy the real verifier', false)
|
|
97
|
-
.option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
|
|
98
88
|
.action(async options => {
|
|
99
89
|
const { deployNewRollup } = await import('./deploy_new_rollup.js');
|
|
100
90
|
|
|
@@ -107,15 +97,12 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
107
97
|
options.privateKey,
|
|
108
98
|
options.mnemonic,
|
|
109
99
|
options.mnemonicIndex,
|
|
110
|
-
options.salt,
|
|
111
100
|
options.testAccounts,
|
|
112
101
|
options.sponsoredFpc,
|
|
113
102
|
options.json,
|
|
114
103
|
initialValidators,
|
|
115
104
|
options.realVerifier,
|
|
116
|
-
options.createVerificationJson,
|
|
117
105
|
log,
|
|
118
|
-
debugLogger,
|
|
119
106
|
);
|
|
120
107
|
});
|
|
121
108
|
|
|
@@ -313,7 +300,11 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
313
300
|
.action(async options => {
|
|
314
301
|
const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
|
|
315
302
|
|
|
316
|
-
|
|
303
|
+
let rollupAddress = options.rollup;
|
|
304
|
+
if (!rollupAddress) {
|
|
305
|
+
const { getL1RollupAddressFromEnv } = await import('../../config/get_l1_config.js');
|
|
306
|
+
rollupAddress = await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
|
|
307
|
+
}
|
|
317
308
|
|
|
318
309
|
await addL1ValidatorViaRollup({
|
|
319
310
|
rpcUrls: options.l1RpcUrls,
|
|
@@ -507,14 +498,14 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
|
|
|
507
498
|
program
|
|
508
499
|
.command('set-proven-through', { hidden: true })
|
|
509
500
|
.description(
|
|
510
|
-
'Instructs the L1 rollup contract to assume all blocks until the given
|
|
501
|
+
'Instructs the L1 rollup contract to assume all blocks until the given checkpoint are automatically proven.',
|
|
511
502
|
)
|
|
512
|
-
.argument('[
|
|
503
|
+
.argument('[checkpoint]', 'The target checkpoint, defaults to the latest pending checkpoint.', parseBigint)
|
|
513
504
|
.addOption(l1RpcUrlsOption)
|
|
514
505
|
.addOption(nodeOption)
|
|
515
|
-
.action(async (
|
|
506
|
+
.action(async (checkpoint, options) => {
|
|
516
507
|
const { assumeProvenThrough } = await import('./assume_proven_through.js');
|
|
517
|
-
await assumeProvenThrough(
|
|
508
|
+
await assumeProvenThrough(CheckpointNumber.fromBigInt(checkpoint), options.l1RpcUrls, options.nodeUrl, log);
|
|
518
509
|
});
|
|
519
510
|
|
|
520
511
|
program
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { retrieveL2ProofVerifiedEvents } from '@aztec/archiver';
|
|
2
|
-
import {
|
|
2
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
3
|
+
import type { ViemPublicClient } from '@aztec/ethereum/types';
|
|
3
4
|
import { compactArray, mapValues, unique } from '@aztec/foundation/collection';
|
|
4
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
6
|
import { type LogFn, type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -46,7 +47,10 @@ export async function proverStats(opts: {
|
|
|
46
47
|
.then(a => a.rollupAddress);
|
|
47
48
|
|
|
48
49
|
const chain = createEthereumChain(l1RpcUrls, chainId).chainInfo;
|
|
49
|
-
const publicClient = createPublicClient({
|
|
50
|
+
const publicClient = createPublicClient({
|
|
51
|
+
chain,
|
|
52
|
+
transport: fallback(l1RpcUrls.map(url => http(url, { batch: false }))),
|
|
53
|
+
});
|
|
50
54
|
const lastBlockNum = endBlock ?? (await publicClient.getBlockNumber());
|
|
51
55
|
debugLog.verbose(`Querying events on rollup at ${rollup.toString()} from ${startBlock} up to ${lastBlockNum}`);
|
|
52
56
|
|
|
@@ -55,33 +59,40 @@ export async function proverStats(opts: {
|
|
|
55
59
|
|
|
56
60
|
// If we only care for raw logs, output them
|
|
57
61
|
if (rawLogs && !provingTimeout) {
|
|
58
|
-
log(`l1_block_number,
|
|
62
|
+
log(`l1_block_number, checkpoint_number, prover_id, tx_hash`);
|
|
59
63
|
for (const event of events) {
|
|
60
|
-
const { l1BlockNumber,
|
|
61
|
-
log(`${l1BlockNumber}, ${
|
|
64
|
+
const { l1BlockNumber, checkpointNumber, proverId, txHash } = event;
|
|
65
|
+
log(`${l1BlockNumber}, ${checkpointNumber}, ${proverId}, ${txHash}`);
|
|
62
66
|
}
|
|
63
67
|
return;
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
// If we don't have a proving timeout, we can just count the number of unique
|
|
70
|
+
// If we don't have a proving timeout, we can just count the number of unique checkpoints per prover
|
|
67
71
|
if (!provingTimeout) {
|
|
68
72
|
const stats = groupBy(events, 'proverId');
|
|
69
|
-
log(`prover_id,
|
|
73
|
+
log(`prover_id, total_checkpoints_proven`);
|
|
70
74
|
for (const proverId in stats) {
|
|
71
|
-
const
|
|
72
|
-
log(`${proverId}, ${
|
|
75
|
+
const uniqueCheckpoints = new Set(stats[proverId].map(e => e.checkpointNumber));
|
|
76
|
+
log(`${proverId}, ${uniqueCheckpoints.size}`);
|
|
73
77
|
}
|
|
74
78
|
return;
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
// But if we do, fetch the events for each
|
|
78
|
-
const
|
|
81
|
+
// But if we do, fetch the events for each checkpoint submitted, so we can look up their timestamp
|
|
82
|
+
const checkpointEvents = await getCheckpointProposedEvents(
|
|
83
|
+
startBlock,
|
|
84
|
+
lastBlockNum,
|
|
85
|
+
batchSize,
|
|
86
|
+
debugLog,
|
|
87
|
+
publicClient,
|
|
88
|
+
rollup,
|
|
89
|
+
);
|
|
79
90
|
debugLog.verbose(
|
|
80
|
-
`First
|
|
91
|
+
`First checkpoint within range is ${checkpointEvents[0]?.args.checkpointNumber} at L1 block ${checkpointEvents[0]?.blockNumber}`,
|
|
81
92
|
);
|
|
82
93
|
|
|
83
94
|
// Get the timestamps for every block on every log, both for proof and block submissions
|
|
84
|
-
const l1BlockNumbers = unique([...events.map(e => e.l1BlockNumber), ...
|
|
95
|
+
const l1BlockNumbers = unique([...events.map(e => e.l1BlockNumber), ...checkpointEvents.map(e => e.blockNumber)]);
|
|
85
96
|
const l1BlockTimestamps: Record<string, bigint> = {};
|
|
86
97
|
for (const l1Batch of chunk(l1BlockNumbers, Number(batchSize))) {
|
|
87
98
|
const blocks = await Promise.all(
|
|
@@ -93,44 +104,44 @@ export async function proverStats(opts: {
|
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
106
|
|
|
96
|
-
// Map from
|
|
97
|
-
const
|
|
98
|
-
for (const
|
|
99
|
-
|
|
107
|
+
// Map from checkpoint number to the l1 block in which it was submitted
|
|
108
|
+
const checkpointSubmissions: Record<string, bigint> = {};
|
|
109
|
+
for (const checkpointEvent of checkpointEvents) {
|
|
110
|
+
checkpointSubmissions[checkpointEvent.args.checkpointNumber!.toString()] = checkpointEvent.blockNumber;
|
|
100
111
|
}
|
|
101
112
|
|
|
102
113
|
// If we want raw logs, output them
|
|
103
114
|
if (rawLogs) {
|
|
104
|
-
log(`l1_block_number,
|
|
115
|
+
log(`l1_block_number, checkpoint_number, checkpoint_submission_timestamp, proof_timestamp, prover_id, tx_hash`);
|
|
105
116
|
for (const event of events) {
|
|
106
|
-
const { l1BlockNumber,
|
|
107
|
-
const uploadedBlockNumber =
|
|
117
|
+
const { l1BlockNumber, checkpointNumber, proverId, txHash } = event;
|
|
118
|
+
const uploadedBlockNumber = checkpointSubmissions[checkpointNumber.toString()];
|
|
108
119
|
if (!uploadedBlockNumber) {
|
|
109
120
|
continue;
|
|
110
121
|
}
|
|
111
122
|
const uploadedTimestamp = l1BlockTimestamps[uploadedBlockNumber.toString()];
|
|
112
123
|
const provenTimestamp = l1BlockTimestamps[l1BlockNumber.toString()];
|
|
113
|
-
log(`${l1BlockNumber}, ${
|
|
124
|
+
log(`${l1BlockNumber}, ${checkpointNumber}, ${uploadedTimestamp}, ${provenTimestamp}, ${proverId}, ${txHash}`);
|
|
114
125
|
}
|
|
115
126
|
return;
|
|
116
127
|
}
|
|
117
128
|
|
|
118
129
|
// Or calculate stats per prover
|
|
119
|
-
const stats = mapValues(groupBy(events, 'proverId'), (
|
|
130
|
+
const stats = mapValues(groupBy(events, 'proverId'), (checkpoints, proverId) =>
|
|
120
131
|
compactArray(
|
|
121
|
-
|
|
132
|
+
checkpoints.map(e => {
|
|
122
133
|
const provenTimestamp = l1BlockTimestamps[e.l1BlockNumber.toString()];
|
|
123
|
-
const uploadedBlockNumber =
|
|
134
|
+
const uploadedBlockNumber = checkpointSubmissions[e.checkpointNumber.toString()];
|
|
124
135
|
if (!uploadedBlockNumber) {
|
|
125
136
|
debugLog.verbose(
|
|
126
|
-
`Skipping ${proverId}'s proof for
|
|
137
|
+
`Skipping ${proverId}'s proof for checkpoint ${e.checkpointNumber} as it was before the start block`,
|
|
127
138
|
);
|
|
128
139
|
return undefined;
|
|
129
140
|
}
|
|
130
141
|
const uploadedTimestamp = l1BlockTimestamps[uploadedBlockNumber.toString()];
|
|
131
142
|
const provingTime = provenTimestamp - uploadedTimestamp;
|
|
132
143
|
debugLog.debug(
|
|
133
|
-
`prover=${e.proverId}
|
|
144
|
+
`prover=${e.proverId} checkpointNumber=${e.checkpointNumber} uploaded=${uploadedTimestamp} proven=${provenTimestamp} time=${provingTime}`,
|
|
134
145
|
);
|
|
135
146
|
return { provenTimestamp, uploadedTimestamp, provingTime, ...e };
|
|
136
147
|
}),
|
|
@@ -141,8 +152,8 @@ export async function proverStats(opts: {
|
|
|
141
152
|
for (const proverId in stats) {
|
|
142
153
|
const blocks = stats[proverId];
|
|
143
154
|
const withinTimeout = blocks.filter(b => b.provingTime <= provingTimeout);
|
|
144
|
-
const uniqueBlocksWithinTimeout = new Set(withinTimeout.map(e => e.
|
|
145
|
-
const uniqueBlocks = new Set(blocks.map(e => e.
|
|
155
|
+
const uniqueBlocksWithinTimeout = new Set(withinTimeout.map(e => e.checkpointNumber));
|
|
156
|
+
const uniqueBlocks = new Set(blocks.map(e => e.checkpointNumber));
|
|
146
157
|
const avgProvingTime =
|
|
147
158
|
blocks.length === 0 ? 0 : Math.ceil(Number(blocks.reduce((acc, b) => acc + b.provingTime, 0n)) / blocks.length);
|
|
148
159
|
|
|
@@ -171,7 +182,7 @@ async function getL2ProofVerifiedEvents(
|
|
|
171
182
|
return events;
|
|
172
183
|
}
|
|
173
184
|
|
|
174
|
-
async function
|
|
185
|
+
async function getCheckpointProposedEvents(
|
|
175
186
|
startBlock: bigint,
|
|
176
187
|
lastBlockNum: bigint,
|
|
177
188
|
batchSize: bigint,
|
|
@@ -188,14 +199,14 @@ async function getL2BlockEvents(
|
|
|
188
199
|
address: getAddress(rollup.toString()),
|
|
189
200
|
event: getAbiItem({
|
|
190
201
|
abi: RollupAbi,
|
|
191
|
-
name: '
|
|
202
|
+
name: 'CheckpointProposed',
|
|
192
203
|
}),
|
|
193
204
|
fromBlock: blockNum,
|
|
194
205
|
toBlock: end,
|
|
195
206
|
});
|
|
196
207
|
|
|
197
208
|
events.push(...newEvents);
|
|
198
|
-
debugLog.verbose(`Got ${newEvents.length} events querying
|
|
209
|
+
debugLog.verbose(`Got ${newEvents.length} events querying checkpoints submitted from block ${blockNum} to ${end}`);
|
|
199
210
|
blockNum += batchSize;
|
|
200
211
|
}
|
|
201
212
|
return events;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createEthereumChain
|
|
1
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
2
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
3
4
|
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
4
5
|
|
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
createL1TxUtilsFromViemWallet,
|
|
7
|
-
getL1ContractsConfigEnvVars,
|
|
8
|
-
getPublicClient,
|
|
9
|
-
isAnvilTestChain,
|
|
10
|
-
} from '@aztec/ethereum';
|
|
1
|
+
import { createEthereumChain, isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
2
|
+
import { createExtendedL1Client, getPublicClient } from '@aztec/ethereum/client';
|
|
3
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
4
|
+
import { GSEContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
5
|
+
import { createL1TxUtilsFromViemWallet } from '@aztec/ethereum/l1-tx-utils';
|
|
11
6
|
import { EthCheatCodes } from '@aztec/ethereum/test';
|
|
12
7
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
13
8
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
14
9
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
15
|
-
import { RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
|
|
10
|
+
import { RollupAbi, StakingAssetHandlerAbi, TestERC20Abi } from '@aztec/l1-artifacts';
|
|
16
11
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
17
12
|
|
|
18
|
-
import { encodeFunctionData, formatEther, getContract } from 'viem';
|
|
13
|
+
import { encodeFunctionData, formatEther, getContract, maxUint256 } from 'viem';
|
|
19
14
|
import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
20
15
|
|
|
21
|
-
import { addLeadingHex } from '../../utils/aztec.js';
|
|
22
|
-
|
|
23
16
|
export interface RollupCommandArgs {
|
|
24
17
|
rpcUrls: string[];
|
|
25
18
|
chainId: number;
|
|
@@ -58,8 +51,8 @@ export async function addL1Validator({
|
|
|
58
51
|
privateKey,
|
|
59
52
|
mnemonic,
|
|
60
53
|
attesterAddress,
|
|
54
|
+
withdrawerAddress,
|
|
61
55
|
stakingAssetHandlerAddress,
|
|
62
|
-
merkleProof,
|
|
63
56
|
proofParams,
|
|
64
57
|
blsSecretKey,
|
|
65
58
|
log,
|
|
@@ -68,8 +61,8 @@ export async function addL1Validator({
|
|
|
68
61
|
LoggerArgs & {
|
|
69
62
|
blsSecretKey: bigint; // scalar field element of BN254
|
|
70
63
|
attesterAddress: EthAddress;
|
|
64
|
+
withdrawerAddress: EthAddress;
|
|
71
65
|
proofParams: Buffer;
|
|
72
|
-
merkleProof: string[];
|
|
73
66
|
}) {
|
|
74
67
|
const dualLog = makeDualLog(log, debugLogger);
|
|
75
68
|
const account = getAccount(privateKey, mnemonic);
|
|
@@ -92,33 +85,61 @@ export async function addL1Validator({
|
|
|
92
85
|
});
|
|
93
86
|
|
|
94
87
|
const gseAddress = await rollup.read.getGSE();
|
|
95
|
-
|
|
96
88
|
const gse = new GSEContract(l1Client, gseAddress);
|
|
97
|
-
|
|
98
89
|
const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
|
|
99
90
|
|
|
100
91
|
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client, { logger: debugLogger });
|
|
101
92
|
const proofParamsObj = ZkPassportProofParams.fromBuffer(proofParams);
|
|
102
|
-
const merkleProofArray = merkleProof.map(proof => addLeadingHex(proof));
|
|
103
93
|
|
|
104
|
-
|
|
94
|
+
// Step 1: Claim STK tokens from the faucet
|
|
95
|
+
dualLog(`Claiming STK tokens from faucet`);
|
|
96
|
+
const { receipt: claimReceipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
105
97
|
to: stakingAssetHandlerAddress.toString(),
|
|
106
98
|
data: encodeFunctionData({
|
|
107
99
|
abi: StakingAssetHandlerAbi,
|
|
108
|
-
functionName: '
|
|
100
|
+
functionName: 'claim',
|
|
101
|
+
args: [proofParamsObj.toViem()],
|
|
102
|
+
}),
|
|
103
|
+
abi: StakingAssetHandlerAbi,
|
|
104
|
+
});
|
|
105
|
+
dualLog(`Claim transaction hash: ${claimReceipt.transactionHash}`);
|
|
106
|
+
await l1Client.waitForTransactionReceipt({ hash: claimReceipt.transactionHash });
|
|
107
|
+
|
|
108
|
+
// Step 2: Approve the rollup to spend STK tokens
|
|
109
|
+
const stakingAssetAddress = await stakingAssetHandler.read.STAKING_ASSET();
|
|
110
|
+
dualLog(`Approving rollup to spend STK tokens`);
|
|
111
|
+
const { receipt: approveReceipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
112
|
+
to: stakingAssetAddress,
|
|
113
|
+
data: encodeFunctionData({
|
|
114
|
+
abi: TestERC20Abi,
|
|
115
|
+
functionName: 'approve',
|
|
116
|
+
args: [rollupAddress, maxUint256],
|
|
117
|
+
}),
|
|
118
|
+
abi: TestERC20Abi,
|
|
119
|
+
});
|
|
120
|
+
await l1Client.waitForTransactionReceipt({ hash: approveReceipt.transactionHash });
|
|
121
|
+
|
|
122
|
+
// Step 3: Deposit into the rollup to register as a validator
|
|
123
|
+
dualLog(`Depositing into rollup to register validator`);
|
|
124
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
125
|
+
to: rollupAddress,
|
|
126
|
+
data: encodeFunctionData({
|
|
127
|
+
abi: RollupAbi,
|
|
128
|
+
functionName: 'deposit',
|
|
109
129
|
args: [
|
|
110
130
|
attesterAddress.toString(),
|
|
111
|
-
|
|
112
|
-
proofParamsObj.toViem(),
|
|
131
|
+
withdrawerAddress.toString(),
|
|
113
132
|
registrationTuple.publicKeyInG1,
|
|
114
133
|
registrationTuple.publicKeyInG2,
|
|
115
134
|
registrationTuple.proofOfPossession,
|
|
135
|
+
false, // moveWithLatestRollup
|
|
116
136
|
],
|
|
117
137
|
}),
|
|
118
|
-
abi:
|
|
138
|
+
abi: RollupAbi,
|
|
119
139
|
});
|
|
120
|
-
dualLog(`
|
|
140
|
+
dualLog(`Deposit transaction hash: ${receipt.transactionHash}`);
|
|
121
141
|
await l1Client.waitForTransactionReceipt({ hash: receipt.transactionHash });
|
|
142
|
+
|
|
122
143
|
if (isAnvilTestChain(chainId)) {
|
|
123
144
|
dualLog(`Funding validator on L1`);
|
|
124
145
|
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
@@ -299,9 +320,9 @@ export async function debugRollup({ rpcUrls, chainId, rollupAddress, log }: Roll
|
|
|
299
320
|
const publicClient = getPublicClient({ l1RpcUrls: rpcUrls, l1ChainId: chainId });
|
|
300
321
|
const rollup = new RollupContract(publicClient, rollupAddress);
|
|
301
322
|
|
|
302
|
-
const pendingNum = await rollup.
|
|
323
|
+
const pendingNum = await rollup.getCheckpointNumber();
|
|
303
324
|
log(`Pending block num: ${pendingNum}`);
|
|
304
|
-
const provenNum = await rollup.
|
|
325
|
+
const provenNum = await rollup.getProvenCheckpointNumber();
|
|
305
326
|
log(`Proven block num: ${provenNum}`);
|
|
306
327
|
const validators = await rollup.getAttesters();
|
|
307
328
|
log(`Validators: ${validators.map(v => v.toString()).join(', ')}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computeSecretHash } from '@aztec/aztec.js/crypto';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
4
|
|
|
5
5
|
export async function generateSecretAndHash(log: LogFn) {
|
package/src/cmds/misc/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
-
import { printENR } from '@aztec/p2p/enr';
|
|
3
2
|
|
|
4
3
|
import type { Command } from 'commander';
|
|
5
4
|
|
|
@@ -49,6 +48,7 @@ export function injectCommands(program: Command, log: LogFn) {
|
|
|
49
48
|
.description('Decodes and ENR record')
|
|
50
49
|
.argument('<enr>', 'The encoded ENR string')
|
|
51
50
|
.action(async (enr: string) => {
|
|
51
|
+
const { printENR } = await import('@aztec/p2p/enr');
|
|
52
52
|
await printENR(enr, log);
|
|
53
53
|
});
|
|
54
54
|
|