Casting a vote
Votes are Ed25519-signed records over the proposal ID + choice + timestamp. Signatures prevent after-the-fact tampering.Vote weights
Weight depends on the constitution’svoting_method:
one-person-one-vote
Every member: weight = 1.token-weighted
Weight = token balance at the snapshot block (taken when proposal opens for voting). Requires an on-chain token tracked in the constitution.quadratic
Weight = √(token balance). Limits plutocracy; widely used in Gitcoin-style funding.delegation
Members can delegate weight to other members:conviction
Weight grows as a member maintains their position over time. Implements conviction-voting mechanics (integral of preference over time).multisig
N-of-M signing. Used for treasury-only entities.Counting
At the end of the voting period:- Quorum check —
(votes_cast / total_members) >= constitution.governance.quorum - Threshold check —
(approves / cast_votes) >= constitution.governance.voting_threshold
approve. Either failing → rejected.
Weighted-voting methods substitute sum(weight * approve_choice) and sum(weight) respectively.
Edge cases
- Abstentions — count toward quorum but not toward threshold
- Delegated votes — propagated up the delegation chain (max depth enforced)
- Tie —
rejected(threshold not met by definition) - Voter departs mid-vote — their vote stands; their position leaving is a separate event
- Voting period expires — computed at expiration; if approved, executable immediately