Plate 02 · Governance
One ballot per address, per epoch, weighed at a moment already in the past.
Governance here does exactly one thing: it decides which catalogued module is active next. This plate is the procedure, the rules it enforces, and the things it cannot reach.
§ 02.1The procedure
Delegate, once
The token counts delegated weight, not raw balance. Call delegate with your own address and your balance starts being checkpointed. Do it before the snapshot you want to vote at; doing it afterwards is too late for that epoch.
Vote
vote(moduleIndex), once per epoch, for one of the catalogued indices. The weight applied is your checkpointed weight at the epoch's snapshot. A second ballot in the same epoch is rejected, and so is a ballot with no weight behind it.
Roll
After the window closes, finalizeEpoch() is callable by anyone. It reads the tally, makes the leading module active, opens the next window and takes the next snapshot. Nothing about the outcome depends on who makes the call.
§ 02.2Rules the contract enforces
| Situation | Outcome |
|---|---|
| Voting with no checkpointed weight | Rejected — NoWeight |
| Voting twice in one epoch | Rejected — AlreadyVoted |
| Voting for an index outside the registry | Rejected — BadModule |
| Rolling before the window closes | Rejected — EpochNotOver |
| Nobody voted in the epoch | The active module stays active |
| Two modules tie on weight | The one that reached that weight first keeps the lead |
| Selling after you vote | The ballot stands; the weight was read from the past |
Every one of those is a property of the code rather than a policy: the ballot is a single function with four checks, and the roll is a single function with one.
§ 02.3What a vote cannot reach
- It cannot add, replace or upgrade a module. There is no function for it.
- It cannot mint. The token has no mint path after construction.
- It cannot move liquidity, take tokens from a holder, or pause transfers.
- It cannot change the epoch length, the pool, or the hook — those are fixed at deployment.
- It cannot spend the reserve that BuybackSkim collects.
The vote's entire surface is an index in the range [0, 3).
§ 02.4Honest limits
There is no quorum and no minimum turnout. If one address holds more delegated weight than everyone else combined, that address decides the module every epoch, and the rules above will happily let it. This is ordinary token governance and it should be read as such: the vote is a measure of weight, not of agreement.
Weight also accrues to whoever holds at the moment a snapshot is taken. A buyer who arrives mid-epoch is not disenfranchised — they simply wait for the next roll, since the snapshot that governs the next epoch is taken then.
Finally, the roll is permissionless but not automatic. If nobody calls it, the current epoch continues past its scheduled end and the module in force stays in force until someone does.