Claiming prover rewards
Prover rewards accrue per epoch on the Rollup contract and are claimed with a different function than sequencer rewards. This page covers how to find what you are owed and how to claim it.
How prover rewards accrue
When your prover submits the epoch proof, your PROVER_ID address is recorded as having a share of that epoch's prover reward pool. Your reward for an epoch is your share of that pool: yourShares × epochRewards / totalShares. Rewards become claimable only after the epoch's proof submission deadline has passed.
PROVER_ID is the address you set in your prover node config (by default, the address derived from PROVER_PUBLISHER_PRIVATE_KEY). Rewards for an epoch are always paid to that address.
Find your claimable epochs
Enter your RPC, Rollup address, and PROVER_ID below. This runs read-only calls against the Rollup to find every recent epoch where you have an unclaimed reward, and assembles the exact claim command with the epoch list filled in. Nothing is signed here and no keys are entered; you run the generated command yourself.
claimProverRewards takes an array of epochs, so one transaction claims them all. It skips epochs you already claimed, and reverts if any listed epoch has not yet passed its proof deadline.
You do not need your prover key to claim
The address that submits the claim (and pays the gas) does not have to be your PROVER_ID. The contract reads your rewards by the PROVER_ID argument and pays them to that address regardless of who sent the transaction. So you can claim from any funded wallet (for example a separate gas-paying account) and the rewards still land at your PROVER_ID address. Your prover key only needs to sign later, if and when you move the claimed funds.
Claiming manually
The helper above generates the claim command for you. To run the calls by hand, or to check epochs older than the helper's scan window, the functions on the Rollup contract are (set $RPC_URL, $ROLLUP, and $PROVER_ID to your RPC, the Rollup address, and your prover address):
# Read-only: pending reward for one epoch (0 if nothing, or already claimed)
cast call $ROLLUP "getSpecificProverRewardsForEpoch(uint256,address)(uint256)" [EPOCH] $PROVER_ID --rpc-url $RPC_URL
# Claim one or more epochs (pays your PROVER_ID address)
cast send $ROLLUP "claimProverRewards(address,uint256[])" $PROVER_ID "[EPOCH_1,EPOCH_2]" --rpc-url $RPC_URL --private-key [GAS_PAYER_PRIVATE_KEY]
Rewards after a rollup upgrade
Rewards you earned before a rollup upgrade stay on the prior Rollup contract. To claim them, call claimProverRewards against that contract's address as well as the current one.
Rollup contract addresses
Mainnet:
| Rollup | Address |
|---|---|
| Current canonical | 0xae2001f7e21d5ecabf6234e9fdd1e76f50f74962 |
| Previous | 0x603bb2c05d474794ea97805e8de69bccfb3bca12 |
Testnet (Sepolia):
| Rollup | Address |
|---|---|
| Current canonical | 0xe4394f118b115de2bdad88ee1abd599cf5d25c70 |
| Previous | 0xf6d0d42ace06829becb78c74f49879528fc632c1 |
The current canonical address is always whatever getCanonicalRollup() returns on the Aztec Registry: 0x35b22e09ee0390539439e24f06da43d83f90e298 on mainnet, 0xa0bfb1b494fb49041e5c6e8c2c1be09cd171c6ba on testnet. A testnet relaunch deploys a new Rollup, so confirm against the Registry if you are unsure which is current.
Reward claiming is enabled on both mainnet and testnet, so accrued rewards can be claimed.
See also
- Prover setup: generating the prover key and setting
PROVER_ID - Claiming rewards: the sequencer and provider reward paths