voting-circuits 0.1.0

Governance ZKP circuits (delegation, vote proof, share reveal) for the Zcash shielded-voting protocol.
Documentation

voting-circuits

Governance ZKP circuits for the Zcash shielded-voting protocol.

Contains the three Halo 2 circuits wallets use to participate in a vote round without revealing which notes back their ballot:

  • ZKP1 / delegation — prove ownership of unspent Orchard notes at the snapshot height and bind the delegated weight to a fresh voting hotkey (creates a VAN on the vote commitment tree).
  • ZKP2 / vote commitment — consume a VAN and produce a (proposal_id, vote_decision) commitment leaf.
  • ZKP3 / share reveal — open one of the 16 encrypted shares of a vote in a way that's verifiable without revealing the whole ballot.

Usage

This crate is the circuit-only side. Wallets typically don't call it directly; they consume the higher-level zcash_voting crate which wraps proof generation, hotkey derivation, share construction, and the HTTP wire format.

If you do want the raw gadgets for a custom prover:

use voting_circuits::vote_proof::circuit::VoteProofCircuit;
// ... assemble public/private inputs and run halo2_proofs

Dependency on valar-orchard

This crate depends on valar-orchard, a Valar Group fork of the upstream orchard crate that adds the governance-visibility methods the voting circuits rely on. When the relevant changes land in upstream zcash/orchard, this crate's dependency will flip back to the real upstream and valar-orchard will be yanked. See the shielded-voting plan for status.

License

Dual-licensed under MIT or Apache-2.0. See LICENSE-MIT and LICENSE-APACHE.