Skip to main content
Version: Testnet (v3.0.1)

v4.0.0 (from v3.0.0)

Overview

Migration difficulty: TODO

Breaking changes

StakingAssetHandler refactored to simple token faucet

The StakingAssetHandler L1 contract has been significantly simplified. It no longer handles validator registration directly - instead it functions as a simple STK token faucet with ZKPassport sybil resistance.

v3.0.0:

// Single call registered validator
stakingAssetHandler.addValidator(attester, merkleProof, zkPassportParams, publicKeyG1, publicKeyG2, signature);

v4.0.0:

// Step 1: Claim STK tokens from faucet
stakingAssetHandler.claim(zkPassportParams);

// Step 2: Approve rollup to spend tokens
stakingAsset.approve(rollupAddress, amount);

// Step 3: Deposit into rollup (user chooses their own withdrawer)
rollup.deposit(attester, withdrawer, publicKeyG1, publicKeyG2, signature, moveWithLatestRollup);

Removed functions:

  • addValidator() - replaced by claim() + direct rollup deposit
  • reenterExitedValidator()
  • setValidatorsToFlush(), setMintInterval(), setDepositsPerMint(), setWithdrawer()
  • setSkipMerkleCheck(), setDepositMerkleRoot()

New functions:

  • claim(ProofVerificationParams) - claim STK tokens with ZKPassport proof
  • setFaucetAmount(uint256) - owner sets claim amount
  • resetNullifier(bytes32) - owner can reset a nullifier

CLI changes:

# v3.0.0
aztec add-l1-validator --merkle-proof <proof>

# v4.0.0
aztec add-l1-validator --withdrawer-address <address>

Migration: Users must now call claim() to get STK tokens, then deposit into the rollup themselves. The --merkle-proof CLI flag is removed; add --withdrawer-address instead.

Removed features

New features

Changed defaults

Troubleshooting

Next steps