The Aztec Foundation identified an issue which prevents anyone who staked through the staking dashboard from delegating their voting power, impacting users’ ability to easily vote “no” once a vote has successfully passed the “signaling” phase.
Users’ can still vote no, but this requires unstaking first, which is not the intended behaviour.
This impacts users that use Token Vaults (also referred to as ATPs) to stake, which is all the stake currently. The issue is confined to the Token Vaults and staker implementation, not the Governance system itself.
This post details the issue, and outlines some potential solutions. We start with a refresher on the governance process for clarity and context.
Summary of Governance Process
-
Sequencer Signaling → Sequencers signal support for a Payload when proposing blocks. Anyone can deploy a Payload, and signaling can start at any time. Current parameters require 600 signals for a Payload in a round of 1000 slots. This means roughly 60% of all sequencers needs to signal support a Payload. This feature is unaffected by this bug.
-
Proposal Creation → After a Payload receives enough signaling support in a round, anyone can submit the Payload as an official Proposal to Governance.
-
Voting Delay (3 days) → A mandatory waiting period before voting opens to allow time for community review and for funds to be deposited/delegated in Governance.
-
Voting Period (7 days) → Users who held funds in Governance at the end of the Voting Delay vote on the proposal. A proposal passes if at least 20% of all funds in Governance participate in the vote (called “quorum”), and 2/3 of votes cast are "yes”.
-
Execution Delay (7 days) → After passing the vote, another mandatory delay before execution allows time for node upgrades.
-
Execution → Anyone can execute the Proposal, which causes Governance to execute the underlying Payload. The Proposal must be executed within a 7-day grace period after the Execution Delay ends.
Background context
For this context it’s important to know about two important purposes of the AZTEC token, in addition to being the fee payment asset of Aztec:
Stake → When someone stakes $AZTEC, they can subsequently be selected to propose blocks, attest to blocks, and earn more $AZTEC in return. These funds are “at stake” in that they can be slashed if the staker does not participate in block production when called upon.
Governance Voting Power → Anyone that holds $AZTEC can vote in governance. If you stake your tokens, you automatically delegate your governance voting power to the current rollup, but you can change your delegation preferences at any time. For holders of $AZTEC who are not staking, they can lock their tokens in Governance directly to gain voting power.
Importantly, Stake is always assigned to only one rollup instance. Governance can choose to upgrade the rollup instance defined as “canonical”. If such a governance proposal passes, Stake needs to transfer to this new “canonical” rollup instance before block production can start.
To avoid block production instability caused by large amounts of stake having to exit and re-enter (potentially having to queue) at each canonical rollup contract upgrade, Stake can choose to commit to “Move with the latest rollup”. By default, all tokens staked through the Staking Dashboard made use of this feature.
-
How the Voting stage of the governance process works
Read the Aztec Docs on how voting on proposals works
If the sequencers successfully signal for a Payload and submits it as a Proposal, the Governance Voting Power that is delegated to the Rollup after the Voting Delay will vote “yes” on the Proposal.
-
Move with latest rollup
“Move with Latest Rollup” is a UX feature for any person staking to not have to rejoin a staking queue when a new rollup version is deployed. The stake will automatically be migrated to the latest rollup and you can keep running your sequencer as is.
-
Propose with lock
Anyone with 258,750,000 $AZTEC tokens (~2.5% of the total initial supply) has the ability to call Propose with Lock to skip the sequencer signaling functionality, and directly create a Proposal for a Payload. This will instantly start the 3 day Voting Delay for the Proposal, and the $AZTEC used will be withdrawn from Governance, locked for 90 days.
-
Staking with a Token Vault
To stake from your Token Vault (also called an ATP) a
stakercontract is deployed for your Token Vault regardless of whether you are solo staking or using a provider. Thestakeris a Proxy contract, and the underlying implementation limits the actions that can be done with the $AZTEC tokens in the Token Vault, e.g. “stake in the rollup” or “delegate voting power”.All Token Vaults created for genesis sequencers belong to one “Registry”, and all Token Vaults created for participants in the auction belong to a different Registry. Only the owner of the Registry can add
stakerimplementations.In the case of the auction Token Vaults, the owner is Governance, so Proposals can add new
stakerimplementations; part of TGE is adding a newstakerimplementation to allow auction participants who have staked to exit their $AZTEC directly to the Token Vault beneficiary. For genesis sequencers, ownership of the Registry was renounced, so no new implementations can be added.
Identified issue
An issue in the staker implementation has been identified: currently, sequencers that elected to “Move with latest rollup” cannot delegate their Governance Voting Power away from the Rollup.
“Move with latest rollup” was automatically set to true when staking with the Staking Dashboard, so this applies to all sequencers. In practice, this means that the governance process is reduced to the Sequencer Signaling phase, since if a Payload receives sufficient support to become a Proposal, no one can re-delegate their voting power to vote against it.
The verified work arounds to the bug are as follows
-
If you don’t agree with a proposed governance payload, don’t signal for it.
-
Exit your stake and deposit the governance voting power and vote No. Then rejoin the queue to stake again.
-
Exit your stake and re-stake without following rollout upgrades (this requires you to restake every time there’s a rollup upgrade). This will require you to rejoin the queue.
Potential solutions
The Aztec Foundation discussed this with the Aztec Labs team who identified two separate fixes. They suggest that for auction participants, the staker implementation being added as part of TGE be patched to allow re-delegation to work as expected, with no action required. For genesis sequencers, they have devised a solution, but it requires a tweak in the rollup contract itself. Aztec Labs plans to propose an upgrade to the rollup after TGE with this fix.