@aztec/cli 0.0.0-test.1 → 0.0.1-commit.017a351
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 +2 -428
- package/dest/cmds/aztec_node/block_number.d.ts +3 -0
- package/dest/cmds/aztec_node/block_number.d.ts.map +1 -0
- package/dest/cmds/aztec_node/block_number.js +10 -0
- package/dest/cmds/aztec_node/get_block.d.ts +3 -0
- package/dest/cmds/aztec_node/get_block.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_block.js +10 -0
- package/dest/cmds/aztec_node/get_current_min_fee.d.ts +3 -0
- package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_current_min_fee.js +7 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +5 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.js +12 -0
- package/dest/cmds/aztec_node/get_logs.d.ts +33 -0
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_logs.js +61 -0
- package/dest/cmds/aztec_node/get_node_info.d.ts +3 -0
- package/dest/cmds/aztec_node/get_node_info.d.ts.map +1 -0
- package/dest/cmds/{pxe → aztec_node}/get_node_info.js +13 -16
- package/dest/cmds/aztec_node/index.d.ts +4 -0
- package/dest/cmds/aztec_node/index.d.ts.map +1 -0
- package/dest/cmds/aztec_node/index.js +38 -0
- package/dest/cmds/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 +13 -15
- package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
- package/dest/cmds/infrastructure/index.d.ts +3 -3
- package/dest/cmds/infrastructure/index.d.ts.map +1 -1
- package/dest/cmds/infrastructure/index.js +8 -10
- package/dest/cmds/infrastructure/sequencers.d.ts +5 -6
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +38 -18
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +2 -2
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.js +15 -23
- package/dest/cmds/l1/advance_epoch.d.ts +2 -2
- 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 +3 -2
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
- package/dest/cmds/l1/assume_proven_through.js +10 -10
- package/dest/cmds/l1/bridge_erc20.d.ts +3 -3
- package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
- package/dest/cmds/l1/bridge_erc20.js +6 -5
- package/dest/cmds/l1/compute_genesis_values.d.ts +4 -0
- package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
- package/dest/cmds/l1/compute_genesis_values.js +17 -0
- package/dest/cmds/l1/create_l1_account.d.ts +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_cmd.js +80 -0
- package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -3
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +16 -9
- package/dest/cmds/l1/get_l1_addresses.d.ts +2 -2
- 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 +19 -17
- package/dest/cmds/l1/index.d.ts +1 -1
- package/dest/cmds/l1/index.d.ts.map +1 -1
- package/dest/cmds/l1/index.js +41 -44
- 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 +6 -0
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
- package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
- package/dest/cmds/l1/update_l1_validators.d.ts +21 -6
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +198 -104
- 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 +2 -2
- 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_p2p_private_key.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.d.ts +2 -2
- package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.js +4 -4
- package/dest/cmds/misc/generate_secret_key.d.ts +2 -2
- 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 +1 -1
- package/dest/cmds/misc/index.d.ts.map +1 -1
- package/dest/cmds/misc/index.js +8 -4
- package/dest/cmds/misc/update/common.d.ts +1 -1
- package/dest/cmds/misc/update/github.d.ts +1 -2
- 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/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/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 +83 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
- package/dest/cmds/validator_keys/index.d.ts +4 -0
- package/dest/cmds/validator_keys/index.d.ts.map +1 -0
- package/dest/cmds/validator_keys/index.js +32 -0
- package/dest/cmds/validator_keys/new.d.ts +29 -0
- package/dest/cmds/validator_keys/new.d.ts.map +1 -0
- package/dest/cmds/validator_keys/new.js +134 -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 +274 -0
- package/dest/cmds/validator_keys/staker.d.ts +38 -0
- package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
- package/dest/cmds/validator_keys/staker.js +210 -0
- package/dest/cmds/validator_keys/utils.d.ts +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 +27 -0
- package/dest/config/cached_fetch.d.ts.map +1 -0
- package/dest/config/cached_fetch.js +132 -0
- package/dest/config/chain_l2_config.d.ts +14 -0
- package/dest/config/chain_l2_config.d.ts.map +1 -0
- package/dest/config/chain_l2_config.js +47 -0
- package/dest/config/enrich_env.d.ts +4 -0
- package/dest/config/enrich_env.d.ts.map +1 -0
- package/dest/config/enrich_env.js +12 -0
- package/dest/config/generated/networks.d.ts +221 -0
- package/dest/config/generated/networks.d.ts.map +1 -0
- package/dest/config/generated/networks.js +222 -0
- package/dest/config/get_l1_config.d.ts +9 -0
- package/dest/config/get_l1_config.d.ts.map +1 -0
- package/dest/config/get_l1_config.js +24 -0
- package/dest/config/index.d.ts +5 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +4 -0
- package/dest/config/network_config.d.ts +22 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +119 -0
- package/dest/utils/aztec.d.ts +14 -26
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +54 -71
- package/dest/utils/commands.d.ts +34 -17
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +61 -24
- package/dest/utils/encoding.d.ts +1 -1
- package/dest/utils/encoding.js +2 -2
- package/dest/utils/github.d.ts +1 -2
- package/dest/utils/github.d.ts.map +1 -1
- package/dest/utils/github.js +0 -1
- package/dest/utils/index.d.ts +2 -1
- package/dest/utils/index.d.ts.map +1 -1
- package/dest/utils/index.js +1 -0
- package/dest/utils/inspect.d.ts +5 -11
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +30 -117
- 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 +61 -37
- package/public_include_metric_prefixes.json +1 -0
- package/src/cmds/aztec_node/block_number.ts +9 -0
- package/src/cmds/aztec_node/get_block.ts +11 -0
- package/src/cmds/aztec_node/get_current_min_fee.ts +9 -0
- package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
- package/src/cmds/aztec_node/get_logs.ts +100 -0
- package/src/cmds/{pxe → aztec_node}/get_node_info.ts +15 -25
- package/src/cmds/aztec_node/index.ts +92 -0
- package/src/cmds/contracts/inspect_contract.ts +20 -17
- package/src/cmds/infrastructure/index.ts +8 -11
- package/src/cmds/infrastructure/sequencers.ts +41 -22
- package/src/cmds/infrastructure/setup_l2_contract.ts +18 -25
- package/src/cmds/l1/advance_epoch.ts +7 -5
- package/src/cmds/l1/assume_proven_through.ts +11 -10
- package/src/cmds/l1/bridge_erc20.ts +8 -4
- package/src/cmds/l1/compute_genesis_values.ts +29 -0
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +106 -0
- package/src/cmds/l1/deploy_new_rollup.ts +22 -15
- package/src/cmds/l1/get_l1_addresses.ts +5 -3
- package/src/cmds/l1/get_l1_balance.ts +2 -2
- package/src/cmds/l1/governance_utils.ts +20 -24
- package/src/cmds/l1/index.ts +95 -113
- package/src/cmds/l1/prover_stats.ts +42 -31
- package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
- package/src/cmds/l1/update_l1_validators.ts +218 -98
- package/src/cmds/misc/generate_bootnode_enr.ts +3 -2
- package/src/cmds/misc/generate_secret_and_hash.ts +4 -4
- 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 +14 -5
- package/src/cmds/misc/update/github.ts +0 -1
- package/src/cmds/misc/update/npm.ts +1 -1
- package/src/cmds/misc/update.ts +1 -7
- package/src/cmds/validator_keys/add.ts +123 -0
- package/src/cmds/validator_keys/generate_bls_keypair.ts +34 -0
- package/src/cmds/validator_keys/index.ts +142 -0
- package/src/cmds/validator_keys/new.ts +207 -0
- package/src/cmds/validator_keys/shared.ts +326 -0
- package/src/cmds/validator_keys/staker.ts +301 -0
- package/src/cmds/validator_keys/utils.ts +81 -0
- package/src/config/cached_fetch.ts +155 -0
- package/src/config/chain_l2_config.ts +59 -0
- package/src/config/enrich_env.ts +15 -0
- package/src/config/generated/networks.ts +226 -0
- package/src/config/get_l1_config.ts +31 -0
- package/src/config/index.ts +4 -0
- package/src/config/network_config.ts +151 -0
- package/src/utils/aztec.ts +77 -129
- package/src/utils/commands.ts +78 -28
- package/src/utils/encoding.ts +2 -2
- package/src/utils/github.ts +0 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/inspect.ts +33 -130
- 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 +0 -4
- package/dest/cmds/devnet/index.d.ts.map +0 -1
- package/dest/cmds/devnet/index.js +0 -14
- package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
- package/dest/cmds/l1/deploy_l1_contracts.js +0 -29
- 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_logs.js +0 -51
- 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_contracts.ts +0 -65
- 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_logs.ts +0 -66
- package/src/cmds/pxe/get_pxe_info.ts +0 -13
- package/src/cmds/pxe/index.ts +0 -170
|
@@ -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;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
3
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
4
|
+
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
5
|
+
|
|
6
|
+
import { getContract } from 'viem';
|
|
7
|
+
|
|
8
|
+
import type { RollupCommandArgs } from './update_l1_validators.js';
|
|
9
|
+
|
|
10
|
+
export async function triggerSeedSnapshot({
|
|
11
|
+
rpcUrls,
|
|
12
|
+
chainId,
|
|
13
|
+
privateKey,
|
|
14
|
+
mnemonic,
|
|
15
|
+
rollupAddress,
|
|
16
|
+
log,
|
|
17
|
+
}: RollupCommandArgs & { log: LogFn }) {
|
|
18
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
19
|
+
const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic!, chain.chainInfo);
|
|
20
|
+
|
|
21
|
+
const rollup = getContract({
|
|
22
|
+
address: rollupAddress.toString(),
|
|
23
|
+
abi: RollupAbi,
|
|
24
|
+
client,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
log('Triggering seed snapshot for next epoch');
|
|
28
|
+
const txHash = await rollup.write.checkpointRandao();
|
|
29
|
+
log(`Sent! | Seed snapshot setup for next epoch | tx hash: ${txHash}`);
|
|
30
|
+
const receipt = await client.waitForTransactionReceipt({ hash: txHash });
|
|
31
|
+
log(`Done! | Seed snapshot setup for next epoch | tx hash: ${txHash} | status: ${receipt.status}`);
|
|
32
|
+
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} 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 { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
6
|
+
import { EthCheatCodes } from '@aztec/ethereum/test';
|
|
8
7
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
8
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
10
|
-
import {
|
|
9
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
10
|
+
import { RollupAbi, StakingAssetHandlerAbi, TestERC20Abi } from '@aztec/l1-artifacts';
|
|
11
|
+
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
11
12
|
|
|
12
|
-
import {
|
|
13
|
+
import { encodeFunctionData, formatEther, getContract, maxUint256 } from 'viem';
|
|
13
14
|
import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
14
15
|
|
|
15
16
|
export interface RollupCommandArgs {
|
|
@@ -21,6 +22,14 @@ export interface RollupCommandArgs {
|
|
|
21
22
|
withdrawerAddress?: EthAddress;
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
export interface StakingAssetHandlerCommandArgs {
|
|
26
|
+
rpcUrls: string[];
|
|
27
|
+
chainId: number;
|
|
28
|
+
privateKey?: string;
|
|
29
|
+
mnemonic?: string;
|
|
30
|
+
stakingAssetHandlerAddress: EthAddress;
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
export interface LoggerArgs {
|
|
25
34
|
log: LogFn;
|
|
26
35
|
debugLogger: Logger;
|
|
@@ -29,7 +38,6 @@ export interface LoggerArgs {
|
|
|
29
38
|
export function generateL1Account() {
|
|
30
39
|
const privateKey = generatePrivateKey();
|
|
31
40
|
const account = privateKeyToAccount(privateKey);
|
|
32
|
-
account.address;
|
|
33
41
|
return {
|
|
34
42
|
privateKey,
|
|
35
43
|
address: account.address,
|
|
@@ -41,83 +49,209 @@ export async function addL1Validator({
|
|
|
41
49
|
chainId,
|
|
42
50
|
privateKey,
|
|
43
51
|
mnemonic,
|
|
44
|
-
|
|
45
|
-
rollupAddress,
|
|
52
|
+
attesterAddress,
|
|
46
53
|
withdrawerAddress,
|
|
54
|
+
stakingAssetHandlerAddress,
|
|
55
|
+
proofParams,
|
|
56
|
+
blsSecretKey,
|
|
47
57
|
log,
|
|
48
58
|
debugLogger,
|
|
49
|
-
}:
|
|
50
|
-
|
|
59
|
+
}: StakingAssetHandlerCommandArgs &
|
|
60
|
+
LoggerArgs & {
|
|
61
|
+
blsSecretKey: bigint; // scalar field element of BN254
|
|
62
|
+
attesterAddress: EthAddress;
|
|
63
|
+
withdrawerAddress: EthAddress;
|
|
64
|
+
proofParams: Buffer;
|
|
65
|
+
}) {
|
|
51
66
|
const dualLog = makeDualLog(log, debugLogger);
|
|
52
|
-
const
|
|
53
|
-
const
|
|
67
|
+
const account = getAccount(privateKey, mnemonic);
|
|
68
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
69
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
70
|
+
|
|
71
|
+
const stakingAssetHandler = getContract({
|
|
72
|
+
address: stakingAssetHandlerAddress.toString(),
|
|
73
|
+
abi: StakingAssetHandlerAbi,
|
|
74
|
+
client: l1Client,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const rollupAddress = await stakingAssetHandler.read.getRollup();
|
|
78
|
+
dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()}`);
|
|
79
|
+
|
|
54
80
|
const rollup = getContract({
|
|
55
|
-
address: rollupAddress
|
|
81
|
+
address: rollupAddress,
|
|
56
82
|
abi: RollupAbi,
|
|
57
|
-
client:
|
|
83
|
+
client: l1Client,
|
|
58
84
|
});
|
|
59
85
|
|
|
60
|
-
const
|
|
61
|
-
|
|
86
|
+
const gseAddress = await rollup.read.getGSE();
|
|
87
|
+
const gse = new GSEContract(l1Client, gseAddress);
|
|
88
|
+
const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
|
|
89
|
+
|
|
90
|
+
const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
|
|
91
|
+
const proofParamsObj = ZkPassportProofParams.fromBuffer(proofParams);
|
|
92
|
+
|
|
93
|
+
// Step 1: Claim STK tokens from the faucet
|
|
94
|
+
dualLog(`Claiming STK tokens from faucet`);
|
|
95
|
+
const { receipt: claimReceipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
96
|
+
to: stakingAssetHandlerAddress.toString(),
|
|
97
|
+
data: encodeFunctionData({
|
|
98
|
+
abi: StakingAssetHandlerAbi,
|
|
99
|
+
functionName: 'claim',
|
|
100
|
+
args: [proofParamsObj.toViem()],
|
|
101
|
+
}),
|
|
102
|
+
abi: StakingAssetHandlerAbi,
|
|
103
|
+
});
|
|
104
|
+
dualLog(`Claim transaction hash: ${claimReceipt.transactionHash}`);
|
|
105
|
+
await l1Client.waitForTransactionReceipt({ hash: claimReceipt.transactionHash });
|
|
106
|
+
|
|
107
|
+
// Step 2: Approve the rollup to spend STK tokens
|
|
108
|
+
const stakingAssetAddress = await stakingAssetHandler.read.STAKING_ASSET();
|
|
109
|
+
dualLog(`Approving rollup to spend STK tokens`);
|
|
110
|
+
const { receipt: approveReceipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
111
|
+
to: stakingAssetAddress,
|
|
112
|
+
data: encodeFunctionData({
|
|
113
|
+
abi: TestERC20Abi,
|
|
114
|
+
functionName: 'approve',
|
|
115
|
+
args: [rollupAddress, maxUint256],
|
|
116
|
+
}),
|
|
62
117
|
abi: TestERC20Abi,
|
|
63
|
-
client: walletClient,
|
|
64
118
|
});
|
|
119
|
+
await l1Client.waitForTransactionReceipt({ hash: approveReceipt.transactionHash });
|
|
120
|
+
|
|
121
|
+
// Step 3: Deposit into the rollup to register as a validator
|
|
122
|
+
dualLog(`Depositing into rollup to register validator`);
|
|
123
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
124
|
+
to: rollupAddress,
|
|
125
|
+
data: encodeFunctionData({
|
|
126
|
+
abi: RollupAbi,
|
|
127
|
+
functionName: 'deposit',
|
|
128
|
+
args: [
|
|
129
|
+
attesterAddress.toString(),
|
|
130
|
+
withdrawerAddress.toString(),
|
|
131
|
+
registrationTuple.publicKeyInG1,
|
|
132
|
+
registrationTuple.publicKeyInG2,
|
|
133
|
+
registrationTuple.proofOfPossession,
|
|
134
|
+
false, // moveWithLatestRollup
|
|
135
|
+
],
|
|
136
|
+
}),
|
|
137
|
+
abi: RollupAbi,
|
|
138
|
+
});
|
|
139
|
+
dualLog(`Deposit transaction hash: ${receipt.transactionHash}`);
|
|
140
|
+
await l1Client.waitForTransactionReceipt({ hash: receipt.transactionHash });
|
|
65
141
|
|
|
66
|
-
await Promise.all(
|
|
67
|
-
[
|
|
68
|
-
await stakingAsset.write.mint([walletClient.account.address, config.minimumStake], {} as any),
|
|
69
|
-
await stakingAsset.write.approve([rollupAddress.toString(), config.minimumStake], {} as any),
|
|
70
|
-
].map(txHash => publicClient.waitForTransactionReceipt({ hash: txHash })),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
dualLog(`Adding validator ${validatorAddress.toString()} to rollup ${rollupAddress.toString()}`);
|
|
74
|
-
const txHash = await rollup.write.deposit([
|
|
75
|
-
validatorAddress.toString(),
|
|
76
|
-
// TODO(#11451): custom forwarders
|
|
77
|
-
getExpectedAddress(ForwarderAbi, ForwarderBytecode, [validatorAddress.toString()], validatorAddress.toString())
|
|
78
|
-
.address,
|
|
79
|
-
withdrawerAddress?.toString() ?? validatorAddress.toString(),
|
|
80
|
-
config.minimumStake,
|
|
81
|
-
]);
|
|
82
|
-
dualLog(`Transaction hash: ${txHash}`);
|
|
83
|
-
await publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
84
142
|
if (isAnvilTestChain(chainId)) {
|
|
85
143
|
dualLog(`Funding validator on L1`);
|
|
86
|
-
const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
|
|
87
|
-
await cheatCodes.setBalance(
|
|
144
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
145
|
+
await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
|
|
88
146
|
} else {
|
|
89
|
-
const balance = await
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
dualLog(`WARNING: Validator has no balance. Remember to fund it!`);
|
|
147
|
+
const balance = await l1Client.getBalance({ address: attesterAddress.toString() });
|
|
148
|
+
dualLog(`Validator balance: ${formatEther(balance)} ETH`);
|
|
149
|
+
if (balance === 0n) {
|
|
150
|
+
dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
|
|
94
151
|
}
|
|
95
152
|
}
|
|
96
153
|
}
|
|
97
154
|
|
|
98
|
-
export async function
|
|
155
|
+
export async function addL1ValidatorViaRollup({
|
|
99
156
|
rpcUrls,
|
|
100
157
|
chainId,
|
|
101
158
|
privateKey,
|
|
102
159
|
mnemonic,
|
|
103
|
-
|
|
160
|
+
attesterAddress,
|
|
161
|
+
withdrawerAddress,
|
|
162
|
+
blsSecretKey,
|
|
163
|
+
moveWithLatestRollup,
|
|
104
164
|
rollupAddress,
|
|
105
165
|
log,
|
|
106
166
|
debugLogger,
|
|
107
|
-
}: RollupCommandArgs &
|
|
167
|
+
}: RollupCommandArgs &
|
|
168
|
+
LoggerArgs & {
|
|
169
|
+
blsSecretKey: bigint; // scalar field element of BN254
|
|
170
|
+
attesterAddress: EthAddress;
|
|
171
|
+
moveWithLatestRollup: boolean;
|
|
172
|
+
}) {
|
|
108
173
|
const dualLog = makeDualLog(log, debugLogger);
|
|
109
|
-
const
|
|
110
|
-
const
|
|
174
|
+
const account = getAccount(privateKey, mnemonic);
|
|
175
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
176
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
177
|
+
|
|
178
|
+
dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()} via direct deposit`);
|
|
179
|
+
|
|
180
|
+
if (!withdrawerAddress) {
|
|
181
|
+
throw new Error(`Withdrawer address required`);
|
|
182
|
+
}
|
|
183
|
+
|
|
111
184
|
const rollup = getContract({
|
|
112
185
|
address: rollupAddress.toString(),
|
|
113
186
|
abi: RollupAbi,
|
|
114
|
-
client:
|
|
187
|
+
client: l1Client,
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
const gseAddress = await rollup.read.getGSE();
|
|
191
|
+
|
|
192
|
+
const gse = new GSEContract(l1Client, gseAddress);
|
|
193
|
+
|
|
194
|
+
const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
|
|
195
|
+
|
|
196
|
+
const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
|
|
197
|
+
|
|
198
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
199
|
+
to: rollupAddress.toString(),
|
|
200
|
+
data: encodeFunctionData({
|
|
201
|
+
abi: RollupAbi,
|
|
202
|
+
functionName: 'deposit',
|
|
203
|
+
args: [
|
|
204
|
+
attesterAddress.toString(),
|
|
205
|
+
withdrawerAddress.toString(),
|
|
206
|
+
registrationTuple.publicKeyInG1,
|
|
207
|
+
registrationTuple.publicKeyInG2,
|
|
208
|
+
registrationTuple.proofOfPossession,
|
|
209
|
+
moveWithLatestRollup,
|
|
210
|
+
],
|
|
211
|
+
}),
|
|
212
|
+
abi: StakingAssetHandlerAbi,
|
|
115
213
|
});
|
|
214
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
215
|
+
await l1Client.waitForTransactionReceipt({ hash: receipt.transactionHash });
|
|
216
|
+
if (isAnvilTestChain(chainId)) {
|
|
217
|
+
dualLog(`Funding validator on L1`);
|
|
218
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
219
|
+
await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
|
|
220
|
+
} else {
|
|
221
|
+
const balance = await l1Client.getBalance({ address: attesterAddress.toString() });
|
|
222
|
+
dualLog(`Validator balance: ${formatEther(balance)} ETH`);
|
|
223
|
+
if (balance === 0n) {
|
|
224
|
+
dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export async function removeL1Validator({
|
|
230
|
+
rpcUrls,
|
|
231
|
+
chainId,
|
|
232
|
+
privateKey,
|
|
233
|
+
mnemonic,
|
|
234
|
+
validatorAddress,
|
|
235
|
+
rollupAddress,
|
|
236
|
+
log,
|
|
237
|
+
debugLogger,
|
|
238
|
+
}: RollupCommandArgs & LoggerArgs & { validatorAddress: EthAddress }) {
|
|
239
|
+
const dualLog = makeDualLog(log, debugLogger);
|
|
240
|
+
const account = getAccount(privateKey, mnemonic);
|
|
241
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
242
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
243
|
+
const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
|
|
116
244
|
|
|
117
245
|
dualLog(`Removing validator ${validatorAddress.toString()} from rollup ${rollupAddress.toString()}`);
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
246
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
247
|
+
to: rollupAddress.toString(),
|
|
248
|
+
data: encodeFunctionData({
|
|
249
|
+
abi: RollupAbi,
|
|
250
|
+
functionName: 'initiateWithdraw',
|
|
251
|
+
args: [validatorAddress.toString(), validatorAddress.toString()],
|
|
252
|
+
}),
|
|
253
|
+
});
|
|
254
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
121
255
|
}
|
|
122
256
|
|
|
123
257
|
export async function pruneRollup({
|
|
@@ -130,18 +264,20 @@ export async function pruneRollup({
|
|
|
130
264
|
debugLogger,
|
|
131
265
|
}: RollupCommandArgs & LoggerArgs) {
|
|
132
266
|
const dualLog = makeDualLog(log, debugLogger);
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
abi: RollupAbi,
|
|
138
|
-
client: walletClient,
|
|
139
|
-
});
|
|
267
|
+
const account = getAccount(privateKey, mnemonic);
|
|
268
|
+
const chain = createEthereumChain(rpcUrls, chainId);
|
|
269
|
+
const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
|
|
270
|
+
const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
|
|
140
271
|
|
|
141
272
|
dualLog(`Trying prune`);
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
273
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
274
|
+
to: rollupAddress.toString(),
|
|
275
|
+
data: encodeFunctionData({
|
|
276
|
+
abi: RollupAbi,
|
|
277
|
+
functionName: 'prune',
|
|
278
|
+
}),
|
|
279
|
+
});
|
|
280
|
+
dualLog(`Transaction hash: ${receipt.transactionHash}`);
|
|
145
281
|
}
|
|
146
282
|
|
|
147
283
|
export async function fastForwardEpochs({
|
|
@@ -153,20 +289,20 @@ export async function fastForwardEpochs({
|
|
|
153
289
|
debugLogger,
|
|
154
290
|
}: RollupCommandArgs & LoggerArgs & { numEpochs: bigint }) {
|
|
155
291
|
const dualLog = makeDualLog(log, debugLogger);
|
|
156
|
-
const publicClient = getPublicClient(rpcUrls, chainId);
|
|
292
|
+
const publicClient = getPublicClient({ l1RpcUrls: rpcUrls, l1ChainId: chainId });
|
|
157
293
|
const rollup = getContract({
|
|
158
294
|
address: rollupAddress.toString(),
|
|
159
295
|
abi: RollupAbi,
|
|
160
296
|
client: publicClient,
|
|
161
297
|
});
|
|
162
298
|
|
|
163
|
-
const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
|
|
299
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
|
|
164
300
|
const currentSlot = await rollup.read.getCurrentSlot();
|
|
165
301
|
const l2SlotsInEpoch = await rollup.read.getEpochDuration();
|
|
166
302
|
const timestamp = await rollup.read.getTimestampForSlot([currentSlot + l2SlotsInEpoch * numEpochs]);
|
|
167
303
|
dualLog(`Fast forwarding ${numEpochs} epochs to ${timestamp}`);
|
|
168
304
|
try {
|
|
169
|
-
await cheatCodes.warp(Number(timestamp));
|
|
305
|
+
await cheatCodes.warp(Number(timestamp), { resetBlockInterval: true });
|
|
170
306
|
dualLog(`Fast forwarded ${numEpochs} epochs to ${timestamp}`);
|
|
171
307
|
} catch (error) {
|
|
172
308
|
if (error instanceof Error && error.message.includes("is lower than or equal to previous block's timestamp")) {
|
|
@@ -180,31 +316,27 @@ export async function fastForwardEpochs({
|
|
|
180
316
|
|
|
181
317
|
export async function debugRollup({ rpcUrls, chainId, rollupAddress, log }: RollupCommandArgs & LoggerArgs) {
|
|
182
318
|
const config = getL1ContractsConfigEnvVars();
|
|
183
|
-
const publicClient = getPublicClient(rpcUrls, chainId);
|
|
184
|
-
const rollup =
|
|
185
|
-
address: rollupAddress.toString(),
|
|
186
|
-
abi: RollupAbi,
|
|
187
|
-
client: publicClient,
|
|
188
|
-
});
|
|
319
|
+
const publicClient = getPublicClient({ l1RpcUrls: rpcUrls, l1ChainId: chainId });
|
|
320
|
+
const rollup = new RollupContract(publicClient, rollupAddress);
|
|
189
321
|
|
|
190
|
-
const pendingNum = await rollup.
|
|
322
|
+
const pendingNum = await rollup.getCheckpointNumber();
|
|
191
323
|
log(`Pending block num: ${pendingNum}`);
|
|
192
|
-
const provenNum = await rollup.
|
|
324
|
+
const provenNum = await rollup.getProvenCheckpointNumber();
|
|
193
325
|
log(`Proven block num: ${provenNum}`);
|
|
194
|
-
const validators = await rollup.
|
|
326
|
+
const validators = await rollup.getAttesters();
|
|
195
327
|
log(`Validators: ${validators.map(v => v.toString()).join(', ')}`);
|
|
196
|
-
const committee = await rollup.
|
|
197
|
-
log(`Committee: ${committee
|
|
198
|
-
const archive = await rollup.
|
|
328
|
+
const committee = await rollup.getCurrentEpochCommittee();
|
|
329
|
+
log(`Committee: ${committee?.map(v => v.toString()).join(', ')}`);
|
|
330
|
+
const archive = await rollup.archive();
|
|
199
331
|
log(`Archive: ${archive}`);
|
|
200
|
-
const epochNum = await rollup.
|
|
332
|
+
const epochNum = await rollup.getCurrentEpochNumber();
|
|
201
333
|
log(`Current epoch: ${epochNum}`);
|
|
202
|
-
const slot = await rollup.
|
|
334
|
+
const slot = await rollup.getSlotNumber();
|
|
203
335
|
log(`Current slot: ${slot}`);
|
|
204
|
-
const proposerDuringPrevL1Block = await rollup.
|
|
336
|
+
const proposerDuringPrevL1Block = await rollup.getCurrentProposer();
|
|
205
337
|
log(`Proposer during previous L1 block: ${proposerDuringPrevL1Block}`);
|
|
206
338
|
const nextBlockTS = BigInt((await publicClient.getBlock()).timestamp + BigInt(config.ethereumSlotDuration));
|
|
207
|
-
const proposer = await rollup.
|
|
339
|
+
const proposer = await rollup.getProposerAt(nextBlockTS);
|
|
208
340
|
log(`Proposer NOW: ${proposer.toString()}`);
|
|
209
341
|
}
|
|
210
342
|
|
|
@@ -215,24 +347,12 @@ function makeDualLog(log: LogFn, debugLogger: Logger) {
|
|
|
215
347
|
};
|
|
216
348
|
}
|
|
217
349
|
|
|
218
|
-
function
|
|
219
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
220
|
-
return createPublicClient({ chain: chain.chainInfo, transport: fallback(rpcUrls.map(url => http(url))) });
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function getWalletClient(
|
|
224
|
-
rpcUrls: string[],
|
|
225
|
-
chainId: number,
|
|
226
|
-
privateKey: string | undefined,
|
|
227
|
-
mnemonic: string | undefined,
|
|
228
|
-
) {
|
|
350
|
+
function getAccount(privateKey: string | undefined, mnemonic: string | undefined) {
|
|
229
351
|
if (!privateKey && !mnemonic) {
|
|
230
352
|
throw new Error('Either privateKey or mnemonic must be provided to create a wallet client');
|
|
231
353
|
}
|
|
232
|
-
|
|
233
|
-
const chain = createEthereumChain(rpcUrls, chainId);
|
|
234
354
|
const account = !privateKey
|
|
235
355
|
? mnemonicToAccount(mnemonic!)
|
|
236
356
|
: privateKeyToAccount(`${privateKey.startsWith('0x') ? '' : '0x'}${privateKey}` as `0x${string}`);
|
|
237
|
-
return
|
|
357
|
+
return account;
|
|
238
358
|
}
|
|
@@ -3,10 +3,11 @@ import { createBootnodeENRandPeerId } from '@aztec/p2p/enr';
|
|
|
3
3
|
|
|
4
4
|
export async function generateEncodedBootnodeENR(
|
|
5
5
|
privateKey: string,
|
|
6
|
-
|
|
6
|
+
p2pIp: string,
|
|
7
|
+
p2pPort: number,
|
|
7
8
|
l1ChainId: number,
|
|
8
9
|
log: LogFn,
|
|
9
10
|
) {
|
|
10
|
-
const { enr } = await createBootnodeENRandPeerId(privateKey,
|
|
11
|
+
const { enr } = await createBootnodeENRandPeerId(privateKey, p2pIp, p2pPort, l1ChainId);
|
|
11
12
|
log(`ENR: ${enr.encodeTxt()}`);
|
|
12
13
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { computeSecretHash } from '@aztec/aztec.js';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { computeSecretHash } from '@aztec/aztec.js/crypto';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
4
|
|
|
5
|
-
export function generateSecretAndHash(log: LogFn) {
|
|
5
|
+
export async function generateSecretAndHash(log: LogFn) {
|
|
6
6
|
const secret = Fr.random();
|
|
7
7
|
|
|
8
8
|
// We hash this the same way that aztec nr hash does.
|
|
9
|
-
const secretHash = computeSecretHash(secret);
|
|
9
|
+
const secretHash = await computeSecretHash(secret);
|
|
10
10
|
|
|
11
11
|
log(`
|
|
12
12
|
Secret: ${secret}
|