@aztec-labs/cli 6.0.0-rc.3 → 6.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/cmds/infrastructure/index.d.ts +1 -1
- package/dest/cmds/infrastructure/index.d.ts.map +1 -1
- package/dest/cmds/infrastructure/index.js +3 -2
- package/dest/cmds/infrastructure/sequencers.d.ts +4 -1
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +10 -3
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.js +1 -0
- 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 +2 -1
- package/dest/cmds/l1/l1_rpc_test_utils.d.ts +10 -2
- package/dest/cmds/l1/l1_rpc_test_utils.d.ts.map +1 -1
- package/dest/cmds/l1/l1_rpc_test_utils.js +35 -1
- 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 +3 -4
- package/dest/cmds/l1/update_l1_validators.d.ts +3 -2
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +6 -4
- package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
- package/dest/cmds/misc/generate_p2p_private_key.d.ts.map +1 -1
- package/dest/cmds/misc/generate_p2p_private_key.js +1 -0
- 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 +14 -4
- package/dest/cmds/validator_keys/bls_key_derivation.d.ts +89 -0
- package/dest/cmds/validator_keys/bls_key_derivation.d.ts.map +1 -0
- package/dest/cmds/validator_keys/bls_key_derivation.js +122 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +3 -2
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -1
- package/dest/cmds/validator_keys/generate_bls_keypair.js +16 -3
- 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 +14 -3
- package/dest/cmds/validator_keys/new.d.ts +3 -2
- package/dest/cmds/validator_keys/new.d.ts.map +1 -1
- package/dest/cmds/validator_keys/new.js +47 -33
- package/dest/cmds/validator_keys/shared.d.ts +28 -3
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -1
- package/dest/cmds/validator_keys/shared.js +48 -7
- package/dest/cmds/validator_keys/staker.d.ts +6 -1
- package/dest/cmds/validator_keys/staker.d.ts.map +1 -1
- package/dest/cmds/validator_keys/staker.js +32 -0
- package/dest/config/chain_l2_config.d.ts +1 -1
- package/dest/config/chain_l2_config.d.ts.map +1 -1
- package/dest/config/chain_l2_config.js +1 -1
- package/dest/config/enrich_env.d.ts +1 -1
- package/dest/config/enrich_env.d.ts.map +1 -1
- package/dest/config/enrich_env.js +1 -1
- package/dest/config/get_l1_config.d.ts +1 -1
- package/dest/config/get_l1_config.d.ts.map +1 -1
- package/dest/config/get_l1_config.js +2 -1
- package/dest/config/network_config.d.ts +1 -1
- package/dest/config/network_config.d.ts.map +1 -1
- package/dest/config/network_config.js +4 -2
- package/dest/utils/aztec.d.ts +1 -1
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +1 -0
- package/dest/utils/commands.d.ts +1 -1
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +3 -1
- package/dest/utils/encoding.d.ts +1 -1
- package/dest/utils/encoding.d.ts.map +1 -1
- package/dest/utils/encoding.js +1 -0
- package/package.json +25 -25
- package/src/cmds/infrastructure/index.ts +13 -1
- package/src/cmds/infrastructure/sequencers.ts +14 -4
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +1 -0
- package/src/cmds/l1/index.ts +6 -0
- package/src/cmds/l1/l1_rpc_test_utils.ts +25 -2
- package/src/cmds/l1/prover_stats.ts +3 -2
- package/src/cmds/l1/update_l1_validators.ts +10 -4
- package/src/cmds/misc/generate_p2p_private_key.ts +1 -0
- package/src/cmds/validator_keys/add.ts +15 -2
- package/src/cmds/validator_keys/bls_key_derivation.ts +209 -0
- package/src/cmds/validator_keys/generate_bls_keypair.ts +26 -5
- package/src/cmds/validator_keys/index.ts +32 -0
- package/src/cmds/validator_keys/new.ts +50 -32
- package/src/cmds/validator_keys/shared.ts +70 -8
- package/src/cmds/validator_keys/staker.ts +56 -0
- package/src/config/chain_l2_config.ts +1 -0
- package/src/config/enrich_env.ts +1 -0
- package/src/config/get_l1_config.ts +2 -1
- package/src/config/network_config.ts +4 -2
- package/src/utils/aztec.ts +1 -0
- package/src/utils/commands.ts +3 -1
- package/src/utils/encoding.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
2
2
|
import type { Command } from 'commander';
|
|
3
3
|
export declare function injectCommands(program: Command, log: LogFn): Command;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2luZnJhc3RydWN0dXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVV6Qyx3QkFBZ0IsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FtRDFEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,WAmD1D"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { ETHEREUM_HOSTS, l1ChainIdOption, nodeOption, parseOptionalInteger } from '../../utils/commands.js';
|
|
1
|
+
import { ETHEREUM_HOSTS, l1ChainIdOption, nodeOption, parseEthereumAddress, parseOptionalInteger } from '../../utils/commands.js';
|
|
2
2
|
export function injectCommands(program, log) {
|
|
3
3
|
program.command('setup-protocol-contracts').description('Bootstrap the blockchain by initializing all the protocol contracts').addOption(nodeOption).option('--testAccounts', 'Deploy funded test accounts.').option('--json', 'Output the contract addresses in JSON format').action(async (options)=>{
|
|
4
4
|
const { setupL2Contracts } = await import('./setup_l2_contract.js');
|
|
5
5
|
await setupL2Contracts(options.nodeUrl, options.testAccounts, options.json, log);
|
|
6
6
|
});
|
|
7
|
-
program.command('sequencers').argument('<command>', 'Command to run: list, add, remove, who-next').argument('[who]', 'Who to add/remove').description('Manages or queries registered sequencers on the L1 rollup contract.').requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
|
|
7
|
+
program.command('sequencers').argument('<command>', 'Command to run: list, add, remove, who-next').argument('[who]', 'Who to add/remove').option('--recipient <address>', 'For remove (required): address that receives the withdrawn stake; it cannot be changed once set', parseEthereumAddress).description('Manages or queries registered sequencers on the L1 rollup contract.').requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
|
|
8
8
|
ETHEREUM_HOSTS
|
|
9
9
|
]).option('-m, --mnemonic <string>', 'The mnemonic for the sender of the tx', 'test test test test test test test test test test test junk').option('--block-number <number>', 'Block number to query next sequencer for', parseOptionalInteger).addOption(nodeOption).addOption(l1ChainIdOption).action(async (command, who, options)=>{
|
|
10
10
|
const { sequencers } = await import('./sequencers.js');
|
|
11
11
|
await sequencers({
|
|
12
12
|
command: command,
|
|
13
13
|
who,
|
|
14
|
+
recipient: options.recipient,
|
|
14
15
|
mnemonic: options.mnemonic,
|
|
15
16
|
nodeUrl: options.nodeUrl,
|
|
16
17
|
l1RpcUrls: options.l1RpcUrls,
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
1
2
|
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
2
3
|
export declare function sequencers(opts: {
|
|
3
4
|
command: 'list' | 'add' | 'remove' | 'who-next' | 'flush';
|
|
4
5
|
who?: string;
|
|
6
|
+
/** Address that receives the withdrawn stake. Required for `remove`. */
|
|
7
|
+
recipient?: EthAddress;
|
|
5
8
|
mnemonic?: string;
|
|
6
9
|
bn254SecretKey?: bigint;
|
|
7
10
|
nodeUrl: string;
|
|
@@ -9,4 +12,4 @@ export declare function sequencers(opts: {
|
|
|
9
12
|
chainId: number;
|
|
10
13
|
log: LogFn;
|
|
11
14
|
}): Promise<void>;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2Vycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvaW5mcmFzdHJ1Y3R1cmUvc2VxdWVuY2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl4RCx3QkFBc0IsVUFBVSxDQUFDLElBQUksRUFBRTtJQUNyQyxPQUFPLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUMxRCxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDYix3RUFBd0U7SUFDeEUsU0FBUyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDeEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDO0NBQ1osaUJBNEdBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencers.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/sequencers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,KAAK,CAAC;CACZ,
|
|
1
|
+
{"version":3,"file":"sequencers.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/sequencers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,KAAK,CAAC;CACZ,iBA4GA"}
|
|
@@ -7,7 +7,11 @@ import { GSEContract, RollupContract } from '@aztec-labs/ethereum/contracts';
|
|
|
7
7
|
import { createPublicClient, createWalletClient, fallback, getContract, http } from 'viem';
|
|
8
8
|
import { mnemonicToAccount } from 'viem/accounts';
|
|
9
9
|
export async function sequencers(opts) {
|
|
10
|
-
const { command, who: maybeWho, mnemonic, bn254SecretKey, nodeUrl, l1RpcUrls, chainId, log } = opts;
|
|
10
|
+
const { command, who: maybeWho, recipient, mnemonic, bn254SecretKey, nodeUrl, l1RpcUrls, chainId, log } = opts;
|
|
11
|
+
const missingRecipient = 'Missing --recipient: the address that receives the withdrawn stake';
|
|
12
|
+
if (command === 'remove' && !recipient) {
|
|
13
|
+
throw new Error(missingRecipient);
|
|
14
|
+
}
|
|
11
15
|
const client = createAztecNodeClient(nodeUrl);
|
|
12
16
|
const { l1ContractAddresses } = await client.getNodeInfo();
|
|
13
17
|
const chain = createEthereumChain(l1RpcUrls, chainId);
|
|
@@ -95,10 +99,13 @@ export async function sequencers(opts) {
|
|
|
95
99
|
if (!who || !writeableRollup) {
|
|
96
100
|
throw new Error(`Missing sequencer address`);
|
|
97
101
|
}
|
|
98
|
-
|
|
102
|
+
if (!recipient) {
|
|
103
|
+
throw new Error(missingRecipient);
|
|
104
|
+
}
|
|
105
|
+
log(`Removing ${who} as sequencer, withdrawing its stake to ${recipient}`);
|
|
99
106
|
const hash = await writeableRollup.write.initiateWithdraw([
|
|
100
107
|
who,
|
|
101
|
-
|
|
108
|
+
recipient.toString()
|
|
102
109
|
]);
|
|
103
110
|
await publicClient.waitForTransactionReceipt({
|
|
104
111
|
hash
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { EthAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
2
|
import type { LogFn, Logger } from '@aztec-labs/foundation/log';
|
|
3
3
|
export declare function deployL1ContractsCmd(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, testAccounts: boolean, sponsoredFPC: boolean, json: boolean, initialValidators: EthAddress[], realVerifier: boolean, existingToken: EthAddress | undefined, log: LogFn, debugLogger: Logger): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2wxX2NvbnRyYWN0c19jbWQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2RlcGxveV9sMV9jb250cmFjdHNfY21kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBS2pFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVNoRSx3QkFBc0Isb0JBQW9CLENBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsWUFBWSxFQUFFLE9BQU8sRUFDckIsSUFBSSxFQUFFLE9BQU8sRUFDYixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFDL0IsWUFBWSxFQUFFLE9BQU8sRUFDckIsYUFBYSxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQ3JDLEdBQUcsRUFBRSxLQUFLLEVBQ1YsV0FBVyxFQUFFLE1BQU0saUJBNkVwQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_l1_contracts_cmd.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts_cmd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAKjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy_l1_contracts_cmd.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts_cmd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAKjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAShE,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,UAAU,EAAE,EAC/B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA6EpB"}
|
|
@@ -5,6 +5,7 @@ import { deployAztecL1Contracts } from '@aztec-labs/ethereum/deploy-aztec-l1-con
|
|
|
5
5
|
import { SecretValue } from '@aztec-labs/foundation/config';
|
|
6
6
|
import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
|
|
7
7
|
import { getGenesisValues } from '@aztec-labs/world-state/testing';
|
|
8
|
+
import { Buffer } from 'buffer';
|
|
8
9
|
import { mnemonicToAccount } from 'viem/accounts';
|
|
9
10
|
import { addLeadingHex } from '../../utils/aztec.js';
|
|
10
11
|
import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
|
package/dest/cmds/l1/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { LogFn, Logger } from '@aztec-labs/foundation/log';
|
|
2
2
|
import { type Command } from 'commander';
|
|
3
3
|
export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQVUsTUFBTSxXQUFXLENBQUM7QUF3QmpELHdCQUFnQixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBeW1CL0UifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AAwBjD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AAwBjD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAymB/E"}
|
package/dest/cmds/l1/index.js
CHANGED
|
@@ -186,7 +186,7 @@ Note: DEADLINE is a future Unix timestamp in seconds. Run append commands sequen
|
|
|
186
186
|
debugLogger
|
|
187
187
|
});
|
|
188
188
|
});
|
|
189
|
-
program.command('remove-l1-validator').description('Removes a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--validator <address>', 'ethereum address of the validator', parseEthereumAddress).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).action(async (options)=>{
|
|
189
|
+
program.command('remove-l1-validator').description('Removes a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--validator <address>', 'ethereum address of the validator', parseEthereumAddress).requiredOption('--recipient <address>', 'Address that receives the withdrawn stake; it cannot be changed once set', parseEthereumAddress).option('--rollup <address>', 'ethereum address of the rollup contract', parseEthereumAddress).action(async (options)=>{
|
|
190
190
|
const { removeL1Validator } = await import('./update_l1_validators.js');
|
|
191
191
|
await removeL1Validator({
|
|
192
192
|
rpcUrls: options.l1RpcUrls,
|
|
@@ -194,6 +194,7 @@ Note: DEADLINE is a future Unix timestamp in seconds. Run append commands sequen
|
|
|
194
194
|
privateKey: options.privateKey,
|
|
195
195
|
mnemonic: options.mnemonic,
|
|
196
196
|
validatorAddress: options.validator,
|
|
197
|
+
recipientAddress: options.recipient,
|
|
197
198
|
rollupAddress: options.rollup,
|
|
198
199
|
log,
|
|
199
200
|
debugLogger
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
2
2
|
/**
|
|
3
3
|
* Starts a JSON-RPC server that reports `chainId` and, when `canonicalRollup` is given, answers every `eth_call` with
|
|
4
4
|
* that address and records the call. Any other method gets an error.
|
|
@@ -11,4 +11,12 @@ export declare function serveL1Rpc(chainId: number, canonicalRollup?: EthAddress
|
|
|
11
11
|
}[];
|
|
12
12
|
close: () => Promise<unknown>;
|
|
13
13
|
}>;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Returns the `(attester, recipient)` arguments of the `initiateWithdraw` call that the latest block on an anvil chain
|
|
16
|
+
* sent to `rollup`, failing if that block holds no such call.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getLatestInitiateWithdrawArgs(rpcUrl: string, rollup: EthAddress): Promise<{
|
|
19
|
+
attester: EthAddress;
|
|
20
|
+
recipient: EthAddress;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfcnBjX3Rlc3RfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL2wxX3JwY190ZXN0X3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUtoRTs7O0dBR0c7QUFDSCx3QkFBc0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsVUFBVTs7Ozs7OztHQWtDN0U7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVTs7O0dBYXJGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_rpc_test_utils.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/l1_rpc_test_utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"l1_rpc_test_utils.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/l1_rpc_test_utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAKhE;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,UAAU;;;;;;;GAkC7E;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;;;GAarF"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { RollupAbi } from '@aztec-foundation/l1-artifacts';
|
|
2
|
+
import { getPublicClient } from '@aztec-labs/ethereum/client';
|
|
3
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
1
4
|
import { createServer } from 'node:http';
|
|
2
|
-
import { encodeAbiParameters } from 'viem';
|
|
5
|
+
import { decodeFunctionData, encodeAbiParameters } from 'viem';
|
|
6
|
+
import { foundry } from 'viem/chains';
|
|
3
7
|
/**
|
|
4
8
|
* Starts a JSON-RPC server that reports `chainId` and, when `canonicalRollup` is given, answers every `eth_call` with
|
|
5
9
|
* that address and records the call. Any other method gets an error.
|
|
@@ -56,3 +60,33 @@ import { encodeAbiParameters } from 'viem';
|
|
|
56
60
|
close: ()=>new Promise((resolve)=>server.close(resolve))
|
|
57
61
|
};
|
|
58
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns the `(attester, recipient)` arguments of the `initiateWithdraw` call that the latest block on an anvil chain
|
|
65
|
+
* sent to `rollup`, failing if that block holds no such call.
|
|
66
|
+
*/ export async function getLatestInitiateWithdrawArgs(rpcUrl, rollup) {
|
|
67
|
+
const client = getPublicClient({
|
|
68
|
+
l1RpcUrls: [
|
|
69
|
+
rpcUrl
|
|
70
|
+
],
|
|
71
|
+
l1ChainId: foundry.id
|
|
72
|
+
});
|
|
73
|
+
const block = await client.getBlock({
|
|
74
|
+
includeTransactions: true
|
|
75
|
+
});
|
|
76
|
+
const tx = block.transactions.find(({ to })=>to !== null && rollup.equals(EthAddress.fromString(to)));
|
|
77
|
+
if (!tx) {
|
|
78
|
+
throw new Error(`No transaction to ${rollup} in the latest block`);
|
|
79
|
+
}
|
|
80
|
+
const decoded = decodeFunctionData({
|
|
81
|
+
abi: RollupAbi,
|
|
82
|
+
data: tx.input
|
|
83
|
+
});
|
|
84
|
+
if (decoded.functionName !== 'initiateWithdraw') {
|
|
85
|
+
throw new Error(`Expected initiateWithdraw, got ${decoded.functionName}`);
|
|
86
|
+
}
|
|
87
|
+
const [attester, recipient] = decoded.args;
|
|
88
|
+
return {
|
|
89
|
+
attester: EthAddress.fromString(attester),
|
|
90
|
+
recipient: EthAddress.fromString(recipient)
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -11,4 +11,4 @@ export declare function proverStats(opts: {
|
|
|
11
11
|
provingTimeout: bigint | undefined;
|
|
12
12
|
rawLogs: boolean;
|
|
13
13
|
}): Promise<void>;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyX3N0YXRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy9sMS9wcm92ZXJfc3RhdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLEtBQUssS0FBSyxFQUE2QixNQUFNLDRCQUE0QixDQUFDO0FBTW5GLHdCQUFzQixXQUFXLENBQUMsSUFBSSxFQUFFO0lBQ3RDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLGVBQWUsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLE9BQU8sRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzVCLEdBQUcsRUFBRSxLQUFLLENBQUM7SUFDWCxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsY0FBYyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkMsT0FBTyxFQUFFLE9BQU8sQ0FBQztDQUNsQixpQkEwSUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover_stats.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/prover_stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prover_stats.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/prover_stats.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,KAAK,EAA6B,MAAM,4BAA4B,CAAC;AAMnF,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,KAAK,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB,iBA0IA"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { RollupAbi } from '@aztec-foundation/l1-artifacts';
|
|
2
2
|
import { retrieveL2ProofVerifiedEvents } from '@aztec-labs/archiver';
|
|
3
3
|
import { createEthereumChain } from '@aztec-labs/ethereum/chain';
|
|
4
|
+
import { makeL1HttpTransport } from '@aztec-labs/ethereum/client';
|
|
4
5
|
import { compactArray, mapValues, unique } from '@aztec-labs/foundation/collection';
|
|
5
6
|
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
6
7
|
import { createLogger } from '@aztec-labs/foundation/log';
|
|
7
8
|
import { createAztecNodeClient } from '@aztec-labs/stdlib/interfaces/client';
|
|
8
9
|
import chunk from 'lodash.chunk';
|
|
9
10
|
import groupBy from 'lodash.groupby';
|
|
10
|
-
import { createPublicClient,
|
|
11
|
+
import { createPublicClient, getAbiItem, getAddress } from 'viem';
|
|
11
12
|
export async function proverStats(opts) {
|
|
12
13
|
const debugLog = createLogger('cli:prover_stats');
|
|
13
14
|
const { startBlock, chainId, l1RpcUrls, l1RollupAddress, batchSize, nodeUrl, provingTimeout, endBlock, rawLogs, log } = opts;
|
|
@@ -18,9 +19,7 @@ export async function proverStats(opts) {
|
|
|
18
19
|
const chain = createEthereumChain(l1RpcUrls, chainId).chainInfo;
|
|
19
20
|
const publicClient = createPublicClient({
|
|
20
21
|
chain,
|
|
21
|
-
transport:
|
|
22
|
-
batch: false
|
|
23
|
-
})))
|
|
22
|
+
transport: makeL1HttpTransport(l1RpcUrls)
|
|
24
23
|
});
|
|
25
24
|
const lastBlockNum = endBlock ?? await publicClient.getBlockNumber();
|
|
26
25
|
debugLog.verbose(`Querying events on rollup at ${rollup.toString()} from ${startBlock} up to ${lastBlockNum}`);
|
|
@@ -42,8 +42,9 @@ export declare function addL1ValidatorViaRollup({ rpcUrls, chainId, privateKey,
|
|
|
42
42
|
attesterAddress: EthAddress;
|
|
43
43
|
moveWithLatestRollup: boolean;
|
|
44
44
|
}): Promise<void>;
|
|
45
|
-
export declare function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, rollupAddress, log, debugLogger }: RollupCommandArgs & LoggerArgs & {
|
|
45
|
+
export declare function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, recipientAddress, rollupAddress, log, debugLogger }: RollupCommandArgs & LoggerArgs & {
|
|
46
46
|
validatorAddress: EthAddress;
|
|
47
|
+
recipientAddress: EthAddress;
|
|
47
48
|
}): Promise<void>;
|
|
48
49
|
/** Chain ID and registry published for a network; both are undefined when it publishes none, as for `local`. */
|
|
49
50
|
export type AttesterExitNetwork = {
|
|
@@ -97,4 +98,4 @@ export declare function fastForwardEpochs({ rpcUrls, chainId, rollupAddress, num
|
|
|
97
98
|
numEpochs: bigint;
|
|
98
99
|
}): Promise<void>;
|
|
99
100
|
export declare function debugRollup({ rpcUrls, chainId, rollupAddress, log }: RollupCommandArgs & LoggerArgs): Promise<void>;
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlX2wxX3ZhbGlkYXRvcnMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2wxL3VwZGF0ZV9sMV92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxLQUFLLHlCQUF5QixFQUkvQixNQUFNLGdDQUFnQyxDQUFDO0FBS3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVoRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFZaEUsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDcEIsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGFBQWEsRUFBRSxVQUFVLENBQUM7SUFDMUIsaUJBQWlCLENBQUMsRUFBRSxVQUFVLENBQUM7Q0FDaEM7QUFFRCxzRUFBc0U7QUFDdEUsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwQixRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDbEIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUN2QixDQUFDO0FBRUYsTUFBTSxXQUFXLDhCQUE4QjtJQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDcEIsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLDBCQUEwQixFQUFFLFVBQVUsQ0FBQztDQUN4QztBQUVELE1BQU0sV0FBVyxVQUFVO0lBQ3pCLEdBQUcsRUFBRSxLQUFLLENBQUM7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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,yBAAyB,EAI/B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { GSEContract, RegistryContract, RollupContract } from '@aztec-labs/ether
|
|
|
6
6
|
import { createL1TxUtils } from '@aztec-labs/ethereum/l1-tx-utils';
|
|
7
7
|
import { EthCheatCodes } from '@aztec-labs/ethereum/test';
|
|
8
8
|
import { getActiveNetworkName } from '@aztec-labs/foundation/config';
|
|
9
|
+
import { getEnv } from '@aztec-labs/foundation/config/env';
|
|
9
10
|
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
10
11
|
import { Signature } from '@aztec-labs/foundation/eth-signature';
|
|
11
12
|
import { DateProvider } from '@aztec-labs/foundation/timer';
|
|
@@ -174,7 +175,7 @@ export async function addL1ValidatorViaRollup({ rpcUrls, chainId, privateKey, mn
|
|
|
174
175
|
}
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
|
-
export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, rollupAddress, log, debugLogger }) {
|
|
178
|
+
export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, recipientAddress, rollupAddress, log, debugLogger }) {
|
|
178
179
|
const dualLog = makeDualLog(log, debugLogger);
|
|
179
180
|
const account = getAccount(privateKey, mnemonic);
|
|
180
181
|
const chain = createEthereumChain(rpcUrls, chainId);
|
|
@@ -182,7 +183,7 @@ export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic
|
|
|
182
183
|
const l1TxUtils = createL1TxUtils(l1Client, {
|
|
183
184
|
logger: debugLogger
|
|
184
185
|
});
|
|
185
|
-
dualLog(`Removing validator ${validatorAddress.toString()} from rollup ${rollupAddress.toString()}`);
|
|
186
|
+
dualLog(`Removing validator ${validatorAddress.toString()} from rollup ${rollupAddress.toString()}, ` + `withdrawing its stake to ${recipientAddress.toString()}`);
|
|
186
187
|
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
187
188
|
to: rollupAddress.toString(),
|
|
188
189
|
data: encodeFunctionData({
|
|
@@ -190,7 +191,7 @@ export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic
|
|
|
190
191
|
functionName: 'initiateWithdraw',
|
|
191
192
|
args: [
|
|
192
193
|
validatorAddress.toString(),
|
|
193
|
-
|
|
194
|
+
recipientAddress.toString()
|
|
194
195
|
]
|
|
195
196
|
})
|
|
196
197
|
});
|
|
@@ -198,7 +199,8 @@ export async function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic
|
|
|
198
199
|
}
|
|
199
200
|
/** Loads the published config of the network selected with --network, which takes precedence over the environment. */ export async function getAttesterExitNetwork(name) {
|
|
200
201
|
const networkName = getActiveNetworkName(name);
|
|
201
|
-
const
|
|
202
|
+
const { DATA_DIRECTORY } = getEnv();
|
|
203
|
+
const cacheDir = DATA_DIRECTORY ? join(DATA_DIRECTORY, 'cache') : undefined;
|
|
202
204
|
const config = networkName === 'local' ? undefined : await getNetworkConfig(networkName, cacheDir);
|
|
203
205
|
if (networkName !== 'local' && !config) {
|
|
204
206
|
throw new Error(`Network ${networkName} has no published config`);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LogFn } from '@aztec-labs/foundation/log';
|
|
2
2
|
export declare function generateP2PPrivateKey(log: LogFn): Promise<void>;
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfcDJwX3ByaXZhdGVfa2V5LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy9taXNjL2dlbmVyYXRlX3AycF9wcml2YXRlX2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl4RCx3QkFBc0IscUJBQXFCLENBQUMsR0FBRyxFQUFFLEtBQUssaUJBS3JEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_p2p_private_key.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_p2p_private_key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"generate_p2p_private_key.d.ts","sourceRoot":"","sources":["../../../src/cmds/misc/generate_p2p_private_key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,iBAKrD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
2
3
|
export async function generateP2PPrivateKey(log) {
|
|
3
4
|
const peerId = await createSecp256k1PeerId();
|
|
4
5
|
const exportedPeerId = Buffer.from(peerId.privateKey).toString('hex');
|
|
@@ -2,4 +2,4 @@ import type { LogFn } from '@aztec-labs/foundation/log';
|
|
|
2
2
|
import type { NewValidatorKeystoreOptions } from './new.js';
|
|
3
3
|
export type AddValidatorKeysOptions = NewValidatorKeystoreOptions;
|
|
4
4
|
export declare function addValidatorKeys(existing: string, options: AddValidatorKeysOptions, log: LogFn): Promise<void>;
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy92YWxpZGF0b3Jfa2V5cy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFReEQsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFhNUQsTUFBTSxNQUFNLHVCQUF1QixHQUFHLDJCQUEyQixDQUFDO0FBRWxFLHdCQUFzQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsS0FBSyxpQkE4R3BHIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator_keys/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator_keys/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAQxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAa5D,MAAM,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAElE,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,GAAG,EAAE,KAAK,iBA8GpG"}
|
|
@@ -2,7 +2,8 @@ import { loadKeystoreFile } from '@aztec-labs/node-keystore/loader';
|
|
|
2
2
|
import { wordlist } from '@scure/bip39/wordlists/english.js';
|
|
3
3
|
import { dirname, isAbsolute, join } from 'path';
|
|
4
4
|
import { generateMnemonic } from 'viem/accounts';
|
|
5
|
-
import {
|
|
5
|
+
import { resolveBlsKeyDerivationPolicy } from './bls_key_derivation.js';
|
|
6
|
+
import { buildValidatorEntries, getBlsDerivationPaths, getBlsKeyCandidates, logValidatorSummaries, maybePrintJson, writeBlsBn254ToFile, writeEthJsonV3ToFile, writeKeystoreFile } from './shared.js';
|
|
6
7
|
import { validateBlsPathOptions, validatePublisherOptions, validateRemoteSignerOptions } from './utils.js';
|
|
7
8
|
export async function addValidatorKeys(existing, options, log) {
|
|
8
9
|
// validate bls-path inputs before proceeding with key generation
|
|
@@ -11,6 +12,7 @@ export async function addValidatorKeys(existing, options, log) {
|
|
|
11
12
|
validatePublisherOptions(options);
|
|
12
13
|
// validate remote signer options
|
|
13
14
|
validateRemoteSignerOptions(options);
|
|
15
|
+
const blsKeyDerivation = resolveBlsKeyDerivationPolicy(options);
|
|
14
16
|
const { dataDir, file, count, publisherCount = 0, publishers, mnemonic, accountIndex = 0, addressIndex, ikm, blsPath, json, feeRecipient: feeRecipientOpt, coinbase: coinbaseOpt, remoteSigner: remoteSignerOpt, password, encryptedKeystoreDir } = options;
|
|
15
17
|
const validatorCount = typeof count === 'number' && Number.isFinite(count) && count > 0 ? Math.floor(count) : 1;
|
|
16
18
|
const baseAddressIndex = addressIndex ?? 0;
|
|
@@ -41,7 +43,10 @@ export async function addValidatorKeys(existing, options, log) {
|
|
|
41
43
|
blsPath,
|
|
42
44
|
feeRecipient,
|
|
43
45
|
coinbase,
|
|
44
|
-
remoteSigner
|
|
46
|
+
remoteSigner,
|
|
47
|
+
blsKeyDerivation,
|
|
48
|
+
// `add` never prints the mnemonic it generates.
|
|
49
|
+
generatedMnemonic: mnemonic ? undefined : 'hidden'
|
|
45
50
|
});
|
|
46
51
|
keystore.validators.push(...validators);
|
|
47
52
|
// If password provided, write ETH JSON V3 and BLS BN254 keystores and replace plaintext
|
|
@@ -61,7 +66,7 @@ export async function addValidatorKeys(existing, options, log) {
|
|
|
61
66
|
await writeBlsBn254ToFile(keystore.validators, {
|
|
62
67
|
outDir: targetDir,
|
|
63
68
|
password,
|
|
64
|
-
|
|
69
|
+
derivationPaths: getBlsDerivationPaths(summaries)
|
|
65
70
|
});
|
|
66
71
|
}
|
|
67
72
|
let outputPath = existing;
|
|
@@ -79,5 +84,10 @@ export async function addValidatorKeys(existing, options, log) {
|
|
|
79
84
|
log(`Updated keystore ${outputPath} with ${validators.length} new validator(s)`);
|
|
80
85
|
logValidatorSummaries(log, summaries);
|
|
81
86
|
}
|
|
82
|
-
|
|
87
|
+
const blsKeyCandidates = getBlsKeyCandidates(summaries);
|
|
88
|
+
const outputData = blsKeyCandidates.length > 0 ? {
|
|
89
|
+
...keystore,
|
|
90
|
+
blsKeyCandidates
|
|
91
|
+
} : keystore;
|
|
92
|
+
maybePrintJson(log, !!json, outputData);
|
|
83
93
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type ProofOfPossessionGasModel } from '@aztec-labs/ethereum/bn254';
|
|
2
|
+
import type { Hex } from '@aztec-labs/foundation/string';
|
|
3
|
+
/** What a BLS key derivation version checks: a key fits if its estimated minimum stipend is at most `budget`. */
|
|
4
|
+
export type BlsKeyDerivationVersion = {
|
|
5
|
+
version: number;
|
|
6
|
+
gasModel: ProofOfPossessionGasModel;
|
|
7
|
+
budget: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* BLS key derivation v6. The gas model is a frozen copy of `AMSTERDAM_PROOF_OF_POSSESSION_GAS_MODEL` from
|
|
11
|
+
* `@aztec-labs/ethereum/bn254`. The budget is the 300,000 gas `proofOfPossessionGasLimit` that the v6 upgrade
|
|
12
|
+
* payload sets on the GSE, minus a 10% margin.
|
|
13
|
+
*
|
|
14
|
+
* With per-attempt probabilities 0.189030554816 of reaching the square root and 0.094515277408 of succeeding, about
|
|
15
|
+
* 5.8243e-6 of keys (1 in 171,694) estimate over the budget, so they move to a later candidate under v6.
|
|
16
|
+
*
|
|
17
|
+
* Frozen once a CLI release ships it: changing any value changes which BLS key `--bls-key-derivation-v6` selects for
|
|
18
|
+
* the same mnemonic and indices, so operators could no longer regenerate their keys. Add a new version instead.
|
|
19
|
+
*/
|
|
20
|
+
export declare const BLS_KEY_DERIVATION_V6: BlsKeyDerivationVersion;
|
|
21
|
+
/** Version checked when no derivation flag is given. A future version gets its own flag next to `--bls-key-derivation-v6`. */
|
|
22
|
+
export declare const LATEST_BLS_KEY_DERIVATION: BlsKeyDerivationVersion;
|
|
23
|
+
/** Number of candidates tried per validator before key selection gives up. */
|
|
24
|
+
export declare const MAX_BLS_KEY_CANDIDATES = 256;
|
|
25
|
+
/**
|
|
26
|
+
* How a validator's BLS key is chosen among its candidates. The budget is `maxGas` when set (a stricter, user-chosen
|
|
27
|
+
* value), or the version's budget otherwise.
|
|
28
|
+
* - `check`: candidate 0, failing if it estimates over the budget (no `--bls-key-derivation-v6`).
|
|
29
|
+
* - `retry`: the first candidate within the budget (`--bls-key-derivation-v6`).
|
|
30
|
+
* - `none`: candidate 0, unchecked (`--skip-bls-key-gas-check`).
|
|
31
|
+
*/
|
|
32
|
+
export type BlsKeyDerivationPolicy = {
|
|
33
|
+
mode: 'check';
|
|
34
|
+
version: BlsKeyDerivationVersion;
|
|
35
|
+
maxGas?: number;
|
|
36
|
+
} | {
|
|
37
|
+
mode: 'retry';
|
|
38
|
+
version: BlsKeyDerivationVersion;
|
|
39
|
+
maxGas?: number;
|
|
40
|
+
} | {
|
|
41
|
+
mode: 'none';
|
|
42
|
+
};
|
|
43
|
+
/** CLI options that choose the BLS key derivation policy. */
|
|
44
|
+
export type BlsKeyDerivationOptions = {
|
|
45
|
+
blsKeyDerivationV6?: boolean;
|
|
46
|
+
blsKeyDerivationMaxGas?: number;
|
|
47
|
+
skipBlsKeyGasCheck?: boolean;
|
|
48
|
+
};
|
|
49
|
+
/** A BLS key chosen for a validator, with the derivation path and candidate that produced it. */
|
|
50
|
+
export type SelectedBlsKey = {
|
|
51
|
+
privateKey: Hex<32>;
|
|
52
|
+
/** Full derivation path, including the candidate component when the candidate is not 0. */
|
|
53
|
+
path: string;
|
|
54
|
+
candidate: number;
|
|
55
|
+
/** The `--bls-key-derivation-max-gas` value, when it took part in selecting a candidate other than 0. */
|
|
56
|
+
maxGas?: number;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* How the CLI handled a mnemonic it generated because none was passed: `shown` when it printed the mnemonic before key
|
|
60
|
+
* derivation, so the operator can pass it back, and `hidden` otherwise.
|
|
61
|
+
*/
|
|
62
|
+
export type GeneratedMnemonic = 'shown' | 'hidden';
|
|
63
|
+
/** Thrown when candidate 0 estimates over the budget and no flag says what to do about it. */
|
|
64
|
+
export declare class BlsKeyOverGasBudgetError extends Error {
|
|
65
|
+
readonly path: string;
|
|
66
|
+
readonly estimatedGas: number;
|
|
67
|
+
readonly version: BlsKeyDerivationVersion;
|
|
68
|
+
readonly maxGas: number | undefined;
|
|
69
|
+
constructor(path: string, estimatedGas: number, version: BlsKeyDerivationVersion, maxGas: number | undefined, generatedMnemonic: GeneratedMnemonic | undefined);
|
|
70
|
+
}
|
|
71
|
+
/** Validates the BLS key derivation flags and turns them into a policy. */
|
|
72
|
+
export declare function resolveBlsKeyDerivationPolicy(options: BlsKeyDerivationOptions): BlsKeyDerivationPolicy;
|
|
73
|
+
/** Derivation path of a candidate: candidate 0 is the per-validator path itself, others append `/<candidate>`. */
|
|
74
|
+
export declare function blsCandidatePath(perValidatorPath: string, candidate: number): string;
|
|
75
|
+
/** Inputs to {@link selectBlsKey}. */
|
|
76
|
+
export type SelectBlsKeyInput = {
|
|
77
|
+
mnemonic?: string;
|
|
78
|
+
ikm?: string;
|
|
79
|
+
perValidatorPath: string;
|
|
80
|
+
/** Set when the CLI generated `mnemonic` in this run, to tell the operator how to keep or replace it on error. */
|
|
81
|
+
generatedMnemonic?: GeneratedMnemonic;
|
|
82
|
+
maxCandidates?: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Derives a validator's BLS key from `perValidatorPath` under the given policy. Only the mnemonic or IKM, the path
|
|
86
|
+
* and the policy decide the result, so re-running with the same inputs regenerates the same key.
|
|
87
|
+
*/
|
|
88
|
+
export declare function selectBlsKey(policy: BlsKeyDerivationPolicy, input: SelectBlsKeyInput): SelectedBlsKey;
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxzX2tleV9kZXJpdmF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy92YWxpZGF0b3Jfa2V5cy9ibHNfa2V5X2Rlcml2YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUsseUJBQXlCLEVBRy9CLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekQsaUhBQWlIO0FBQ2pILE1BQU0sTUFBTSx1QkFBdUIsR0FBRztJQUNwQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQztJQUNwQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0NBQ2hCLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsZUFBTyxNQUFNLHFCQUFxQixFQUFFLHVCQVVuQyxDQUFDO0FBRUYsOEhBQThIO0FBQzlILGVBQU8sTUFBTSx5QkFBeUIseUJBQXdCLENBQUM7QUFFL0QsOEVBQThFO0FBQzlFLGVBQU8sTUFBTSxzQkFBc0IsTUFBTSxDQUFDO0FBRTFDOzs7Ozs7R0FNRztBQUNILE1BQU0sTUFBTSxzQkFBc0IsR0FDOUI7SUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDO0lBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FDcEU7SUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDO0lBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FDcEU7SUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFBO0NBQUUsQ0FBQztBQUVyQiw2REFBNkQ7QUFDN0QsTUFBTSxNQUFNLHVCQUF1QixHQUFHO0lBQ3BDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzdCLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2hDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO0NBQzlCLENBQUM7QUFFRixpR0FBaUc7QUFDakcsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLDJGQUEyRjtJQUMzRixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQix5R0FBeUc7SUFDekcsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2pCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQVNuRCw4RkFBOEY7QUFDOUYscUJBQWEsd0JBQXlCLFNBQVEsS0FBSzthQUUvQixJQUFJLEVBQUUsTUFBTTthQUNaLFlBQVksRUFBRSxNQUFNO2FBQ3BCLE9BQU8sRUFBRSx1QkFBdUI7YUFDaEMsTUFBTSxFQUFFLE1BQU0sR0FBRyxTQUFTO0lBSjVDLFlBQ2tCLElBQUksRUFBRSxNQUFNLEVBQ1osWUFBWSxFQUFFLE1BQU0sRUFDcEIsT0FBTyxFQUFFLHVCQUF1QixFQUNoQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDMUMsaUJBQWlCLEVBQUUsaUJBQWlCLEdBQUcsU0FBUyxFQWtCakQ7Q0FDRjtBQUVELDJFQUEyRTtBQUMzRSx3QkFBZ0IsNkJBQTZCLENBQUMsT0FBTyxFQUFFLHVCQUF1QixHQUFHLHNCQUFzQixDQWlDdEc7QUFFRCxrSEFBa0g7QUFDbEgsd0JBQWdCLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FFcEY7QUFFRCxzQ0FBc0M7QUFDdEMsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQixHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDYixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsa0hBQWtIO0lBQ2xILGlCQUFpQixDQUFDLEVBQUUsaUJBQWlCLENBQUM7SUFDdEMsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3hCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCx3QkFBZ0IsWUFBWSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEdBQUcsY0FBYyxDQXVDckcifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bls_key_derivation.d.ts","sourceRoot":"","sources":["../../../src/cmds/validator_keys/bls_key_derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,yBAAyB,EAG/B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AAEzD,iHAAiH;AACjH,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,uBAUnC,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,yBAAyB,yBAAwB,CAAC;AAE/D,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,uBAAuB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,uBAAuB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,6DAA6D;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,iGAAiG;AACjG,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AASnD,8FAA8F;AAC9F,qBAAa,wBAAyB,SAAQ,KAAK;aAE/B,IAAI,EAAE,MAAM;aACZ,YAAY,EAAE,MAAM;aACpB,OAAO,EAAE,uBAAuB;aAChC,MAAM,EAAE,MAAM,GAAG,SAAS;IAJ5C,YACkB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1C,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAkBjD;CACF;AAED,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAiCtG;AAED,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,sCAAsC;AACtC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,kHAAkH;IAClH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAuCrG"}
|