Voting
Status: Governance structures are defined in the protocol specification. Full on-chain voting execution is being finalized for an upcoming release.
We designed voting to be accessible to every staker, not just whales. Voting is the primary decision-making mechanism in Citrate governance. All SALT stakers can vote on proposals, with voting power derived from their staked tokens. The system supports multiple voting modes depending on the proposal type, and includes delegation for participants who prefer to assign their voting power to a trusted representative.
Stake-Weighted Voting
The default voting mode is stake-weighted: one staked SALT equals one unit of voting power. This applies to most governance proposals including parameter changes, treasury allocations, and protocol upgrades.
# Vote on a standard proposal
citrate-cli governance vote --proposal-id 42 --vote yes --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY
# View your voting power
citrate-cli governance voting-power --address 0xYOUR_ADDRESS --rpc https://rpc.cnidarian.cloud
Voting power is calculated from your staked SALT at the snapshot block -- the block at which the proposal entered the voting stage. Any stake changes after the snapshot do not affect your voting power for that proposal. This prevents "flash loan" governance attacks where an entity borrows tokens, votes, and returns them in a single transaction.
Vote options for standard proposals:
| Option | Effect |
|---|---|
| Yes | Support the proposal |
| No | Oppose the proposal |
| Abstain | Count toward quorum but not toward approval threshold |
| No with Veto | Oppose and signal that the proposal should not be resubmitted |
If "No with Veto" votes exceed 33% of total votes cast, the proposer's deposit is not refunded and the proposal is marked as vetoed. This mechanism prevents persistent spam proposals.
Quadratic Voting
For specific proposal categories -- primarily community sentiment polls and ethics reviews -- Citrate uses quadratic voting. In quadratic voting, voting power scales with the square root of tokens committed, giving smaller holders proportionally more influence.
Standard voting: 1,000 staked SALT = 1,000 voting power
Quadratic voting: 1,000 staked SALT = ~31.6 voting power (sqrt of 1,000)
This means a holder with 100 SALT has 10 units of quadratic voting power, while a holder with 10,000 SALT has approximately 100 units -- only 10x more power despite holding 100x more tokens.
# Vote on a quadratic voting proposal
citrate-cli governance vote --proposal-id 55 --vote yes --stake-amount 500 --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY
In quadratic voting, you choose how much of your staked SALT to commit to a vote. Committed tokens are not locked -- they remain staked and earning rewards -- but you cannot commit the same tokens to multiple simultaneous quadratic votes.
Quorum Requirements
A proposal must reach the required quorum (minimum participation) to be valid. Quorum is measured as a percentage of total staked SALT that participates in the vote (including abstentions).
| Proposal Type | Quorum Requirement |
|---|---|
| Parameter change | 10% of total staked SALT |
| Small treasury spend (<10K) | 5% |
| Medium treasury spend (10K-100K) | 10% |
| Large treasury spend (100K-1M) | 20% |
| Exceptional treasury spend (>1M) | 33% |
| Protocol upgrade | 20% |
| Constitutional amendment | 33% |
| Bridge operations | 15% |
If a proposal fails to reach quorum by the end of the voting period, it is marked as "Failed - No Quorum." The proposer's deposit is refunded, and they may resubmit after a 7-day cooling period.
# Check current quorum status for a proposal
citrate-cli governance proposal-quorum --proposal-id 42 --rpc https://rpc.cnidarian.cloud
Example output:
Quorum required: 10% (32,450,000 SALT)
Current turnout: 8.7% (28,231,500 SALT)
Status: Below quorum (1 day 14 hours remaining)
Delegation
SALT holders can delegate their voting power to another address without transferring their tokens. Delegation is useful for participants who want governance representation without actively monitoring every proposal.
# Delegate your voting power
citrate-cli governance delegate --to 0xDELEGATE_ADDRESS --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY
# Remove delegation (reclaim your voting power)
citrate-cli governance undelegate --rpc https://rpc.cnidarian.cloud --private-key $PRIVATE_KEY
# Check who you've delegated to
citrate-cli governance delegation-info --address 0xYOUR_ADDRESS --rpc https://rpc.cnidarian.cloud
Important delegation rules:
- Override: Even if you delegate, you can vote directly on any proposal. Your direct vote overrides the delegate's vote for your portion of stake.
- Transitive delegation: Delegates cannot re-delegate received power. Only directly staked SALT can be delegated.
- Real-time: Delegation takes effect immediately and applies to all current and future proposals until revoked.
- Staking delegation vs. governance delegation: These are independent. You can stake with Validator A and delegate governance to Address B.
Vote Finalization
When the voting period ends, the governance contract automatically tallies votes and determines the outcome:
If turnout >= quorum_requirement:
If yes_votes / (yes_votes + no_votes) >= approval_threshold:
Proposal PASSES → enters execution stage
Else:
Proposal FAILS → deposit refunded
Else:
Proposal FAILS (no quorum) → deposit refunded
Abstain votes count toward quorum but not toward the approval calculation. This allows participants to signal "I acknowledge this proposal but have no strong opinion" without skewing the outcome.
Results are published on-chain and are immutable. The governance contract emits events that indexers and dashboards can track in real time.
Further Reading
- Proposal Lifecycle -- the full proposal process
- DAO Structure -- governance bodies and their authorities
- Staking -- staking mechanics that underpin voting power
- Amendments -- voting requirements for constitutional changes