Live Private Voting

Generate a real Groth16 vote proof and submit it on-chain

This flow now reads the deployed contracts on Polkadot Hub testnet, generates a browser-side proof with the bundled circuit artifacts, and submits the proof to the live `PrivateVoting` contract.

Loading proposal and Merkle root data from the deployed contracts...

Proof Inputs

Paste the Merkle proof bundle issued for your allowlisted identity. The address stays local in the browser; the contract only sees the proof, the proposal, and the vote.

On-chain Merkle root

Loading...

Execution Readiness

Connected wallet

Not connected yet

Submission requirements

1. Proposal must still be active.

2. Merkle path and nullifier must match the on-chain root.

3. Wallet must be on the Polkadot Hub testnet EVM chain.

Operator Notes

The proof bundle requires 20 Merkle path elements and 20 path indices because the voting circuit is compiled for a depth-20 tree.

The proving assets are synced into `frontend/public/circuits` automatically during `npm run dev` and `npm run build`, so the browser always uses the repo’s latest circuit artifacts.