> For the complete documentation index, see [llms.txt](https://valargroup.gitbook.io/shielded-vote-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://valargroup.gitbook.io/shielded-vote-docs/userflow/casting-a-vote.md).

# Casting a Vote

## What the user does

1. Browse the list of proposals
2. Select a vote choice for a proposal
3. Confirm — once confirmed, the vote is locked in (no changing)

## What the user sees

* A list of proposals with their descriptions
* Their total eligible voting weight
* A confirmation screen before committing

The user does **not** see:

* How many shares their vote is split into
* When individual shares are submitted
* Any further signing prompts (the hotkey handles everything)

## What happens behind the scenes

After confirmation, the wallet:

1. **Splits** the total weight into shares (currently 16 shares)
2. **Encrypts** each share under the election authority's public key (El Gamal) and derives a deterministic blind factor per share from the spending key and vote context (enabling crash recovery without persisting secrets)
3. **Constructs** a Vote Commitment: `vc = H(DOMAIN_VC, voting_round_id, shares_hash, proposal_id, vote_decision)`
4. **Computes ZKP #2** proving the vote commitment is valid
5. **Submits** the vote commitment to the vote chain (consuming the VAN, producing a new one)
6. **Sends** each encrypted share as a payload to a submission server
7. The server constructs ZKP #3 for each share and submits at staggered intervals

The user's interaction ends at step 3. Everything else is backgrounded.

See [ZKP #2 — Vote Proof](/shielded-vote-docs/zkp-specifications/zkp2-vote-proof.md) and [ZKP #3 — Vote Reveal Proof](/shielded-vote-docs/zkp-specifications/zkp3-vote-reveal-proof.md) for the circuit specifications.
