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

Conditions and outcomes
SituationOutcome
Voting with no checkpointed weightRejected — NoWeight
Voting twice in one epochRejected — AlreadyVoted
Voting for an index outside the registryRejected — BadModule
Rolling before the window closesRejected — EpochNotOver
Nobody voted in the epochThe active module stays active
Two modules tie on weightThe one that reached that weight first keeps the lead
Selling after you voteThe 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.