@aztec/cli 0.87.7 → 1.0.0-nightly.20250604

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.
@@ -60,8 +60,7 @@ export async function sequencers(opts) {
60
60
  const hash = await writeableRollup.write.deposit([
61
61
  who,
62
62
  who,
63
- who,
64
- config.minimumStake
63
+ true
65
64
  ]);
66
65
  await publicClient.waitForTransactionReceipt({
67
66
  hash
@@ -1,4 +1,4 @@
1
- import type { EthAddress } from '@aztec/foundation/eth-address';
1
+ import { type Operator } from '@aztec/ethereum';
2
2
  import type { LogFn, Logger } from '@aztec/foundation/log';
3
- export declare function deployL1Contracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, acceleratedTestDeployments: boolean, json: boolean, initialValidators: EthAddress[], log: LogFn, debugLogger: Logger): Promise<void>;
3
+ export declare function deployL1Contracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, acceleratedTestDeployments: boolean, json: boolean, initialValidators: Operator[], log: LogFn, debugLogger: Logger): Promise<void>;
4
4
  //# sourceMappingURL=deploy_l1_contracts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,0BAA0B,EAAE,OAAO,EACnC,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,UAAU,EAAE,EAC/B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAmDpB"}
1
+ {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,0BAA0B,EAAE,OAAO,EACnC,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAoDpB"}
@@ -18,6 +18,7 @@ export async function deployL1Contracts(rpcUrls, chainId, privateKey, mnemonic,
18
18
  } else {
19
19
  log(`Rollup Address: ${l1ContractAddresses.rollupAddress.toString()}`);
20
20
  log(`Registry Address: ${l1ContractAddresses.registryAddress.toString()}`);
21
+ log(`GSE Address: ${l1ContractAddresses.gseAddress?.toString()}`);
21
22
  log(`L1 -> L2 Inbox Address: ${l1ContractAddresses.inboxAddress.toString()}`);
22
23
  log(`L2 -> L1 Outbox Address: ${l1ContractAddresses.outboxAddress.toString()}`);
23
24
  log(`Fee Juice Address: ${l1ContractAddresses.feeJuiceAddress.toString()}`);
@@ -31,7 +32,7 @@ export async function deployL1Contracts(rpcUrls, chainId, privateKey, mnemonic,
31
32
  log(`FeeAssetHandler Address: ${l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
32
33
  log(`StakingAssetHandler Address: ${l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
33
34
  log(`Initial funded accounts: ${initialFundedAccounts.map((a)=>a.toString()).join(', ')}`);
34
- log(`Initial validators: ${initialValidators.map((a)=>a.toString()).join(', ')}`);
35
+ log(`Initial validators: ${initialValidators.map((a)=>a.attester.toString()).join(', ')}`);
35
36
  log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
36
37
  }
37
38
  }
@@ -1,5 +1,5 @@
1
1
  import type { LogFn, Logger } from '@aztec/foundation/log';
2
2
  import { type Hex } from 'viem';
3
- export declare function deployUltraHonkVerifier(rollupAddress: Hex | undefined, ethRpcUrls: string[], l1ChainId: string, privateKey: string | undefined, mnemonic: string, pxeRpcUrl: string, log: LogFn, debugLogger: Logger): Promise<void>;
3
+ export declare function deployUltraHonkVerifier(rollupAddress: Hex | undefined, ethRpcUrls: string[], l1ChainId: string, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, pxeRpcUrl: string, log: LogFn, debugLogger: Logger): Promise<void>;
4
4
  export declare function deployMockVerifier(rollupAddress: Hex | undefined, ethRpcUrls: string[], l1ChainId: string, privateKey: string | undefined, mnemonic: string, pxeRpcUrl: string, log: LogFn, debugLogger: Logger): Promise<void>;
5
5
  //# sourceMappingURL=deploy_l1_verifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_l1_verifier.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAgCpB;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAkCpB"}
1
+ {"version":3,"file":"deploy_l1_verifier.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAG7C,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAmCpB;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAkCpB"}
@@ -3,8 +3,12 @@ import { createEthereumChain, createExtendedL1Client, deployL1Contract } from '@
3
3
  import { HonkVerifierAbi, HonkVerifierBytecode } from '@aztec/l1-artifacts';
4
4
  import { InvalidOptionArgumentError } from 'commander';
5
5
  import { getContract } from 'viem';
6
- export async function deployUltraHonkVerifier(rollupAddress, ethRpcUrls, l1ChainId, privateKey, mnemonic, pxeRpcUrl, log, debugLogger) {
7
- const extendedClient = createExtendedL1Client(ethRpcUrls, privateKey ?? mnemonic, createEthereumChain(ethRpcUrls, l1ChainId).chainInfo);
6
+ import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
7
+ export async function deployUltraHonkVerifier(rollupAddress, ethRpcUrls, l1ChainId, privateKey, mnemonic, mnemonicIndex, pxeRpcUrl, log, debugLogger) {
8
+ const account = !privateKey ? mnemonicToAccount(mnemonic, {
9
+ addressIndex: mnemonicIndex
10
+ }) : privateKeyToAccount(`${privateKey.startsWith('0x') ? '' : '0x'}${privateKey}`);
11
+ const extendedClient = createExtendedL1Client(ethRpcUrls, account, createEthereumChain(ethRpcUrls, l1ChainId).chainInfo);
8
12
  if (!rollupAddress && pxeRpcUrl) {
9
13
  const pxe = await createCompatibleClient(pxeRpcUrl, debugLogger);
10
14
  const { l1ContractAddresses } = await pxe.getNodeInfo();
@@ -1,4 +1,5 @@
1
+ import { type Operator } from '@aztec/ethereum';
1
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { LogFn, Logger } from '@aztec/foundation/log';
3
- export declare function deployNewRollup(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, json: boolean, initialValidators: EthAddress[], log: LogFn, debugLogger: Logger): Promise<void>;
4
+ export declare function deployNewRollup(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, json: boolean, initialValidators: Operator[], log: LogFn, debugLogger: Logger): Promise<void>;
4
5
  //# sourceMappingURL=deploy_new_rollup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_new_rollup.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_new_rollup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,eAAe,CACnC,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,UAAU,EAAE,EAC/B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA6CpB"}
1
+ {"version":3,"file":"deploy_new_rollup.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_new_rollup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,eAAe,CACnC,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA6CpB"}
@@ -14,14 +14,14 @@ export async function deployNewRollup(registryAddress, rpcUrls, chainId, private
14
14
  log(JSON.stringify({
15
15
  rollupAddress: rollup.address,
16
16
  initialFundedAccounts: initialFundedAccounts.map((a)=>a.toString()),
17
- initialValidators: initialValidators.map((a)=>a.toString()),
17
+ initialValidators: initialValidators.map((a)=>a.attester.toString()),
18
18
  genesisArchiveRoot: genesisArchiveRoot.toString(),
19
19
  slashFactoryAddress: slashFactoryAddress.toString()
20
20
  }, null, 2));
21
21
  } else {
22
22
  log(`Rollup Address: ${rollup.address}`);
23
23
  log(`Initial funded accounts: ${initialFundedAccounts.map((a)=>a.toString()).join(', ')}`);
24
- log(`Initial validators: ${initialValidators.map((a)=>a.toString()).join(', ')}`);
24
+ log(`Initial validators: ${initialValidators.map((a)=>a.attester.toString()).join(', ')}`);
25
25
  log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
26
26
  log(`Slash Factory Address: ${slashFactoryAddress.toString()}`);
27
27
  }
@@ -94,7 +94,7 @@ export function injectCommands(program, log, debugLogger) {
94
94
  const account = generateL1Account();
95
95
  log(JSON.stringify(account, null, 2));
96
96
  });
97
- program.command('add-l1-validator').description('Adds a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use sending the transaction', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use sending the transaction', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--attester <address>', 'ethereum address of the attester', parseEthereumAddress).option('--proposer-eoa <address>', 'ethereum address of the proposer EOA', parseEthereumAddress).option('--staking-asset-handler <address>', 'ethereum address of the staking asset handler', parseEthereumAddress).action(async (options)=>{
97
+ program.command('add-l1-validator').description('Adds a validator to the L1 rollup contract.').addOption(l1RpcUrlsOption).option('-pk, --private-key <string>', 'The private key to use sending the transaction', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use sending the transaction', 'test test test test test test test test test test test junk').addOption(l1ChainIdOption).option('--attester <address>', 'ethereum address of the attester', parseEthereumAddress).option('--staking-asset-handler <address>', 'ethereum address of the staking asset handler', parseEthereumAddress).action(async (options)=>{
98
98
  const { addL1Validator } = await import('./update_l1_validators.js');
99
99
  await addL1Validator({
100
100
  rpcUrls: options.l1RpcUrls,
@@ -102,7 +102,6 @@ export function injectCommands(program, log, debugLogger) {
102
102
  privateKey: options.privateKey,
103
103
  mnemonic: options.mnemonic,
104
104
  attesterAddress: options.attester,
105
- proposerEOAAddress: options.proposerEoa,
106
105
  stakingAssetHandlerAddress: options.stakingAssetHandler,
107
106
  log,
108
107
  debugLogger
@@ -167,12 +166,12 @@ export function injectCommands(program, log, debugLogger) {
167
166
  debugLogger
168
167
  });
169
168
  });
170
- program.command('deploy-l1-verifier').description('Deploys the rollup verifier contract').addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).addOption(makePxeOption(false).conflicts('rollup-address')).addOption(new Option('--rollup-address <string>', 'The address of the rollup contract').env('ROLLUP_CONTRACT_ADDRESS').argParser(parseEthereumAddress).conflicts('rpc-url')).option('--l1-private-key <string>', 'The L1 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').requiredOption('--verifier <verifier>', 'Either mock or real', 'real').action(async (options)=>{
169
+ program.command('deploy-l1-verifier').description('Deploys the rollup verifier contract').addOption(l1RpcUrlsOption).addOption(l1ChainIdOption).addOption(makePxeOption(false).conflicts('rollup-address')).addOption(new Option('--rollup-address <string>', 'The address of the rollup contract').env('ROLLUP_CONTRACT_ADDRESS').argParser(parseEthereumAddress).conflicts('rpc-url')).option('--l1-private-key <string>', 'The L1 private key to use for deployment', PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', (arg)=>parseInt(arg), 0).requiredOption('--verifier <verifier>', 'Either mock or real', 'real').action(async (options)=>{
171
170
  const { deployMockVerifier, deployUltraHonkVerifier } = await import('./deploy_l1_verifier.js');
172
171
  if (options.verifier === 'mock') {
173
172
  await deployMockVerifier(options.rollupAddress?.toString(), options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.rpcUrl, log, debugLogger);
174
173
  } else {
175
- await deployUltraHonkVerifier(options.rollupAddress?.toString(), options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.rpcUrl, log, debugLogger);
174
+ await deployUltraHonkVerifier(options.rollupAddress?.toString(), options.l1RpcUrls, options.l1ChainId, options.l1PrivateKey, options.mnemonic, options.mnemonicIndex, options.rpcUrl, log, debugLogger);
176
175
  }
177
176
  });
178
177
  program.command('bridge-erc20').description('Bridges ERC20 tokens to L2.').argument('<amount>', 'The amount of Fee Juice to mint and bridge.', parseBigint).argument('<recipient>', 'Aztec address of the recipient.', parseAztecAddress).addOption(l1RpcUrlsOption).option('-m, --mnemonic <string>', 'The mnemonic to use for deriving the Ethereum address that will mint and bridge', 'test test test test test test test test test test test junk').option('--mint', 'Mint the tokens on L1', false).option('--private', 'If the bridge should use the private flow', false).addOption(l1ChainIdOption).requiredOption('-t, --token <string>', 'The address of the token to bridge', parseEthereumAddress).requiredOption('-p, --portal <string>', 'The address of the portal contract', parseEthereumAddress).option('-f, --faucet <string>', 'The address of the faucet contract (only used if minting)', parseEthereumAddress).option('--l1-private-key <string>', 'The private key to use for deployment', PRIVATE_KEY).option('--json', 'Output the claim in JSON format').action(async (amount, recipient, options)=>{
@@ -23,9 +23,8 @@ export declare function generateL1Account(): {
23
23
  privateKey: `0x${string}`;
24
24
  address: `0x${string}`;
25
25
  };
26
- export declare function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, proposerEOAAddress, stakingAssetHandlerAddress, log, debugLogger, }: StakingAssetHandlerCommandArgs & LoggerArgs & {
26
+ export declare function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, stakingAssetHandlerAddress, log, debugLogger, }: StakingAssetHandlerCommandArgs & LoggerArgs & {
27
27
  attesterAddress: EthAddress;
28
- proposerEOAAddress: EthAddress;
29
28
  }): Promise<void>;
30
29
  export declare function removeL1Validator({ rpcUrls, chainId, privateKey, mnemonic, validatorAddress, rollupAddress, log, debugLogger, }: RollupCommandArgs & LoggerArgs & {
31
30
  validatorAddress: EthAddress;
@@ -1 +1 @@
1
- {"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,EAAE,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,KAAK,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB;;;EAQhC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,GAAG,EACH,WAAW,GACZ,EAAE,8BAA8B,GAAG,UAAU,GAAG;IAAE,eAAe,EAAE,UAAU,CAAC;IAAC,kBAAkB,EAAE,UAAU,CAAA;CAAE,iBAiD/G;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,gBAAgB,EAAE,UAAU,CAAA;CAAE,iBAiBnE;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,iBAgBhC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,aAAa,EACb,SAAS,EACT,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAyBxD;AAED,wBAAsB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,iBAAiB,GAAG,UAAU,iBAwBzG"}
1
+ {"version":3,"file":"update_l1_validators.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/update_l1_validators.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,EAAE,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,KAAK,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB;;;EAQhC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,eAAe,EACf,0BAA0B,EAC1B,GAAG,EACH,WAAW,GACZ,EAAE,8BAA8B,GAAG,UAAU,GAAG;IAAE,eAAe,EAAE,UAAU,CAAA;CAAE,iBAuC/E;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,gBAAgB,EAAE,UAAU,CAAA;CAAE,iBAiBnE;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,iBAgBhC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,OAAO,EACP,aAAa,EACb,SAAS,EACT,GAAG,EACH,WAAW,GACZ,EAAE,iBAAiB,GAAG,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAyBxD;AAED,wBAAsB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,iBAAiB,GAAG,UAAU,iBAwBzG"}
@@ -1,5 +1,5 @@
1
- import { EthCheatCodes, L1TxUtils, RollupContract, createEthereumChain, createExtendedL1Client, getExpectedAddress, getL1ContractsConfigEnvVars, getPublicClient, isAnvilTestChain } from '@aztec/ethereum';
2
- import { ForwarderAbi, ForwarderBytecode, RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
1
+ import { EthCheatCodes, L1TxUtils, RollupContract, createEthereumChain, createExtendedL1Client, getL1ContractsConfigEnvVars, getPublicClient, isAnvilTestChain } from '@aztec/ethereum';
2
+ import { RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
3
3
  import { encodeFunctionData, formatEther, getContract } from 'viem';
4
4
  import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
5
5
  export function generateL1Account() {
@@ -11,7 +11,7 @@ export function generateL1Account() {
11
11
  address: account.address
12
12
  };
13
13
  }
14
- export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, proposerEOAAddress, stakingAssetHandlerAddress, log, debugLogger }) {
14
+ export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, attesterAddress, stakingAssetHandlerAddress, log, debugLogger }) {
15
15
  const dualLog = makeDualLog(log, debugLogger);
16
16
  const account = getAccount(privateKey, mnemonic);
17
17
  const chain = createEthereumChain(rpcUrls, chainId);
@@ -22,10 +22,7 @@ export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, a
22
22
  client: l1Client
23
23
  });
24
24
  const rollup = await stakingAssetHandler.read.getRollup();
25
- const forwarderAddress = getExpectedAddress(ForwarderAbi, ForwarderBytecode, [
26
- proposerEOAAddress.toString()
27
- ], proposerEOAAddress.toString()).address;
28
- dualLog(`Adding validator (${attesterAddress}, ${proposerEOAAddress} [forwarder: ${forwarderAddress}]) to rollup ${rollup.toString()}`);
25
+ dualLog(`Adding validator (${attesterAddress} to rollup ${rollup.toString()}`);
29
26
  const l1TxUtils = new L1TxUtils(l1Client, debugLogger);
30
27
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
31
28
  to: stakingAssetHandlerAddress.toString(),
@@ -33,8 +30,7 @@ export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, a
33
30
  abi: StakingAssetHandlerAbi,
34
31
  functionName: 'addValidator',
35
32
  args: [
36
- attesterAddress.toString(),
37
- forwarderAddress
33
+ attesterAddress.toString()
38
34
  ]
39
35
  }),
40
36
  abi: StakingAssetHandlerAbi
@@ -46,12 +42,12 @@ export async function addL1Validator({ rpcUrls, chainId, privateKey, mnemonic, a
46
42
  if (isAnvilTestChain(chainId)) {
47
43
  dualLog(`Funding validator on L1`);
48
44
  const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
49
- await cheatCodes.setBalance(proposerEOAAddress, 10n ** 20n);
45
+ await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
50
46
  } else {
51
47
  const balance = await l1Client.getBalance({
52
- address: proposerEOAAddress.toString()
48
+ address: attesterAddress.toString()
53
49
  });
54
- dualLog(`Proposer balance: ${formatEther(balance)} ETH`);
50
+ dualLog(`Validator balance: ${formatEther(balance)} ETH`);
55
51
  if (balance === 0n) {
56
52
  dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
57
53
  }
@@ -1,6 +1,6 @@
1
1
  import { EthAddress, type PXE } from '@aztec/aztec.js';
2
2
  import { type ContractArtifact, type FunctionAbi } from '@aztec/aztec.js/abi';
3
- import { type DeployL1ContractsReturnType, type L1ContractsConfig, RollupContract } from '@aztec/ethereum';
3
+ import { type DeployL1ContractsReturnType, type L1ContractsConfig, type Operator, RollupContract } from '@aztec/ethereum';
4
4
  import type { Fr } from '@aztec/foundation/fields';
5
5
  import type { LogFn, Logger } from '@aztec/foundation/log';
6
6
  import type { NoirPackageConfig } from '@aztec/foundation/noir';
@@ -18,8 +18,8 @@ export declare function getFunctionAbi(artifact: ContractArtifact, fnName: strin
18
18
  * @param privateKey - The private key to be used in contract deployment.
19
19
  * @param mnemonic - The mnemonic to be used in contract deployment.
20
20
  */
21
- export declare function deployAztecContracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: EthAddress[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, acceleratedTestDeployments: boolean, config: L1ContractsConfig, debugLogger: Logger): Promise<DeployL1ContractsReturnType>;
22
- export declare function deployNewRollupContracts(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: EthAddress[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, config: L1ContractsConfig, logger: Logger): Promise<{
21
+ export declare function deployAztecContracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, acceleratedTestDeployments: boolean, config: L1ContractsConfig, debugLogger: Logger): Promise<DeployL1ContractsReturnType>;
22
+ export declare function deployNewRollupContracts(registryAddress: EthAddress, rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, config: L1ContractsConfig, logger: Logger): Promise<{
23
23
  rollup: RollupContract;
24
24
  slashFactoryAddress: EthAddress;
25
25
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3G,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAShE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAMtF;AAED;;;;;;GAMG;AACH,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,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,0BAA0B,EAAE,OAAO,EACnC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,CAAC,CA4BtC;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,mBAAmB,EAAE,UAAU,CAAA;CAAE,CAAC,CAkCtE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAKjE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,6BA4BpE;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;;GAO3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,WAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAUtE;AAKD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,iBAyB9E"}
1
+ {"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAShE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAMtF;AAED;;;;;;GAMG;AACH,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,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,0BAA0B,EAAE,OAAO,EACnC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,CAAC,CA4BtC;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,mBAAmB,EAAE,UAAU,CAAA;CAAE,CAAC,CAmCtE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAKjE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,6BA4BpE;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;;GAO3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,WAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAUtE;AAKD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,iBAyB9E"}
@@ -53,8 +53,12 @@ export async function deployNewRollupContracts(registryAddress, rpcUrls, chainId
53
53
  const client = createExtendedL1Client(rpcUrls, account, chain.chainInfo, undefined, mnemonicIndex);
54
54
  if (!initialValidators || initialValidators.length === 0) {
55
55
  // initialize the new rollup with Amin's validator address.
56
+ const amin = EthAddress.fromString('0x3b218d0F26d15B36C715cB06c949210a0d630637');
56
57
  initialValidators = [
57
- EthAddress.fromString('0x3b218d0F26d15B36C715cB06c949210a0d630637')
58
+ {
59
+ attester: amin,
60
+ withdrawer: amin
61
+ }
58
62
  ];
59
63
  logger.info('Initializing new rollup with old attesters', {
60
64
  initialValidators
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/cli",
3
- "version": "0.87.7",
3
+ "version": "1.0.0-nightly.20250604",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./contracts": "./dest/cmds/contracts/index.js",
@@ -65,15 +65,15 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/archiver": "0.87.7",
69
- "@aztec/aztec.js": "0.87.7",
70
- "@aztec/constants": "0.87.7",
71
- "@aztec/entrypoints": "0.87.7",
72
- "@aztec/foundation": "0.87.7",
73
- "@aztec/l1-artifacts": "0.87.7",
74
- "@aztec/p2p": "0.87.7",
75
- "@aztec/stdlib": "0.87.7",
76
- "@aztec/world-state": "0.87.7",
68
+ "@aztec/archiver": "1.0.0-nightly.20250604",
69
+ "@aztec/aztec.js": "1.0.0-nightly.20250604",
70
+ "@aztec/constants": "1.0.0-nightly.20250604",
71
+ "@aztec/entrypoints": "1.0.0-nightly.20250604",
72
+ "@aztec/foundation": "1.0.0-nightly.20250604",
73
+ "@aztec/l1-artifacts": "1.0.0-nightly.20250604",
74
+ "@aztec/p2p": "1.0.0-nightly.20250604",
75
+ "@aztec/stdlib": "1.0.0-nightly.20250604",
76
+ "@aztec/world-state": "1.0.0-nightly.20250604",
77
77
  "@iarna/toml": "^2.2.5",
78
78
  "@libp2p/peer-id-factory": "^3.0.4",
79
79
  "commander": "^12.1.0",
@@ -85,9 +85,9 @@
85
85
  "viem": "2.23.7"
86
86
  },
87
87
  "devDependencies": {
88
- "@aztec/accounts": "0.87.7",
89
- "@aztec/ethereum": "0.87.7",
90
- "@aztec/protocol-contracts": "0.87.7",
88
+ "@aztec/accounts": "1.0.0-nightly.20250604",
89
+ "@aztec/ethereum": "1.0.0-nightly.20250604",
90
+ "@aztec/protocol-contracts": "1.0.0-nightly.20250604",
91
91
  "@jest/globals": "^29.5.0",
92
92
  "@types/jest": "^29.5.0",
93
93
  "@types/lodash.chunk": "^4.2.9",
@@ -103,15 +103,15 @@
103
103
  "typescript": "^5.3.3"
104
104
  },
105
105
  "peerDependencies": {
106
- "@aztec/accounts": "0.87.7",
107
- "@aztec/bb-prover": "0.87.7",
108
- "@aztec/ethereum": "0.87.7",
109
- "@aztec/l1-artifacts": "0.87.7",
110
- "@aztec/noir-contracts.js": "0.87.7",
111
- "@aztec/noir-protocol-circuits-types": "0.87.7",
112
- "@aztec/noir-test-contracts.js": "0.87.7",
113
- "@aztec/protocol-contracts": "0.87.7",
114
- "@aztec/stdlib": "0.87.7"
106
+ "@aztec/accounts": "1.0.0-nightly.20250604",
107
+ "@aztec/bb-prover": "1.0.0-nightly.20250604",
108
+ "@aztec/ethereum": "1.0.0-nightly.20250604",
109
+ "@aztec/l1-artifacts": "1.0.0-nightly.20250604",
110
+ "@aztec/noir-contracts.js": "1.0.0-nightly.20250604",
111
+ "@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250604",
112
+ "@aztec/noir-test-contracts.js": "1.0.0-nightly.20250604",
113
+ "@aztec/protocol-contracts": "1.0.0-nightly.20250604",
114
+ "@aztec/stdlib": "1.0.0-nightly.20250604"
115
115
  },
116
116
  "files": [
117
117
  "dest",
@@ -79,7 +79,7 @@ export async function sequencers(opts: {
79
79
  ].map(txHash => publicClient.waitForTransactionReceipt({ hash: txHash })),
80
80
  );
81
81
 
82
- const hash = await writeableRollup.write.deposit([who, who, who, config.minimumStake]);
82
+ const hash = await writeableRollup.write.deposit([who, who, true]);
83
83
  await publicClient.waitForTransactionReceipt({ hash });
84
84
  log(`Added in tx ${hash}`);
85
85
  } else if (command === 'remove') {
@@ -1,6 +1,5 @@
1
1
  import { getInitialTestAccounts } from '@aztec/accounts/testing';
2
- import { getL1ContractsConfigEnvVars } from '@aztec/ethereum';
3
- import type { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { type Operator, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
4
3
  import type { LogFn, Logger } from '@aztec/foundation/log';
5
4
  import { getGenesisValues } from '@aztec/world-state/testing';
6
5
 
@@ -18,7 +17,7 @@ export async function deployL1Contracts(
18
17
  sponsoredFPC: boolean,
19
18
  acceleratedTestDeployments: boolean,
20
19
  json: boolean,
21
- initialValidators: EthAddress[],
20
+ initialValidators: Operator[],
22
21
  log: LogFn,
23
22
  debugLogger: Logger,
24
23
  ) {
@@ -55,6 +54,7 @@ export async function deployL1Contracts(
55
54
  } else {
56
55
  log(`Rollup Address: ${l1ContractAddresses.rollupAddress.toString()}`);
57
56
  log(`Registry Address: ${l1ContractAddresses.registryAddress.toString()}`);
57
+ log(`GSE Address: ${l1ContractAddresses.gseAddress?.toString()}`);
58
58
  log(`L1 -> L2 Inbox Address: ${l1ContractAddresses.inboxAddress.toString()}`);
59
59
  log(`L2 -> L1 Outbox Address: ${l1ContractAddresses.outboxAddress.toString()}`);
60
60
  log(`Fee Juice Address: ${l1ContractAddresses.feeJuiceAddress.toString()}`);
@@ -68,7 +68,7 @@ export async function deployL1Contracts(
68
68
  log(`FeeAssetHandler Address: ${l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
69
69
  log(`StakingAssetHandler Address: ${l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
70
70
  log(`Initial funded accounts: ${initialFundedAccounts.map(a => a.toString()).join(', ')}`);
71
- log(`Initial validators: ${initialValidators.map(a => a.toString()).join(', ')}`);
71
+ log(`Initial validators: ${initialValidators.map(a => a.attester.toString()).join(', ')}`);
72
72
  log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
73
73
  }
74
74
  }
@@ -5,6 +5,7 @@ import { HonkVerifierAbi, HonkVerifierBytecode } from '@aztec/l1-artifacts';
5
5
 
6
6
  import { InvalidOptionArgumentError } from 'commander';
7
7
  import { type Hex, getContract } from 'viem';
8
+ import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
8
9
 
9
10
  export async function deployUltraHonkVerifier(
10
11
  rollupAddress: Hex | undefined,
@@ -12,13 +13,17 @@ export async function deployUltraHonkVerifier(
12
13
  l1ChainId: string,
13
14
  privateKey: string | undefined,
14
15
  mnemonic: string,
16
+ mnemonicIndex: number,
15
17
  pxeRpcUrl: string,
16
18
  log: LogFn,
17
19
  debugLogger: Logger,
18
20
  ) {
21
+ const account = !privateKey
22
+ ? mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex })
23
+ : privateKeyToAccount(`${privateKey.startsWith('0x') ? '' : '0x'}${privateKey}` as `0x${string}`);
19
24
  const extendedClient = createExtendedL1Client(
20
25
  ethRpcUrls,
21
- privateKey ?? mnemonic,
26
+ account,
22
27
  createEthereumChain(ethRpcUrls, l1ChainId).chainInfo,
23
28
  );
24
29
 
@@ -1,5 +1,5 @@
1
1
  import { getInitialTestAccounts } from '@aztec/accounts/testing';
2
- import { getL1ContractsConfigEnvVars } from '@aztec/ethereum';
2
+ import { type Operator, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
3
3
  import type { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import type { LogFn, Logger } from '@aztec/foundation/log';
5
5
  import { getGenesisValues } from '@aztec/world-state/testing';
@@ -18,7 +18,7 @@ export async function deployNewRollup(
18
18
  testAccounts: boolean,
19
19
  sponsoredFPC: boolean,
20
20
  json: boolean,
21
- initialValidators: EthAddress[],
21
+ initialValidators: Operator[],
22
22
  log: LogFn,
23
23
  debugLogger: Logger,
24
24
  ) {
@@ -50,7 +50,7 @@ export async function deployNewRollup(
50
50
  {
51
51
  rollupAddress: rollup.address,
52
52
  initialFundedAccounts: initialFundedAccounts.map(a => a.toString()),
53
- initialValidators: initialValidators.map(a => a.toString()),
53
+ initialValidators: initialValidators.map(a => a.attester.toString()),
54
54
  genesisArchiveRoot: genesisArchiveRoot.toString(),
55
55
  slashFactoryAddress: slashFactoryAddress.toString(),
56
56
  },
@@ -61,7 +61,7 @@ export async function deployNewRollup(
61
61
  } else {
62
62
  log(`Rollup Address: ${rollup.address}`);
63
63
  log(`Initial funded accounts: ${initialFundedAccounts.map(a => a.toString()).join(', ')}`);
64
- log(`Initial validators: ${initialValidators.map(a => a.toString()).join(', ')}`);
64
+ log(`Initial validators: ${initialValidators.map(a => a.attester.toString()).join(', ')}`);
65
65
  log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
66
66
  log(`Slash Factory Address: ${slashFactoryAddress.toString()}`);
67
67
  }
@@ -289,7 +289,6 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
289
289
  )
290
290
  .addOption(l1ChainIdOption)
291
291
  .option('--attester <address>', 'ethereum address of the attester', parseEthereumAddress)
292
- .option('--proposer-eoa <address>', 'ethereum address of the proposer EOA', parseEthereumAddress)
293
292
  .option('--staking-asset-handler <address>', 'ethereum address of the staking asset handler', parseEthereumAddress)
294
293
  .action(async options => {
295
294
  const { addL1Validator } = await import('./update_l1_validators.js');
@@ -299,7 +298,6 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
299
298
  privateKey: options.privateKey,
300
299
  mnemonic: options.mnemonic,
301
300
  attesterAddress: options.attester,
302
- proposerEOAAddress: options.proposerEoa,
303
301
  stakingAssetHandlerAddress: options.stakingAssetHandler,
304
302
  log,
305
303
  debugLogger,
@@ -438,6 +436,7 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
438
436
  'The mnemonic to use in deployment',
439
437
  'test test test test test test test test test test test junk',
440
438
  )
439
+ .option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
441
440
  .requiredOption('--verifier <verifier>', 'Either mock or real', 'real')
442
441
  .action(async options => {
443
442
  const { deployMockVerifier, deployUltraHonkVerifier } = await import('./deploy_l1_verifier.js');
@@ -459,6 +458,7 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
459
458
  options.l1ChainId,
460
459
  options.l1PrivateKey,
461
460
  options.mnemonic,
461
+ options.mnemonicIndex,
462
462
  options.rpcUrl,
463
463
  log,
464
464
  debugLogger,
@@ -4,14 +4,13 @@ import {
4
4
  RollupContract,
5
5
  createEthereumChain,
6
6
  createExtendedL1Client,
7
- getExpectedAddress,
8
7
  getL1ContractsConfigEnvVars,
9
8
  getPublicClient,
10
9
  isAnvilTestChain,
11
10
  } from '@aztec/ethereum';
12
11
  import type { EthAddress } from '@aztec/foundation/eth-address';
13
12
  import type { LogFn, Logger } from '@aztec/foundation/log';
14
- import { ForwarderAbi, ForwarderBytecode, RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
13
+ import { RollupAbi, StakingAssetHandlerAbi } from '@aztec/l1-artifacts';
15
14
 
16
15
  import { encodeFunctionData, formatEther, getContract } from 'viem';
17
16
  import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
@@ -54,11 +53,10 @@ export async function addL1Validator({
54
53
  privateKey,
55
54
  mnemonic,
56
55
  attesterAddress,
57
- proposerEOAAddress,
58
56
  stakingAssetHandlerAddress,
59
57
  log,
60
58
  debugLogger,
61
- }: StakingAssetHandlerCommandArgs & LoggerArgs & { attesterAddress: EthAddress; proposerEOAAddress: EthAddress }) {
59
+ }: StakingAssetHandlerCommandArgs & LoggerArgs & { attesterAddress: EthAddress }) {
62
60
  const dualLog = makeDualLog(log, debugLogger);
63
61
  const account = getAccount(privateKey, mnemonic);
64
62
  const chain = createEthereumChain(rpcUrls, chainId);
@@ -71,17 +69,7 @@ export async function addL1Validator({
71
69
  });
72
70
 
73
71
  const rollup = await stakingAssetHandler.read.getRollup();
74
-
75
- const forwarderAddress = getExpectedAddress(
76
- ForwarderAbi,
77
- ForwarderBytecode,
78
- [proposerEOAAddress.toString()],
79
- proposerEOAAddress.toString(),
80
- ).address;
81
-
82
- dualLog(
83
- `Adding validator (${attesterAddress}, ${proposerEOAAddress} [forwarder: ${forwarderAddress}]) to rollup ${rollup.toString()}`,
84
- );
72
+ dualLog(`Adding validator (${attesterAddress} to rollup ${rollup.toString()}`);
85
73
 
86
74
  const l1TxUtils = new L1TxUtils(l1Client, debugLogger);
87
75
 
@@ -90,7 +78,7 @@ export async function addL1Validator({
90
78
  data: encodeFunctionData({
91
79
  abi: StakingAssetHandlerAbi,
92
80
  functionName: 'addValidator',
93
- args: [attesterAddress.toString(), forwarderAddress],
81
+ args: [attesterAddress.toString()],
94
82
  }),
95
83
  abi: StakingAssetHandlerAbi,
96
84
  });
@@ -99,10 +87,10 @@ export async function addL1Validator({
99
87
  if (isAnvilTestChain(chainId)) {
100
88
  dualLog(`Funding validator on L1`);
101
89
  const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
102
- await cheatCodes.setBalance(proposerEOAAddress, 10n ** 20n);
90
+ await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
103
91
  } else {
104
- const balance = await l1Client.getBalance({ address: proposerEOAAddress.toString() });
105
- dualLog(`Proposer balance: ${formatEther(balance)} ETH`);
92
+ const balance = await l1Client.getBalance({ address: attesterAddress.toString() });
93
+ dualLog(`Validator balance: ${formatEther(balance)} ETH`);
106
94
  if (balance === 0n) {
107
95
  dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
108
96
  }
@@ -6,7 +6,12 @@ import {
6
6
  getAllFunctionAbis,
7
7
  loadContractArtifact,
8
8
  } from '@aztec/aztec.js/abi';
9
- import { type DeployL1ContractsReturnType, type L1ContractsConfig, RollupContract } from '@aztec/ethereum';
9
+ import {
10
+ type DeployL1ContractsReturnType,
11
+ type L1ContractsConfig,
12
+ type Operator,
13
+ RollupContract,
14
+ } from '@aztec/ethereum';
10
15
  import type { Fr } from '@aztec/foundation/fields';
11
16
  import type { LogFn, Logger } from '@aztec/foundation/log';
12
17
  import type { NoirPackageConfig } from '@aztec/foundation/noir';
@@ -46,7 +51,7 @@ export async function deployAztecContracts(
46
51
  mnemonic: string,
47
52
  mnemonicIndex: number,
48
53
  salt: number | undefined,
49
- initialValidators: EthAddress[],
54
+ initialValidators: Operator[],
50
55
  genesisArchiveRoot: Fr,
51
56
  feeJuicePortalInitialBalance: bigint,
52
57
  acceleratedTestDeployments: boolean,
@@ -90,7 +95,7 @@ export async function deployNewRollupContracts(
90
95
  mnemonic: string,
91
96
  mnemonicIndex: number,
92
97
  salt: number | undefined,
93
- initialValidators: EthAddress[],
98
+ initialValidators: Operator[],
94
99
  genesisArchiveRoot: Fr,
95
100
  feeJuicePortalInitialBalance: bigint,
96
101
  config: L1ContractsConfig,
@@ -108,7 +113,8 @@ export async function deployNewRollupContracts(
108
113
 
109
114
  if (!initialValidators || initialValidators.length === 0) {
110
115
  // initialize the new rollup with Amin's validator address.
111
- initialValidators = [EthAddress.fromString('0x3b218d0F26d15B36C715cB06c949210a0d630637')];
116
+ const amin = EthAddress.fromString('0x3b218d0F26d15B36C715cB06c949210a0d630637');
117
+ initialValidators = [{ attester: amin, withdrawer: amin }];
112
118
  logger.info('Initializing new rollup with old attesters', { initialValidators });
113
119
  }
114
120