> 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/circuit-components/poseidon-hash.md).

# Poseidon Hash

**Used in:** All ZKPs

## What it does

Poseidon is the primary hash function used throughout Shielded Vote for commitments, nullifier derivation, and Merkle tree node hashing. It is an arithmetization-friendly hash function — designed for efficient evaluation inside arithmetic circuits (SNARKs/STARKs).

## Where it appears

* **Commitments** — VAN commitments, vote commitments, governance commitments
* **Nullifiers** — Governance nullifiers, VAN nullifiers, share nullifiers
* **Merkle trees** — The vote commitment tree uses Poseidon for internal nodes (replacing Sinsemilla from mainchain ZCash, for faster in-circuit proving)
* **Rho binding** — The signed note's rho is a Poseidon hash

## Why Poseidon over Sinsemilla

ZCash mainchain uses Sinsemilla for the note commitment tree. Shielded Vote uses Poseidon instead because:

* Poseidon has fewer constraints per hash invocation in Halo2 circuits
* The vote chain is independent from mainchain — no compatibility requirement
* Poseidon is used consistently across all vote chain circuits (IMT, VCT, VAN commitments, nullifiers)
