@vocdoni/davinci-contracts
v0.0.28
Published
Smart contracts powering DAVINCI's digital voting protocol
Readme
Vocdoni DAVINCI Contracts
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.
📋 Table of Contents
🔍 Overview
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
🏗️ Architecture
Core Components
- 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
📦 Installation
Prerequisites
Setup
- 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🛠️ Development
Building
# Clean and build everything
./build_all.sh
# Or build individually
forge build
npx hardhat compileCode Quality
# Linting
npm run lint:sol
npm run prettier
# Security analysis
npm run slither
npm run mythrilTypeScript Support
The project includes TypeScript bindings:
npm run typechainGo Bindings
Generate Go bindings for contract integration:
./go_bind.sh🧪 Testing
Run 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🚢 Deployment
Local Development
- Start a local node:
anvil- Deploy contracts:
forge script script/DeployAll.s.sol --rpc-url http://localhost:8545 --broadcastTestnet/Mainnet Deployment
- 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 --verify📚 Documentation
🤝 Contributing
We 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
📜 License
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
🔗 Links
🙏 Acknowledgments
Built with ❤️ by Vocdoni.
