Skip to Content
svmgovFor StakersOverview

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:

  1. You can only override the vote for stake you own
  2. The stake account must be in the NCN snapshot (active at snapshot slot)
  3. Double overrides for the same stake account are prevented by a VoteOverride PDA

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.com

Release 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

OptionShortDescription
--rpc-url <URL>-rCustom 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.

Last updated on