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
Flag | Environment Variable | v1.2.1 | v2.0.2 |
---|---|---|---|
--p2p.overallRequestTimeoutMs | $P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS | 4000 | 10000 |
--p2p.individualRequestTimeoutMs | $P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS | 2000 | 10000 |
--p2p.dialTimeoutMs | $P2P_REQRESP_DIAL_TIMEOUT_MS | 1000 | 5000 |
--proverAgent.proverAgentPollIntervalMs | $PROVER_AGENT_POLL_INTERVAL_MS | 100 | 1000 |
--bot.l1ToL2MessageTimeoutSeconds | $BOT_L1_TO_L2_TIMEOUT_SECONDS | 60 | 3600 |
--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
- How to Run a Sequencer Node - Updated setup instructions
- Advanced Keystore Usage - Keystore configuration
- Ethereum RPC Calls Reference - Infrastructure requirements
- Aztec Discord - Upgrade support