@aztec/ethereum 3.0.0-nightly.20250924 → 3.0.0-nightly.20250925

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/config.js CHANGED
@@ -146,11 +146,11 @@ const TestnetEntryQueueConfig = {
146
146
  maxQueueFlushSize: 32n
147
147
  };
148
148
  const StagingIgnitionEntryQueueConfig = {
149
- bootstrapValidatorSetSize: 1250n,
150
- bootstrapFlushSize: 8n,
149
+ bootstrapValidatorSetSize: 24n,
150
+ bootstrapFlushSize: 24n,
151
151
  normalFlushSizeMin: 1n,
152
152
  normalFlushSizeQuotient: 2048n,
153
- maxQueueFlushSize: 8n
153
+ maxQueueFlushSize: 24n
154
154
  };
155
155
  export const getEntryQueueConfig = (networkName)=>{
156
156
  switch(networkName){
@@ -173,7 +173,10 @@ export declare class L1Deployer {
173
173
  constructor(client: ExtendedViemWalletClient, maybeSalt: number | undefined, dateProvider?: DateProvider, acceleratedTestDeployments?: boolean, logger?: Logger, txUtilsConfig?: L1TxUtilsConfig | undefined, createVerificationJson?: boolean);
174
174
  deploy<const TAbi extends Abi>(params: ContractArtifacts<TAbi>, args?: ContractConstructorArgs<TAbi>, opts?: {
175
175
  gasLimit?: bigint;
176
- }): Promise<EthAddress>;
176
+ }): Promise<{
177
+ address: EthAddress;
178
+ existed: boolean;
179
+ }>;
177
180
  waitForDeployments(): Promise<void>;
178
181
  sendTransaction(tx: L1TxRequest, options?: L1GasConfig): Promise<{
179
182
  txHash: Hex;
@@ -202,6 +205,7 @@ export declare function deployL1Contract(extendedClient: ExtendedViemWalletClien
202
205
  address: EthAddress;
203
206
  txHash: Hex | undefined;
204
207
  deployedLibraries?: VerificationLibraryEntry[];
208
+ existed: boolean;
205
209
  }>;
206
210
  export declare function getExpectedAddress(abi: Narrow<Abi | readonly unknown[]>, bytecode: Hex, args: readonly unknown[], salt: Hex): {
207
211
  address: `0x${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_l1_contracts.ts"],"names":[],"mappings":"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"}
@@ -25,31 +25,31 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
25
25
  const networkName = getActiveNetworkName();
26
26
  logger.info(`Deploying shared contracts for network configuration: ${networkName}`);
27
27
  const txHashes = [];
28
- const feeAssetAddress = await deployer.deploy(FeeAssetArtifact, [
28
+ const { address: feeAssetAddress } = await deployer.deploy(FeeAssetArtifact, [
29
29
  'FeeJuice',
30
30
  'FEE',
31
31
  l1Client.account.address
32
32
  ]);
33
33
  logger.verbose(`Deployed Fee Asset at ${feeAssetAddress}`);
34
- const stakingAssetAddress = await deployer.deploy(StakingAssetArtifact, [
34
+ const { address: stakingAssetAddress } = await deployer.deploy(StakingAssetArtifact, [
35
35
  'Staking',
36
36
  'STK',
37
37
  l1Client.account.address
38
38
  ]);
39
39
  logger.verbose(`Deployed Staking Asset at ${stakingAssetAddress}`);
40
- const gseAddress = await deployer.deploy(GSEArtifact, [
40
+ const gseAddress = (await deployer.deploy(GSEArtifact, [
41
41
  l1Client.account.address,
42
42
  stakingAssetAddress.toString(),
43
43
  args.activationThreshold,
44
44
  args.ejectionThreshold
45
- ]);
45
+ ])).address;
46
46
  logger.verbose(`Deployed GSE at ${gseAddress}`);
47
- const registryAddress = await deployer.deploy(RegistryArtifact, [
47
+ const { address: registryAddress } = await deployer.deploy(RegistryArtifact, [
48
48
  l1Client.account.address,
49
49
  feeAssetAddress.toString()
50
50
  ]);
51
51
  logger.verbose(`Deployed Registry at ${registryAddress}`);
52
- const governanceProposerAddress = await deployer.deploy(GovernanceProposerArtifact, [
52
+ const { address: governanceProposerAddress } = await deployer.deploy(GovernanceProposerArtifact, [
53
53
  registryAddress.toString(),
54
54
  gseAddress.toString(),
55
55
  BigInt(args.governanceProposerQuorum ?? args.governanceProposerRoundSize / 2 + 1),
@@ -58,7 +58,7 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
58
58
  logger.verbose(`Deployed GovernanceProposer at ${governanceProposerAddress}`);
59
59
  // @note @LHerskind the assets are expected to be the same at some point, but for better
60
60
  // configurability they are different for now.
61
- const governanceAddress = await deployer.deploy(GovernanceArtifact, [
61
+ const { address: governanceAddress } = await deployer.deploy(GovernanceArtifact, [
62
62
  stakingAssetAddress.toString(),
63
63
  governanceProposerAddress.toString(),
64
64
  gseAddress.toString(),
@@ -98,11 +98,11 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
98
98
  logger.verbose(`Set governance on GSE in ${txHash}`);
99
99
  txHashes.push(txHash);
100
100
  }
101
- const coinIssuerAddress = await deployer.deploy(CoinIssuerArtifact, [
101
+ const coinIssuerAddress = (await deployer.deploy(CoinIssuerArtifact, [
102
102
  feeAssetAddress.toString(),
103
103
  25_000_000_000n * 10n ** 18n / (60n * 60n * 24n * 365n),
104
104
  l1Client.account.address
105
- ]);
105
+ ])).address;
106
106
  logger.verbose(`Deployed CoinIssuer at ${coinIssuerAddress}`);
107
107
  logger.verbose(`Waiting for deployments to complete`);
108
108
  await deployer.waitForDeployments();
@@ -112,11 +112,11 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
112
112
  let zkPassportVerifierAddress = undefined;
113
113
  // Only if not on mainnet will we deploy the handlers
114
114
  if (l1Client.chain.id !== 1) {
115
- /* -------------------------------------------------------------------------- */ /* CHEAT CODES START HERE */ /* -------------------------------------------------------------------------- */ feeAssetHandlerAddress = await deployer.deploy(FeeAssetHandlerArtifact, [
115
+ /* -------------------------------------------------------------------------- */ /* CHEAT CODES START HERE */ /* -------------------------------------------------------------------------- */ feeAssetHandlerAddress = (await deployer.deploy(FeeAssetHandlerArtifact, [
116
116
  l1Client.account.address,
117
117
  feeAssetAddress.toString(),
118
118
  BigInt(1000n * 10n ** 18n)
119
- ]);
119
+ ])).address;
120
120
  logger.verbose(`Deployed FeeAssetHandler at ${feeAssetHandlerAddress}`);
121
121
  // Only if we are "fresh" will we be adding as a minter, otherwise above will simply get same address
122
122
  if (needToSetGovernance) {
@@ -162,9 +162,9 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
162
162
  skipBindCheck: args.zkPassportArgs?.mockZkPassportVerifier ?? false,
163
163
  skipMerkleCheck: true
164
164
  };
165
- stakingAssetHandlerAddress = await deployer.deploy(StakingAssetHandlerArtifact, [
165
+ stakingAssetHandlerAddress = (await deployer.deploy(StakingAssetHandlerArtifact, [
166
166
  stakingAssetHandlerDeployArgs
167
- ]);
167
+ ])).address;
168
168
  logger.verbose(`Deployed StakingAssetHandler at ${stakingAssetHandlerAddress}`);
169
169
  const { txHash: stakingMinterTxHash } = await deployer.sendTransaction({
170
170
  to: stakingAssetAddress.toString(),
@@ -218,7 +218,7 @@ export const deploySharedContracts = async (l1Client, deployer, args, logger)=>{
218
218
  };
219
219
  const getZkPassportVerifierAddress = async (deployer, args)=>{
220
220
  if (args.zkPassportArgs?.mockZkPassportVerifier) {
221
- return await deployer.deploy(mockVerifiers.mockZkPassportVerifier);
221
+ return (await deployer.deploy(mockVerifiers.mockZkPassportVerifier)).address;
222
222
  }
223
223
  return ZK_PASSPORT_VERIFIER_ADDRESS;
224
224
  };
@@ -252,17 +252,17 @@ const getZkPassportVerifierAddress = async (deployer, args)=>{
252
252
  };
253
253
  };
254
254
  export const deploySlashFactory = async (deployer, rollupAddress, logger)=>{
255
- const slashFactoryAddress = await deployer.deploy(SlashFactoryArtifact, [
255
+ const slashFactoryAddress = (await deployer.deploy(SlashFactoryArtifact, [
256
256
  rollupAddress
257
- ]);
257
+ ])).address;
258
258
  logger.verbose(`Deployed SlashFactory at ${slashFactoryAddress}`);
259
259
  return slashFactoryAddress;
260
260
  };
261
261
  export const deployUpgradePayload = async (deployer, addresses)=>{
262
- const payloadAddress = await deployer.deploy(RegisterNewRollupVersionPayloadArtifact, [
262
+ const payloadAddress = (await deployer.deploy(RegisterNewRollupVersionPayloadArtifact, [
263
263
  addresses.registryAddress.toString(),
264
264
  addresses.rollupAddress.toString()
265
- ]);
265
+ ])).address;
266
266
  return payloadAddress;
267
267
  };
268
268
  function slasherFlavorToSolidityEnum(flavor) {
@@ -291,10 +291,10 @@ function slasherFlavorToSolidityEnum(flavor) {
291
291
  const txHashes = [];
292
292
  let epochProofVerifier = EthAddress.ZERO;
293
293
  if (args.realVerifier) {
294
- epochProofVerifier = await deployer.deploy(l1ArtifactsVerifiers.honkVerifier);
294
+ epochProofVerifier = (await deployer.deploy(l1ArtifactsVerifiers.honkVerifier)).address;
295
295
  logger.verbose(`Rollup will use the real verifier at ${epochProofVerifier}`);
296
296
  } else {
297
- epochProofVerifier = await deployer.deploy(mockVerifiers.mockVerifier);
297
+ epochProofVerifier = (await deployer.deploy(mockVerifiers.mockVerifier)).address;
298
298
  logger.verbose(`Rollup will use the mock verifier at ${epochProofVerifier}`);
299
299
  }
300
300
  const rewardConfig = {
@@ -350,10 +350,10 @@ function slasherFlavorToSolidityEnum(flavor) {
350
350
  genesisStateArgs,
351
351
  rollupConfigArgs
352
352
  ];
353
- const rollupAddress = await deployer.deploy(RollupArtifact, rollupArgs, {
353
+ const { address: rollupAddress, existed: rollupExisted } = await deployer.deploy(RollupArtifact, rollupArgs, {
354
354
  gasLimit: 15_000_000n
355
355
  });
356
- logger.verbose(`Deployed Rollup at ${rollupAddress}`, rollupConfigArgs);
356
+ logger.verbose(`Deployed Rollup at ${rollupAddress}, already existed: ${rollupExisted}`, rollupConfigArgs);
357
357
  const rollupContract = new RollupContract(extendedClient, rollupAddress);
358
358
  await deployer.waitForDeployments();
359
359
  logger.verbose(`All core contracts have been deployed`);
@@ -374,9 +374,9 @@ function slasherFlavorToSolidityEnum(flavor) {
374
374
  logger.verbose(`Funding fee juice portal with ${args.feeJuicePortalInitialBalance} fee juice in ${mintTxHash} (accelerated test deployments)`);
375
375
  txHashes.push(mintTxHash);
376
376
  }
377
- const slashFactoryAddress = await deployer.deploy(SlashFactoryArtifact, [
377
+ const slashFactoryAddress = (await deployer.deploy(SlashFactoryArtifact, [
378
378
  rollupAddress.toString()
379
- ]);
379
+ ])).address;
380
380
  logger.verbose(`Deployed SlashFactory at ${slashFactoryAddress}`);
381
381
  // We need to call a function on the registry to set the various contract addresses.
382
382
  const registryContract = getContract({
@@ -440,7 +440,11 @@ function slasherFlavorToSolidityEnum(flavor) {
440
440
  } else {
441
441
  logger.verbose(`Not the owner of the gse, skipping rollup addition`);
442
442
  }
443
- if (args.initialValidators && await gseContract.read.isRollupRegistered([
443
+ const activeAttestorCount = await rollupContract.getActiveAttesterCount();
444
+ const queuedAttestorCount = await rollupContract.getEntryQueueLength();
445
+ logger.info(`Rollup has ${activeAttestorCount} active attestors and ${queuedAttestorCount} queued attestors`);
446
+ const shouldAddValidators = activeAttestorCount === 0n && queuedAttestorCount === 0n;
447
+ if (args.initialValidators && shouldAddValidators && await gseContract.read.isRollupRegistered([
444
448
  rollupContract.address
445
449
  ])) {
446
450
  await addMultipleValidators(extendedClient, deployer, addresses.gseAddress.toString(), rollupAddress.toString(), addresses.stakingAssetAddress.toString(), args.initialValidators, args.acceleratedTestDeployments, logger);
@@ -606,10 +610,10 @@ export const handoverToGovernance = async (extendedClient, deployer, registryAdd
606
610
  return;
607
611
  }
608
612
  const gseContract = new GSEContract(extendedClient, gseAddress);
609
- const multiAdder = await deployer.deploy(MultiAdderArtifact, [
613
+ const multiAdder = (await deployer.deploy(MultiAdderArtifact, [
610
614
  rollupAddress,
611
615
  deployer.client.account.address
612
- ]);
616
+ ])).address;
613
617
  const makeValidatorTuples = async (validator)=>{
614
618
  const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
615
619
  return {
@@ -701,11 +705,11 @@ export const handoverToGovernance = async (extendedClient, deployer, registryAdd
701
705
  * @param logger - The logger.
702
706
  */ // eslint-disable-next-line camelcase
703
707
  export const cheat_initializeFeeAssetHandler = async (extendedClient, deployer, feeAssetAddress, logger)=>{
704
- const feeAssetHandlerAddress = await deployer.deploy(FeeAssetHandlerArtifact, [
708
+ const feeAssetHandlerAddress = (await deployer.deploy(FeeAssetHandlerArtifact, [
705
709
  extendedClient.account.address,
706
710
  feeAssetAddress.toString(),
707
711
  BigInt(1e18)
708
- ]);
712
+ ])).address;
709
713
  logger.verbose(`Deployed FeeAssetHandler at ${feeAssetHandlerAddress}`);
710
714
  const { txHash } = await deployer.sendTransaction({
711
715
  to: feeAssetAddress.toString(),
@@ -1037,7 +1041,7 @@ export class L1Deployer {
1037
1041
  args
1038
1042
  });
1039
1043
  try {
1040
- const { txHash, address, deployedLibraries } = await deployL1Contract(this.client, params.contractAbi, params.contractBytecode, args ?? [], {
1044
+ const { txHash, address, deployedLibraries, existed } = await deployL1Contract(this.client, params.contractAbi, params.contractBytecode, args ?? [], {
1041
1045
  salt: this.salt,
1042
1046
  libraries: params.libraries,
1043
1047
  logger: this.logger,
@@ -1068,7 +1072,10 @@ export class L1Deployer {
1068
1072
  libraries: deployedLibraries ?? []
1069
1073
  });
1070
1074
  }
1071
- return address;
1075
+ return {
1076
+ address,
1077
+ existed
1078
+ };
1072
1079
  } catch (error) {
1073
1080
  throw new Error(`Failed to deploy ${params.name}`, {
1074
1081
  cause: formatViemError(error)
@@ -1194,6 +1201,7 @@ export class L1Deployer {
1194
1201
  logger?.verbose(`Skipping waiting for linked libraries to be deployed ${acceleratedTestDeployments ? '(accelerated test deployments)' : ''}`);
1195
1202
  }
1196
1203
  }
1204
+ let existed = false;
1197
1205
  if (saltFromOpts) {
1198
1206
  logger?.info(`Deploying contract with salt ${saltFromOpts}`);
1199
1207
  const { address, paddedSalt: salt, calldata } = getExpectedAddress(abi, bytecode, args, saltFromOpts);
@@ -1236,6 +1244,7 @@ export class L1Deployer {
1236
1244
  logger?.verbose(`Deployed contract with salt ${salt} to address ${resultingAddress} in tx ${txHash}.`);
1237
1245
  } else {
1238
1246
  logger?.verbose(`Skipping existing deployment of contract with salt ${salt} to address ${resultingAddress}`);
1247
+ existed = true;
1239
1248
  }
1240
1249
  } else {
1241
1250
  const deployData = encodeDeployData({
@@ -1256,7 +1265,8 @@ export class L1Deployer {
1256
1265
  return {
1257
1266
  address: EthAddress.fromString(resultingAddress),
1258
1267
  txHash,
1259
- deployedLibraries
1268
+ deployedLibraries,
1269
+ existed
1260
1270
  };
1261
1271
  }
1262
1272
  export function getExpectedAddress(abi, bytecode, args, salt) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/ethereum",
3
- "version": "3.0.0-nightly.20250924",
3
+ "version": "3.0.0-nightly.20250925",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -31,10 +31,10 @@
31
31
  "../package.common.json"
32
32
  ],
33
33
  "dependencies": {
34
- "@aztec/blob-lib": "3.0.0-nightly.20250924",
35
- "@aztec/constants": "3.0.0-nightly.20250924",
36
- "@aztec/foundation": "3.0.0-nightly.20250924",
37
- "@aztec/l1-artifacts": "3.0.0-nightly.20250924",
34
+ "@aztec/blob-lib": "3.0.0-nightly.20250925",
35
+ "@aztec/constants": "3.0.0-nightly.20250925",
36
+ "@aztec/foundation": "3.0.0-nightly.20250925",
37
+ "@aztec/l1-artifacts": "3.0.0-nightly.20250925",
38
38
  "@viem/anvil": "^0.0.10",
39
39
  "dotenv": "^16.0.3",
40
40
  "lodash.chunk": "^4.2.0",
package/src/config.ts CHANGED
@@ -232,11 +232,11 @@ const TestnetEntryQueueConfig = {
232
232
  };
233
233
 
234
234
  const StagingIgnitionEntryQueueConfig = {
235
- bootstrapValidatorSetSize: 1250n,
236
- bootstrapFlushSize: 8n,
235
+ bootstrapValidatorSetSize: 24n,
236
+ bootstrapFlushSize: 24n,
237
237
  normalFlushSizeMin: 1n,
238
238
  normalFlushSizeQuotient: 2048n,
239
- maxQueueFlushSize: 8n,
239
+ maxQueueFlushSize: 24n,
240
240
  };
241
241
 
242
242
  export const getEntryQueueConfig = (networkName: NetworkNames) => {
@@ -6,7 +6,7 @@ import type { Fr } from '@aztec/foundation/fields';
6
6
  import { jsonStringify } from '@aztec/foundation/json-rpc';
7
7
  import { type Logger, createLogger } from '@aztec/foundation/log';
8
8
  import { DateProvider } from '@aztec/foundation/timer';
9
- import type { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
9
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
10
10
 
11
11
  import type { Abi, Narrow } from 'abitype';
12
12
  import { mkdir, writeFile } from 'fs/promises';
@@ -187,27 +187,37 @@ export const deploySharedContracts = async (
187
187
 
188
188
  const txHashes: Hex[] = [];
189
189
 
190
- const feeAssetAddress = await deployer.deploy(FeeAssetArtifact, ['FeeJuice', 'FEE', l1Client.account.address]);
190
+ const { address: feeAssetAddress } = await deployer.deploy(FeeAssetArtifact, [
191
+ 'FeeJuice',
192
+ 'FEE',
193
+ l1Client.account.address,
194
+ ]);
191
195
  logger.verbose(`Deployed Fee Asset at ${feeAssetAddress}`);
192
196
 
193
- const stakingAssetAddress = await deployer.deploy(StakingAssetArtifact, ['Staking', 'STK', l1Client.account.address]);
194
- logger.verbose(`Deployed Staking Asset at ${stakingAssetAddress}`);
195
-
196
- const gseAddress = await deployer.deploy(GSEArtifact, [
197
+ const { address: stakingAssetAddress } = await deployer.deploy(StakingAssetArtifact, [
198
+ 'Staking',
199
+ 'STK',
197
200
  l1Client.account.address,
198
- stakingAssetAddress.toString(),
199
- args.activationThreshold,
200
- args.ejectionThreshold,
201
201
  ]);
202
+ logger.verbose(`Deployed Staking Asset at ${stakingAssetAddress}`);
203
+
204
+ const gseAddress = (
205
+ await deployer.deploy(GSEArtifact, [
206
+ l1Client.account.address,
207
+ stakingAssetAddress.toString(),
208
+ args.activationThreshold,
209
+ args.ejectionThreshold,
210
+ ])
211
+ ).address;
202
212
  logger.verbose(`Deployed GSE at ${gseAddress}`);
203
213
 
204
- const registryAddress = await deployer.deploy(RegistryArtifact, [
214
+ const { address: registryAddress } = await deployer.deploy(RegistryArtifact, [
205
215
  l1Client.account.address,
206
216
  feeAssetAddress.toString(),
207
217
  ]);
208
218
  logger.verbose(`Deployed Registry at ${registryAddress}`);
209
219
 
210
- const governanceProposerAddress = await deployer.deploy(GovernanceProposerArtifact, [
220
+ const { address: governanceProposerAddress } = await deployer.deploy(GovernanceProposerArtifact, [
211
221
  registryAddress.toString(),
212
222
  gseAddress.toString(),
213
223
  BigInt(args.governanceProposerQuorum ?? args.governanceProposerRoundSize / 2 + 1),
@@ -217,7 +227,7 @@ export const deploySharedContracts = async (
217
227
 
218
228
  // @note @LHerskind the assets are expected to be the same at some point, but for better
219
229
  // configurability they are different for now.
220
- const governanceAddress = await deployer.deploy(GovernanceArtifact, [
230
+ const { address: governanceAddress } = await deployer.deploy(GovernanceArtifact, [
221
231
  stakingAssetAddress.toString(),
222
232
  governanceProposerAddress.toString(),
223
233
  gseAddress.toString(),
@@ -259,11 +269,13 @@ export const deploySharedContracts = async (
259
269
  txHashes.push(txHash);
260
270
  }
261
271
 
262
- const coinIssuerAddress = await deployer.deploy(CoinIssuerArtifact, [
263
- feeAssetAddress.toString(),
264
- (25_000_000_000n * 10n ** 18n) / (60n * 60n * 24n * 365n),
265
- l1Client.account.address,
266
- ]);
272
+ const coinIssuerAddress = (
273
+ await deployer.deploy(CoinIssuerArtifact, [
274
+ feeAssetAddress.toString(),
275
+ (25_000_000_000n * 10n ** 18n) / (60n * 60n * 24n * 365n),
276
+ l1Client.account.address,
277
+ ])
278
+ ).address;
267
279
  logger.verbose(`Deployed CoinIssuer at ${coinIssuerAddress}`);
268
280
 
269
281
  logger.verbose(`Waiting for deployments to complete`);
@@ -281,11 +293,13 @@ export const deploySharedContracts = async (
281
293
  /* CHEAT CODES START HERE */
282
294
  /* -------------------------------------------------------------------------- */
283
295
 
284
- feeAssetHandlerAddress = await deployer.deploy(FeeAssetHandlerArtifact, [
285
- l1Client.account.address,
286
- feeAssetAddress.toString(),
287
- BigInt(1000n * 10n ** 18n),
288
- ]);
296
+ feeAssetHandlerAddress = (
297
+ await deployer.deploy(FeeAssetHandlerArtifact, [
298
+ l1Client.account.address,
299
+ feeAssetAddress.toString(),
300
+ BigInt(1000n * 10n ** 18n),
301
+ ])
302
+ ).address;
289
303
  logger.verbose(`Deployed FeeAssetHandler at ${feeAssetHandlerAddress}`);
290
304
 
291
305
  // Only if we are "fresh" will we be adding as a minter, otherwise above will simply get same address
@@ -328,7 +342,8 @@ export const deploySharedContracts = async (
328
342
  skipMerkleCheck: true, // skip merkle check - needed for testing without generating proofs
329
343
  } as const;
330
344
 
331
- stakingAssetHandlerAddress = await deployer.deploy(StakingAssetHandlerArtifact, [stakingAssetHandlerDeployArgs]);
345
+ stakingAssetHandlerAddress = (await deployer.deploy(StakingAssetHandlerArtifact, [stakingAssetHandlerDeployArgs]))
346
+ .address;
332
347
  logger.verbose(`Deployed StakingAssetHandler at ${stakingAssetHandlerAddress}`);
333
348
 
334
349
  const { txHash: stakingMinterTxHash } = await deployer.sendTransaction({
@@ -399,7 +414,7 @@ export const deploySharedContracts = async (
399
414
 
400
415
  const getZkPassportVerifierAddress = async (deployer: L1Deployer, args: DeployL1ContractsArgs): Promise<EthAddress> => {
401
416
  if (args.zkPassportArgs?.mockZkPassportVerifier) {
402
- return await deployer.deploy(mockVerifiers.mockZkPassportVerifier);
417
+ return (await deployer.deploy(mockVerifiers.mockZkPassportVerifier)).address;
403
418
  }
404
419
  return ZK_PASSPORT_VERIFIER_ADDRESS;
405
420
  };
@@ -452,7 +467,7 @@ export const deployRollupForUpgrade = async (
452
467
  };
453
468
 
454
469
  export const deploySlashFactory = async (deployer: L1Deployer, rollupAddress: Hex, logger: Logger) => {
455
- const slashFactoryAddress = await deployer.deploy(SlashFactoryArtifact, [rollupAddress]);
470
+ const slashFactoryAddress = (await deployer.deploy(SlashFactoryArtifact, [rollupAddress])).address;
456
471
  logger.verbose(`Deployed SlashFactory at ${slashFactoryAddress}`);
457
472
  return slashFactoryAddress;
458
473
  };
@@ -461,10 +476,12 @@ export const deployUpgradePayload = async (
461
476
  deployer: L1Deployer,
462
477
  addresses: Pick<L1ContractAddresses, 'registryAddress' | 'rollupAddress'>,
463
478
  ) => {
464
- const payloadAddress = await deployer.deploy(RegisterNewRollupVersionPayloadArtifact, [
465
- addresses.registryAddress.toString(),
466
- addresses.rollupAddress.toString(),
467
- ]);
479
+ const payloadAddress = (
480
+ await deployer.deploy(RegisterNewRollupVersionPayloadArtifact, [
481
+ addresses.registryAddress.toString(),
482
+ addresses.rollupAddress.toString(),
483
+ ])
484
+ ).address;
468
485
 
469
486
  return payloadAddress;
470
487
  };
@@ -517,10 +534,10 @@ export const deployRollup = async (
517
534
  let epochProofVerifier = EthAddress.ZERO;
518
535
 
519
536
  if (args.realVerifier) {
520
- epochProofVerifier = await deployer.deploy(l1ArtifactsVerifiers.honkVerifier);
537
+ epochProofVerifier = (await deployer.deploy(l1ArtifactsVerifiers.honkVerifier)).address;
521
538
  logger.verbose(`Rollup will use the real verifier at ${epochProofVerifier}`);
522
539
  } else {
523
- epochProofVerifier = await deployer.deploy(mockVerifiers.mockVerifier);
540
+ epochProofVerifier = (await deployer.deploy(mockVerifiers.mockVerifier)).address;
524
541
  logger.verbose(`Rollup will use the mock verifier at ${epochProofVerifier}`);
525
542
  }
526
543
 
@@ -582,8 +599,10 @@ export const deployRollup = async (
582
599
  rollupConfigArgs,
583
600
  ] as const;
584
601
 
585
- const rollupAddress = await deployer.deploy(RollupArtifact, rollupArgs, { gasLimit: 15_000_000n });
586
- logger.verbose(`Deployed Rollup at ${rollupAddress}`, rollupConfigArgs);
602
+ const { address: rollupAddress, existed: rollupExisted } = await deployer.deploy(RollupArtifact, rollupArgs, {
603
+ gasLimit: 15_000_000n,
604
+ });
605
+ logger.verbose(`Deployed Rollup at ${rollupAddress}, already existed: ${rollupExisted}`, rollupConfigArgs);
587
606
 
588
607
  const rollupContract = new RollupContract(extendedClient, rollupAddress);
589
608
 
@@ -608,7 +627,7 @@ export const deployRollup = async (
608
627
  txHashes.push(mintTxHash);
609
628
  }
610
629
 
611
- const slashFactoryAddress = await deployer.deploy(SlashFactoryArtifact, [rollupAddress.toString()]);
630
+ const slashFactoryAddress = (await deployer.deploy(SlashFactoryArtifact, [rollupAddress.toString()])).address;
612
631
  logger.verbose(`Deployed SlashFactory at ${slashFactoryAddress}`);
613
632
 
614
633
  // We need to call a function on the registry to set the various contract addresses.
@@ -670,7 +689,17 @@ export const deployRollup = async (
670
689
  logger.verbose(`Not the owner of the gse, skipping rollup addition`);
671
690
  }
672
691
 
673
- if (args.initialValidators && (await gseContract.read.isRollupRegistered([rollupContract.address]))) {
692
+ const activeAttestorCount = await rollupContract.getActiveAttesterCount();
693
+ const queuedAttestorCount = await rollupContract.getEntryQueueLength();
694
+ logger.info(`Rollup has ${activeAttestorCount} active attestors and ${queuedAttestorCount} queued attestors`);
695
+
696
+ const shouldAddValidators = activeAttestorCount === 0n && queuedAttestorCount === 0n;
697
+
698
+ if (
699
+ args.initialValidators &&
700
+ shouldAddValidators &&
701
+ (await gseContract.read.isRollupRegistered([rollupContract.address]))
702
+ ) {
674
703
  await addMultipleValidators(
675
704
  extendedClient,
676
705
  deployer,
@@ -886,7 +915,8 @@ export const addMultipleValidators = async (
886
915
  }
887
916
 
888
917
  const gseContract = new GSEContract(extendedClient, gseAddress);
889
- const multiAdder = await deployer.deploy(MultiAdderArtifact, [rollupAddress, deployer.client.account.address]);
918
+ const multiAdder = (await deployer.deploy(MultiAdderArtifact, [rollupAddress, deployer.client.account.address]))
919
+ .address;
890
920
 
891
921
  const makeValidatorTuples = async (validator: Operator) => {
892
922
  const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
@@ -1007,11 +1037,13 @@ export const cheat_initializeFeeAssetHandler = async (
1007
1037
  feeAssetHandlerAddress: EthAddress;
1008
1038
  txHash: Hex;
1009
1039
  }> => {
1010
- const feeAssetHandlerAddress = await deployer.deploy(FeeAssetHandlerArtifact, [
1011
- extendedClient.account.address,
1012
- feeAssetAddress.toString(),
1013
- BigInt(1e18),
1014
- ]);
1040
+ const feeAssetHandlerAddress = (
1041
+ await deployer.deploy(FeeAssetHandlerArtifact, [
1042
+ extendedClient.account.address,
1043
+ feeAssetAddress.toString(),
1044
+ BigInt(1e18),
1045
+ ])
1046
+ ).address;
1015
1047
  logger.verbose(`Deployed FeeAssetHandler at ${feeAssetHandlerAddress}`);
1016
1048
 
1017
1049
  const { txHash } = await deployer.sendTransaction({
@@ -1343,10 +1375,10 @@ export class L1Deployer {
1343
1375
  params: ContractArtifacts<TAbi>,
1344
1376
  args?: ContractConstructorArgs<TAbi>,
1345
1377
  opts: { gasLimit?: bigint } = {},
1346
- ): Promise<EthAddress> {
1378
+ ): Promise<{ address: EthAddress; existed: boolean }> {
1347
1379
  this.logger.debug(`Deploying ${params.name} contract`, { args });
1348
1380
  try {
1349
- const { txHash, address, deployedLibraries } = await deployL1Contract(
1381
+ const { txHash, address, deployedLibraries, existed } = await deployL1Contract(
1350
1382
  this.client,
1351
1383
  params.contractAbi,
1352
1384
  params.contractBytecode,
@@ -1384,7 +1416,10 @@ export class L1Deployer {
1384
1416
  libraries: deployedLibraries ?? [],
1385
1417
  });
1386
1418
  }
1387
- return address;
1419
+ return {
1420
+ address,
1421
+ existed,
1422
+ };
1388
1423
  } catch (error) {
1389
1424
  throw new Error(`Failed to deploy ${params.name}`, { cause: formatViemError(error) });
1390
1425
  }
@@ -1442,7 +1477,12 @@ export async function deployL1Contract(
1442
1477
  gasLimit?: bigint;
1443
1478
  acceleratedTestDeployments?: boolean;
1444
1479
  } = {},
1445
- ): Promise<{ address: EthAddress; txHash: Hex | undefined; deployedLibraries?: VerificationLibraryEntry[] }> {
1480
+ ): Promise<{
1481
+ address: EthAddress;
1482
+ txHash: Hex | undefined;
1483
+ deployedLibraries?: VerificationLibraryEntry[];
1484
+ existed: boolean;
1485
+ }> {
1446
1486
  let txHash: Hex | undefined = undefined;
1447
1487
  let resultingAddress: Hex | null | undefined = undefined;
1448
1488
  const deployedLibraries: VerificationLibraryEntry[] = [];
@@ -1544,6 +1584,8 @@ export async function deployL1Contract(
1544
1584
  }
1545
1585
  }
1546
1586
 
1587
+ let existed = false;
1588
+
1547
1589
  if (saltFromOpts) {
1548
1590
  logger?.info(`Deploying contract with salt ${saltFromOpts}`);
1549
1591
  const { address, paddedSalt: salt, calldata } = getExpectedAddress(abi, bytecode, args, saltFromOpts);
@@ -1565,6 +1607,7 @@ export async function deployL1Contract(
1565
1607
  logger?.verbose(`Deployed contract with salt ${salt} to address ${resultingAddress} in tx ${txHash}.`);
1566
1608
  } else {
1567
1609
  logger?.verbose(`Skipping existing deployment of contract with salt ${salt} to address ${resultingAddress}`);
1610
+ existed = true;
1568
1611
  }
1569
1612
  } else {
1570
1613
  const deployData = encodeDeployData({ abi, bytecode, args });
@@ -1584,7 +1627,7 @@ export async function deployL1Contract(
1584
1627
  }
1585
1628
  }
1586
1629
 
1587
- return { address: EthAddress.fromString(resultingAddress!), txHash, deployedLibraries };
1630
+ return { address: EthAddress.fromString(resultingAddress!), txHash, deployedLibraries, existed };
1588
1631
  }
1589
1632
 
1590
1633
  export function getExpectedAddress(