For Stakers
Delegators (stakers) can override their validator’s governance vote using their individual stake account. This is a core feature of svmgov: delegator sovereignty.
Read Terminology first if you want a quick definition of vote override, snapshot slot, and proof terms.
What Is a Vote Override?
By default, a validator votes on behalf of all stake delegated to them, weighted by total active stake. If you disagree with your validator’s vote, you can submit your own vote for your specific stake account. Your stake’s weight is then removed from the validator’s tally and applied according to your preference.
How It Works
Validator has 1,000 SOL stake
├── 800 SOL from Delegator A ← Delegator A overrides with their own vote
└── 200 SOL from Delegator B ← No override, follows validator's vote
Effect:
Validator's effective vote: 200 SOL (their own 200 SOL remains)
Delegator A's vote: 800 SOL (their own allocation)The Merkle proof system ensures that:
- You can only override the vote for stake you own
- The stake account must be in the NCN snapshot (active at snapshot slot)
- Double overrides for the same stake account are prevented by a
VoteOverridePDA
Two Override Paths
Your vote is immediately added to the proposal’s on-chain tallies; it never depends on whether the validator votes. What differs is how the validator’s voting weight is reduced by your overridden stake:
Path A — Validator has already voted: Your override is applied on the spot. The validator’s existing vote is recalculated with your stake removed from their weight, and your vote is counted separately at full weight.
Path B — Validator hasn’t voted yet: Your vote is counted right away, and your overridden stake is recorded in a VoteOverrideCache. If the validator later calls cast_vote, their vote is cast with the cached stake excluded from their weight, so your stake is never counted twice.
Requirements
- A stake account with active delegation to a validator
- The staker keypair (withdraw authority or signing key for the stake account)
- The validator’s vote account address
- Access to operator API for Merkle proofs. The CLI defaults to the main NCN router:
https://ncn-governance.solana.com.
Quick Setup
# Clone the repo and check out the latest release tag
git clone https://github.com/solana-foundation/solana-governance.git
cd solana-governance
git checkout "$(git describe --tags --abbrev=0 --match 'v*')"
# Build and install svmgov
cd svmgov/cli && ./install.sh
# Run interactive setup
svmgov init
# > Select: Staker
# Optional: override the default operator API URL
svmgov config set operator-api-url https://your-operator-api.example.comRelease tags are named v<version> (for example v0.6.0-40200) and match the svmgov crate version. The git checkout above resolves the newest one for you, leaving you on a detached HEAD — expected, and fine for building. To build a specific version instead, pick its tag from Releases and check that out by name. main is the development branch and can sit ahead of the latest release, so prefer a tag unless you need an unreleased change.
Commands
Global Arguments
| Option | Short | Description |
|---|---|---|
--rpc-url <URL> | -r | Custom RPC URL |
The operator-api-url config key defaults to the main NCN router, https://ncn-governance.solana.com, for override commands. Override it only if you need a different verifier/router.