This project consists of a basic implementation of private multisig smart contracts.
It allows multisig participants to approve or reject proposals anonymously without revealing individual ballots until everyone has voted.
Tip
Please check out the original paper.
- Anonymous membership via Cartesian Merkle proofs.
- ECC ElGamal encrypted votes with homomorphic ciphertext aggregation.
- Non-interactive DKG-based keys.
- On-chain ZK verification of core operations.
- All participants are required to vote.
- Only one proposal can be in the voting state at a time.
- Votes revelation and results computation scale linearly with the number of participants.
Warning
This is an unaudited PoC. Use at your own risk.
- Install dependencies
npm install
- Generate circuit verifiers
npx hardhat zkit verifiers
- Compile the contracts and run tests:
npm run compile npm run test - Deploy the contracts:
npm run deploy-sepolia
Privacy is not a feature, it's a right.