Skip to content

distributed-lab/private-multisig

Repository files navigation

Private Multisig Smart Contracts

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.

Key features

  • 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.

Limitations

  • 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.

Steps to build the project

  1. Install dependencies
    npm install
  2. Generate circuit verifiers
    npx hardhat zkit verifiers
  3. Compile the contracts and run tests:
    npm run compile
    npm run test
  4. Deploy the contracts:
    npm run deploy-sepolia

Disclaimer

Privacy is not a feature, it's a right.