Skip to main content
Version: dev

Identity model

Draft page

This is a placeholder for a longer identity-model primer. The summary below is the short version. The full page (signing flows, rotation paths, slashing scope per key, where each address shows up in keystore JSON) is being written.

A single sequencer is identified by several different addresses, each with a different job. Confusing them is the most common cause of "I'm not getting rewards" or "I can't withdraw my stake" complaints.

The five-second mental model

  • The attester is the validator's identity. It signs, it gets slashed.
  • The publisher pays L1 gas to do the attester's work.
  • The coinbase receives the block rewards.
  • The withdrawer is the only one who can move your stake.
  • The fee recipient is reserved for future fee revenue (not active yet).

Providers add two more (provider admin, provider rewards recipient) for managing the splits contract; see below.

Address roles in detail

RoleTypePurposeSlashable?Rotatable?
AttesterBLS public keySigns attestations and proposals. Identifies the validator on-chain.Yes (offenses listed in Slashing)No (fixed for the life of the validator)
PublisherL1 EOAPays L1 gas to submit checkpoints, proposals, and attestations. Holds ETH only.No directly, but a publisher that runs out of ETH causes missed proposals which slash the attester.Yes (edit publisher config and restart)
CoinbaseL1 EOAReceives sequencer block rewards. Configured per attester in the node's keystore.NoYes (edit keystore and restart)
Fee recipientL1 EOACurrently unused by the protocol. Reserved for future transaction-fee revenue.NoYes
WithdrawerL1 EOAThe only address authorized to initiate stake withdrawal. At withdrawal time the withdrawer can send unstaked AZTEC to any destination (it does not have to be the withdrawer itself).NoNo (set at registration)
Provider adminL1 EOAProvider-only. Manages provider configuration on the Rollup contract.NoYes
Provider rewards recipientL1 EOAProvider-only. Receives the operator's commission share when delegators claim.NoYes

Which address gets which kind of reward

This is the part that trips people up.

  • Block rewards (per checkpoint you propose) go to your coinbase.
  • Stake stays at the attester address; only the withdrawer can move it.
  • Future transaction fees will route to the fee recipient (currently unused).
  • Provider commission routes through the splits contract to the provider rewards recipient.

Each of these is configured in a different place (keystore for coinbase, Rollup contract for withdrawer, splits contract for provider). Misconfiguration of the coinbase is the most common cause of "I'm not getting rewards" complaints; see Claiming rewards.

Where to look up each address

If you have your attester address and need to find the others:

  • Coinbase: cast call $ROLLUP "getSequencerCoinbase(address)(address)" $ATTESTER
  • Withdrawer: visible in the GSE Deposit event log for your attester. Easiest path: look up your attester on the staking dashboard.
  • Publisher: not on-chain; it is configured in your node's keystore JSON.

For provider-specific addresses, see the StakingRegistry contract at 0x042df8f42790d6943f41c25c2132400fd727f452.

Common confusions

  • "I sent rewards to my coinbase but the staking dashboard still shows them pending." Rewards accrue on the Rollup contract; the dashboard shows accrued, not delivered. Claiming moves them to the coinbase wallet. See Claiming rewards.
  • "I lost access to my coinbase, can I change it?" Yes. Edit the keystore on your node and restart. Future rewards route to the new coinbase. Rewards already accrued on the old coinbase are claimed by whoever still controls that address.
  • "Can someone else claim my rewards?" Anyone can pay the gas to call claimSequencerRewards(coinbase), but the AZTEC goes to the coinbase. Spending gas on someone else's claim is a community courtesy, not a security risk.
  • "My withdrawer was set to my exchange deposit address by mistake." The withdrawer is set at registration and is not rotatable. If the destination is wrong, your only option is to top up, withdraw later, and re-stake with the right configuration. Plan registration carefully.

See also