Skip to content

vocdoni/davinci-contracts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

92 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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.

License: AGPL v3 Version

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

  1. OrganizationRegistry: Manages creation and administration of voting organizations
  2. ProcessRegistry: Handles voting process lifecycle, state transitions, and results
  3. ZK Verifiers: On-chain verification of zkSNARK proofs for state transitions and results
  4. Process ID Library: Utilities for generating unique process identifiers

πŸ“¦ Installation

Prerequisites

Setup

  1. Clone the repository:
git clone https://github.com/vocdoni/davinci-contracts.git
cd davinci-contracts
  1. Install dependencies:
npm install
forge install
  1. Set up environment variables:
cp .env.example .env
# Edit .env with your configuration
  1. Build the project:
./build_all.sh

πŸ› οΈ Development

Building

# Clean and build everything
./build_all.sh

# Or build individually
forge build
npx hardhat compile

Code Quality

# Linting
npm run lint:sol
npm run prettier

# Security analysis
npm run slither
npm run mythril

TypeScript Support

The project includes TypeScript bindings:

npm run typechain

Go 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

  1. Start a local node:
anvil
  1. Deploy contracts:
forge script script/DeployAll.s.sol --rpc-url http://localhost:8545 --broadcast

Testnet/Mainnet Deployment

  1. Configure network in .env:
PRIVATE_KEY=your_deployment_key
RPC_URL=your_rpc_endpoint
  1. Deploy:
forge script script/DeployAll.s.sol --rpc-url $RPC_URL --broadcast --verify

πŸ“š Documentation

🀝 Contributing

We welcome contributions!

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. 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.

About

EVM contracts for DAVINCI

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5