DISCLAIMER: The code in this repository is a work-in-progress and it is not meant to be used in production environments.
Smart contracts powering DAVINCI's (Decentralized Autonomous Vote Integrity Network with Cryptographic Inference) digital voting protocol - a cutting-edge voting system that leverages zero-knowledge proofs and blockchain technology to enable secure, verifiable, coercion-resistant, and anonymous digital voting.
- Overview
- Architecture
- Installation
- Development
- Testing
- Deployment
- Documentation
- Contributing
- License
The Vocdoni DAVINCI contracts work together with a set of sequencers that implement a specialized zkRollup system that enables secure digital voting with complete privacy guarantees. The system uses multiple layers of cryptographic proofs:
- Identity Proofs: Voters prove their right to participate via identity proofs
- Vote Proofs: Voters prove their ballot is valid without revealing choices
- State Transition Proofs: Prove correct vote aggregation and state updates
- Results Proofs: Final tally is proven correct while maintaining vote privacy
- OrganizationRegistry: Manages creation and administration of voting organizations
- ProcessRegistry: Handles voting process lifecycle, state transitions, and results
- ZK Verifiers: On-chain verification of zkSNARK proofs for state transitions and results
- Process ID Library: Utilities for generating unique process identifiers
- Clone the repository:
git clone https://github.com/vocdoni/davinci-contracts.git
cd davinci-contracts- Install dependencies:
npm install
forge install- Set up environment variables:
cp .env.example .env
# Edit .env with your configuration- Build the project:
./build_all.sh# Clean and build everything
./build_all.sh
# Or build individually
forge build
npx hardhat compile# Linting
npm run lint:sol
npm run prettier
# Security analysis
npm run slither
npm run mythrilThe project includes TypeScript bindings:
npm run typechainGenerate Go bindings for contract integration:
./go_bind.shRun the comprehensive test suite:
# Run all tests
forge test
# Run with verbosity
forge test -vvv
# Run specific test file
forge test --match-path test/ProcessRegistry.t.sol
# Gas reporting
forge test --gas-report- Start a local node:
anvil- Deploy contracts:
forge script script/DeployAll.s.sol --rpc-url http://localhost:8545 --broadcast- Configure network in
.env:
PRIVATE_KEY=your_deployment_key
RPC_URL=your_rpc_endpoint- Deploy:
forge script script/DeployAll.s.sol --rpc-url $RPC_URL --broadcast --verifyWe welcome contributions!
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
Built with β€οΈ by Vocdoni.