Skip to main content
Version: v3.0.0-nightly.20251012

v2.0.2 (from v1.2.1)

Overview

Version 2.0.2 introduces significant configuration simplification, an integrated keystore system, and enhanced P2P capabilities. This release includes breaking changes that require migration from v1.2.1.

Migration difficulty: Moderate to High

Breaking changes

L1 contract addresses

v1.2.1:

--rollup-address <value>                    ($ROLLUP_CONTRACT_ADDRESS)
--inbox-address <value> ($INBOX_CONTRACT_ADDRESS)
--outbox-address <value> ($OUTBOX_CONTRACT_ADDRESS)
--fee-juice-address <value> ($FEE_JUICE_CONTRACT_ADDRESS)
--staking-asset-address <value> ($STAKING_ASSET_CONTRACT_ADDRESS)
--fee-juice-portal-address <value> ($FEE_JUICE_PORTAL_CONTRACT_ADDRESS)
--registry-address <value> ($REGISTRY_CONTRACT_ADDRESS)

v2.0.2:

--registry-address <value>                  ($REGISTRY_CONTRACT_ADDRESS)
--rollup-version <value> ($ROLLUP_VERSION) # Default: canonical

Migration: Only registry address is required. All other contract addresses are derived automatically.

Keystore integration

v1.2.1:

--sequencer.publisherPrivateKey <value>     ($SEQ_PUBLISHER_PRIVATE_KEY)
--proverNode.publisherPrivateKey <value> ($PROVER_PUBLISHER_PRIVATE_KEY)

v2.0.2:

--proverNode.keyStoreDirectory <value>      ($KEY_STORE_DIRECTORY)

# Multiple publishers supported
--sequencer.publisherPrivateKeys <value> ($SEQ_PUBLISHER_PRIVATE_KEYS)
--sequencer.publisherAddresses <value> ($SEQ_PUBLISHER_ADDRESSES)

--proverNode.publisherPrivateKeys <value> ($PROVER_PUBLISHER_PRIVATE_KEYS)
--proverNode.publisherAddresses <value> ($PROVER_PUBLISHER_ADDRESSES)

Migration: Create keystore directory, change singular to plural. Use *_ADDRESSES for remote signers. See Advanced Keystore Guide.

Validator configuration

v1.2.1:

--sequencer.validatorPrivateKeys <value>    ($VALIDATOR_PRIVATE_KEYS)

v2.0.2:

--sequencer.validatorPrivateKeys <value>    ($VALIDATOR_PRIVATE_KEYS)
--sequencer.validatorAddresses <value> ($VALIDATOR_ADDRESSES) # For remote signers
--sequencer.disabledValidators <value> # Temporarily disable

Sync mode relocated

v1.2.1: Component-specific

--node.syncMode <value>                     ($SYNC_MODE)
--node.snapshotsUrl <value> ($SYNC_SNAPSHOTS_URL)
--proverNode.syncMode <value> ($SYNC_MODE)
--proverNode.snapshotsUrl <value> ($SYNC_SNAPSHOTS_URL)

v2.0.2: Global setting

--sync-mode <value>                         ($SYNC_MODE)          # Options: full, snapshot, force-snapshot
--snapshots-url <value> ($SYNC_SNAPSHOTS_URL)

World state separation

v1.2.1: Prover-node-specific

--proverNode.worldStateBlockCheckIntervalMS <value>         ($WS_BLOCK_CHECK_INTERVAL_MS)
--proverNode.worldStateProvenBlocksOnly <value> ($WS_PROVEN_BLOCKS_ONLY)
--proverNode.worldStateBlockRequestBatchSize <value> ($WS_BLOCK_REQUEST_BATCH_SIZE)
--proverNode.worldStateDbMapSizeKb <value> ($WS_DB_MAP_SIZE_KB)
--proverNode.archiveTreeMapSizeKb <value> ($ARCHIVE_TREE_MAP_SIZE_KB)
--proverNode.nullifierTreeMapSizeKb <value> ($NULLIFIER_TREE_MAP_SIZE_KB)
--proverNode.noteHashTreeMapSizeKb <value> ($NOTE_HASH_TREE_MAP_SIZE_KB)
--proverNode.messageTreeMapSizeKb <value> ($MESSAGE_TREE_MAP_SIZE_KB)
--proverNode.publicDataTreeMapSizeKb <value> ($PUBLIC_DATA_TREE_MAP_SIZE_KB)
--proverNode.worldStateDataDirectory <value> ($WS_DATA_DIRECTORY)
--proverNode.worldStateBlockHistory <value> ($WS_NUM_HISTORIC_BLOCKS)

v2.0.2: Global settings only

--world-state-data-directory <value>        ($WS_DATA_DIRECTORY)
--world-state-db-map-size-kb <value> ($WS_DB_MAP_SIZE_KB)
--world-state-block-history <value> ($WS_NUM_HISTORIC_BLOCKS)

Migration: Move to global WORLD STATE section. Tree-specific map sizes and other world state settings removed.

Removed features

Faucet service

# All removed in v2.0.2
--faucet
--faucet.apiServer
--faucet.apiServerPort <value> ($FAUCET_API_SERVER_PORT)
--faucet.viemPollingIntervalMS <value> ($L1_READER_VIEM_POLLING_INTERVAL_MS)
--faucet.l1Mnemonic <value> ($MNEMONIC)
--faucet.mnemonicAddressIndex <value> ($FAUCET_MNEMONIC_ADDRESS_INDEX)
--faucet.interval <value> ($FAUCET_INTERVAL_MS)
--faucet.ethAmount <value> ($FAUCET_ETH_AMOUNT)
--faucet.l1Assets <value> ($FAUCET_L1_ASSETS)

L1 transaction monitoring

All removed from archiver and sequencer:

--archiver.gasLimitBufferPercentage <value>             ($L1_GAS_LIMIT_BUFFER_PERCENTAGE)
--archiver.maxGwei <value> ($L1_GAS_PRICE_MAX)
--archiver.maxBlobGwei <value> ($L1_BLOB_FEE_PER_GAS_MAX)
--archiver.priorityFeeBumpPercentage <value> ($L1_PRIORITY_FEE_BUMP_PERCENTAGE)
--archiver.priorityFeeRetryBumpPercentage <value> ($L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE)
--archiver.fixedPriorityFeePerGas <value> ($L1_FIXED_PRIORITY_FEE_PER_GAS)
--archiver.maxAttempts <value> ($L1_TX_MONITOR_MAX_ATTEMPTS)
--archiver.checkIntervalMs <value> ($L1_TX_MONITOR_CHECK_INTERVAL_MS)
--archiver.stallTimeMs <value> ($L1_TX_MONITOR_STALL_TIME_MS)
--archiver.txTimeoutMs <value> ($L1_TX_MONITOR_TX_TIMEOUT_MS)
--archiver.txPropagationMaxQueryAttempts <value> ($L1_TX_PROPAGATION_MAX_QUERY_ATTEMPTS)
--archiver.cancelTxOnTimeout <value> ($L1_TX_MONITOR_CANCEL_TX_ON_TIMEOUT)

# Same settings removed from --sequencer.*

Migration: L1 transaction management now uses optimized internal defaults.

Rollup constants from archiver

All rollup constants now derived from L1 contracts:

# All removed in v2.0.2
--archiver.ethereumSlotDuration <value> ($ETHEREUM_SLOT_DURATION)
--archiver.aztecSlotDuration <value> ($AZTEC_SLOT_DURATION)
--archiver.aztecEpochDuration <value> ($AZTEC_EPOCH_DURATION)
--archiver.aztecTargetCommitteeSize <value> ($AZTEC_TARGET_COMMITTEE_SIZE)
--archiver.aztecProofSubmissionEpochs <value> ($AZTEC_PROOF_SUBMISSION_EPOCHS)
--archiver.depositAmount <value> ($AZTEC_DEPOSIT_AMOUNT)
--archiver.minimumStake <value> ($AZTEC_MINIMUM_STAKE)
--archiver.slashingQuorum <value> ($AZTEC_SLASHING_QUORUM)
--archiver.slashingRoundSize <value> ($AZTEC_SLASHING_ROUND_SIZE)
--archiver.governanceProposerQuorum <value> ($AZTEC_GOVERNANCE_PROPOSER_QUORUM)
--archiver.governanceProposerRoundSize <value> ($AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE)
--archiver.manaTarget <value> ($AZTEC_MANA_TARGET)
--archiver.provingCostPerMana <value> ($AZTEC_PROVING_COST_PER_MANA)
--archiver.exitDelaySeconds <value> ($AZTEC_EXIT_DELAY_SECONDS)

# Same settings removed from --sequencer.*

Node deployment options

# All removed in v2.0.2 (moved to sandbox only)
--node.deployAztecContracts ($DEPLOY_AZTEC_CONTRACTS)
--node.deployAztecContractsSalt <value> ($DEPLOY_AZTEC_CONTRACTS_SALT)
--node.assumeProvenThroughBlockNumber <value> ($ASSUME_PROVEN_THROUGH_BLOCK_NUMBER)
--node.publisherPrivateKey <value> ($L1_PRIVATE_KEY)

Migration: Contract deployment now sandbox-only via --sandbox.deployAztecContractsSalt. For production, deploy contracts separately.

Other removed settings

# Prover coordination
--proverNode.proverCoordinationNodeUrls <value> ($PROVER_COORDINATION_NODE_URLS)

# Custom forwarder
--sequencer.customForwarderContractAddress <value> ($CUSTOM_FORWARDER_CONTRACT_ADDRESS)
--proverNode.customForwarderContractAddress <value> ($CUSTOM_FORWARDER_CONTRACT_ADDRESS)

# Component-specific settings now global
--archiver.viemPollingIntervalMS <value> ($ARCHIVER_VIEM_POLLING_INTERVAL_MS)
--sequencer.viemPollingIntervalMS <value> ($L1_READER_VIEM_POLLING_INTERVAL_MS)
--blobSink.viemPollingIntervalMS <value> ($L1_READER_VIEM_POLLING_INTERVAL_MS)
--proverBroker.viemPollingIntervalMS <value> ($L1_READER_VIEM_POLLING_INTERVAL_MS)

--archiver.rollupVersion <value> ($ROLLUP_VERSION)
--sequencer.rollupVersion <value> ($ROLLUP_VERSION)
--blobSink.rollupVersion <value> ($ROLLUP_VERSION)
--proverBroker.rollupVersion <value> ($ROLLUP_VERSION)
--pxe.rollupVersion <value> ($ROLLUP_VERSION)

--archiver.dataStoreMapSizeKB <value> ($DATA_STORE_MAP_SIZE_KB)
--pxe.dataStoreMapSizeKB <value> ($DATA_STORE_MAP_SIZE_KB)
--blobSink.dataStoreMapSizeKB <value> ($DATA_STORE_MAP_SIZE_KB)
--proverBroker.dataStoreMapSizeKB <value> ($DATA_STORE_MAP_SIZE_KB)
--p2pBootstrap.dataStoreMapSizeKB <value> ($DATA_STORE_MAP_SIZE_KB)

# Aztec node specific
--node.worldStateBlockCheckIntervalMS <value> ($WS_BLOCK_CHECK_INTERVAL_MS)
--node.archiverUrl <value> ($ARCHIVER_URL)

New features

P2P transaction collection

--p2p.txCollectionNodeRpcUrls <value>                           ($TX_COLLECTION_NODE_RPC_URLS)
--p2p.txCollectionFastNodeIntervalMs <value> ($TX_COLLECTION_FAST_NODE_INTERVAL_MS)
--p2p.txCollectionFastMaxParallelRequestsPerNode <value> ($TX_COLLECTION_FAST_MAX_PARALLEL_REQUESTS_PER_NODE)
--p2p.txCollectionNodeRpcMaxBatchSize <value> ($TX_COLLECTION_NODE_RPC_MAX_BATCH_SIZE)
--p2p.txCollectionFastNodesTimeoutBeforeReqRespMs <value> ($TX_COLLECTION_FAST_NODES_TIMEOUT_BEFORE_REQ_RESP_MS)
--p2p.txCollectionSlowNodesIntervalMs <value> ($TX_COLLECTION_SLOW_NODES_INTERVAL_MS)
--p2p.txCollectionSlowReqRespIntervalMs <value> ($TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS)
--p2p.txCollectionSlowReqRespTimeoutMs <value> ($TX_COLLECTION_SLOW_REQ_RESP_TIMEOUT_MS)
--p2p.txCollectionReconcileIntervalMs <value> ($TX_COLLECTION_RECONCILE_INTERVAL_MS)
--p2p.txCollectionDisableSlowDuringFastRequests <value> ($TX_COLLECTION_DISABLE_SLOW_DURING_FAST_REQUESTS)

P2P security and testing

# Discovery and security
--p2p.p2pDiscoveryDisabled <value> ($P2P_DISCOVERY_DISABLED)
--p2p.p2pAllowOnlyValidators <value> ($P2P_ALLOW_ONLY_VALIDATORS)
--p2p.p2pMaxFailedAuthAttemptsAllowed <value> ($P2P_MAX_AUTH_FAILED_ATTEMPTS_ALLOWED)

# Testing features
--p2p.dropTransactions <value> ($P2P_DROP_TX)
--p2p.dropTransactionsProbability <value> ($P2P_DROP_TX_CHANCE)

# Transaction handling
--p2p.disableTransactions <value> ($TRANSACTIONS_DISABLED)
--p2p.txPoolDeleteTxsAfterReorg <value> ($P2P_TX_POOL_DELETE_TXS_AFTER_REORG)

# Preferred peers
--p2p.preferredPeers <value> ($P2P_PREFERRED_PEERS)

Sequencer invalidation controls

--sequencer.attestationPropagationTime <value>                              ($SEQ_ATTESTATION_PROPAGATION_TIME)
--sequencer.secondsBeforeInvalidatingBlockAsCommitteeMember <value> ($SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_COMMITTEE_MEMBER)
--sequencer.secondsBeforeInvalidatingBlockAsNonCommitteeMember <value> ($SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_NON_COMMITTEE_MEMBER)

Other new features

# Archiver - skip validation (testing only)
--archiver.skipValidateBlockAttestations

# Prover - transaction gathering timeout
--proverNode.txGatheringTimeoutMs <value> ($PROVER_NODE_TX_GATHERING_TIMEOUT_MS)

Changed defaults

FlagEnvironment Variablev1.2.1v2.0.2
--p2p.overallRequestTimeoutMs$P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS400010000
--p2p.individualRequestTimeoutMs$P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS200010000
--p2p.dialTimeoutMs$P2P_REQRESP_DIAL_TIMEOUT_MS10005000
--proverAgent.proverAgentPollIntervalMs$PROVER_AGENT_POLL_INTERVAL_MS1001000
--bot.l1ToL2MessageTimeoutSeconds$BOT_L1_TO_L2_TIMEOUT_SECONDS603600
--bot.recipientEncryptionSecret$BOT_RECIPIENT_ENCRYPTION_SECRET[Redacted]0x...cafecafe

Migration checklist

All nodes

  • Update to --registry-address only (remove all other contract addresses)
  • Add --rollup-version canonical if needed
  • Move --sync-mode and --snapshots-url to global config
  • Remove component-specific --*.rollupVersion, --*.dataStoreMapSizeKB
  • Set global --data-store-map-size-kb if needed (default: 134217728 KB)

Sequencer nodes

  • Create and configure --sequencer.keyStoreDirectory (actually --proverNode.keyStoreDirectory)
  • Change --sequencer.publisherPrivateKey--sequencer.publisherPrivateKeys
  • Update --sequencer.validatorPrivateKeys or add --sequencer.validatorAddresses
  • Remove all --sequencer.gasLimitBufferPercentage and related L1 settings
  • Remove --sequencer.customForwarderContractAddress, --sequencer.viemPollingIntervalMS
  • Consider using --sequencer.disabledValidators for temporary disabling

Prover nodes

  • Create and configure --proverNode.keyStoreDirectory
  • Change --proverNode.publisherPrivateKey--proverNode.publisherPrivateKeys
  • Move world state settings to global WORLD STATE section
  • Remove --proverNode.archiveTreeMapSizeKb and other tree-specific sizes
  • Remove --proverNode.proverCoordinationNodeUrls, --proverNode.customForwarderContractAddress
  • Set --proverNode.txGatheringTimeoutMs if needed

Archiver nodes

  • Remove all --archiver.gasLimitBufferPercentage and related L1 settings
  • Remove --archiver.ethereumSlotDuration, --archiver.aztecSlotDuration, etc.
  • Remove --archiver.viemPollingIntervalMS

P2P configuration

  • Configure --p2p.txCollectionNodeRpcUrls if using external nodes
  • Review --p2p.p2pAllowOnlyValidators security settings
  • Consider using --p2p.preferredPeers

Sandbox/development

  • Move deployment to --sandbox.deployAztecContractsSalt
  • Configure --sandbox.l1Mnemonic if needed
  • Remove all faucet flags

Troubleshooting

Node fails with contract address errors

Solution: Remove all individual contract addresses, keep only --registry-address, add --rollup-version canonical

Publisher key not found

Solution:

  • Check --proverNode.keyStoreDirectory ($KEY_STORE_DIRECTORY) is set
  • Change --*.publisherPrivateKey to --*.publisherPrivateKeys (plural)
  • See Advanced Keystore Guide

World state sync failures (prover)

Solution:

  • Move --proverNode.worldStateDataDirectory to --world-state-data-directory
  • Remove prover-specific world state settings
  • Use global --world-state-db-map-size-kb

Slow P2P after upgrade

Solution:

  • Configure --p2p.txCollectionNodeRpcUrls ($TX_COLLECTION_NODE_RPC_URLS)
  • Adjust --p2p.txCollectionFastNodeIntervalMs

Validator not attesting

Solution:

  • Check not in --sequencer.disabledValidators list
  • Verify --sequencer.validatorPrivateKeys or --sequencer.validatorAddresses
  • Check keystore permissions

Missing sync snapshots

Solution:

  • Move --node.syncMode to --sync-mode (global)
  • Set --snapshots-url at global level

Next steps