Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

vocdoni/davinci-contracts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

133 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. ProcessRegistry: Handles voting process lifecycle, state transitions, and results
  2. ZK Verifiers: On-chain verification of zkSNARK proofs for state transitions and results
  3. Process ID Library: Utilities for generating unique process identifiers

Deployed libraries

  • Sepolia
    • PoseidonT3: 0x1464bD48D1635E9B9F65cFd629d8E9f507A952dD
    • PoseidonT4: 0xd747896B912C1585b04007c103D10A04e71bfb25

πŸ“¦ 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
CHAIN_ID=your_chain_id
ACTIVATE_BLOBS=True
VERIFY_MODE=auto

# Optional: reuse already deployed libraries.
# If any of these are unset or point to an address without bytecode,
# deploy_all.sh will deploy that library and print export lines you can reuse.
POSEIDON_T3_ADDRESS=
POSEIDON_T4_ADDRESS=
STATE_ROOT_LIB_ADDRESS=
PROCESS_ID_LIB_ADDRESS=
BLOBS_LIB_ADDRESS=
  1. Deploy:
./deploy_all.sh

deploy_all.sh resolves libraries in this order:

  1. PoseidonT3
  2. PoseidonT4
  3. StateRootLib (linked against Poseidon)
  4. ProcessIdLib
  5. BlobsLib

Then it deploys the main contracts with explicit linking for all of them.

Verification behavior is controlled by VERIFY_MODE:

  • auto: disable verification on local chains (31337, 1337), enable otherwise
  • true: always attempt verification
  • false: never 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.