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

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

P2P clock tolerance for slot validation

Added a 500ms tolerance window for P2P messages from the previous slot, following Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY approach. This prevents peers from being penalized for valid messages that arrive slightly after the slot boundary due to network latency.

The tolerance is hardcoded at 500ms (matching Ethereum's current value) and can be made configurable via environment variables in the future if needed.

Impact: Improved network stability with no action required from node operators.

Changed defaults

Troubleshooting

Next steps