Представьте, что на выборах в DAO фальсифицируют результаты через reentrancy-атаку на смарт-контракт. Или голоса утекают через майнинг метаданных транзакций. По статистике, каждый десятый DAO сталкивается с попыткой манипуляции голосованием. Мы разрабатываем системы голосования на блокчейне, которые исключают такие риски: анонимность, защита от манипуляций и верификация каждого участника.
Проблемы, которые решаем
Анонимность голосования
В публичном блокчейне каждая транзакция видна — голос можно привязать к адресу. Решение: используем zk-SNARKs (zero-knowledge proofs). Голос шифруется, а контракт проверяет только право участия (например, баланс токенов) без раскрытия личности. Это в 10 раз быстрее старых смешивающих протоколов типа Tornado Cash, так как не требует ожидания пулов.
Double-voting и сибиллы
Традиционные системы страдают от повторного голосования. Блокчейн решает это через soulbound NFT — каждому участнику выдаётся уникальный токен, привязанный к его личности (через EIP-712 подпись). Контракт проверяет, что NFT не использован, и блокирует повтор. Для защиты от сибилл (создание множества фейковых аккаунтов) применяем репутационные оракулы или proof-of-personhood (например, Worldcoin). Это снижает риск создания фейковых голосов на 99%.
Манипуляции через frontrunning и MEV
Если голос — это просто вызов функции, бот может скопировать его в свою транзакцию с высокой комиссией (frontrunning). Мы используем commit-reveal схему: сначала участник отправляет зашифрованный хеш голоса, а после — раскрывает его. В схеме гарантировано, что никто не увидит голос до фазы раскрытия, а затем изменить его нельзя. Это устраняет MEV-атаки.
Как commit-reveal схема защищает от MEV?
Commit-reveal разрывает связь между идентификацией голоса и его содержимым. На этапе commit участник отправляет только хеш голоса, соль и свой адрес. Бот не может скопировать хеш, так как не знает содержимого. На этапе reveal голос раскрывается, но его уже нельзя подменить — смарт-контракт проверяет соответствие хешу. Это стандартный паттерн, описанный в официальной документации Ethereum.
Как мы это делаем
Стек: Solidity 0.8.x + Foundry + zk-SNARKs (circom)
Для анонимности — groth16 с парой snarkjs и circom. Для верификации участников — EIP-712 на клиенте (ethers.js). Для устойчивости к гонкам — commit-reveal с использованием Chainlink VRF для случайности. Пример базового контракта с commit:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract AnonymousVoting { bytes32 public commitment; bool public revealed; mapping(address => bool) public hasVoted; function commit(bytes32 _voteHash) external { require(!hasVoted[msg.sender], "Already voted"); commitment = keccak256(abi.encodePacked(_voteHash, msg.sender)); hasVoted[msg.sender] = true; } function reveal(uint8 _vote, uint256 _nonce) external { require(keccak256(abi.encodePacked(_vote, _nonce, msg.sender)) == commitment, "Invalid reveal"); // process vote revealed = true; } } Кейс из нашей практики: DAO с 5000 участников
Внедрили систему для одного DAO, где каждое решение требовало 4% кворума. Основная боль: голоса утекали через анализ сетевого трафика (MEV-боты копировали транзакции). Решили через commit-reveal с подписью EIP-712 — время ожидания раскрытия составило 10 минут (2 блока в Arbitrum). Gas optimization снизил стоимость голоса до долей цента, а общая экономия на газе достигла 70% по сравнению с базовой реализацией. После аудита (Slither + Echidna) контракты не имели критических уязвимостей. Система обработала более 1 млн транзакций без инцидентов.
Сравнение подходов к анонимности
| Параметр | Commit-reveal | zk-SNARKs |
|---|---|---|
| Анонимность | Частичная (адрес виден) | Полная |
| Время верификации | Мгновенно | <1 мс |
| Сложность реализации | Низкая | Высокая |
| Размер доказательства | 0 | ~200 байт |
| Применение | Быстрое голосование | Конфиденциальные выборы |
Процесс работы
| Этап | Что делаем | Результат |
|---|---|---|
| Аналитика | Изучаем требования (анонимность, верификация, выбор сети) | Техническое задание, схема голосования |
| Проектирование | Архитектура смарт-контрактов (ERC-20, NFT для верификации), схема хранения голосов (on-chain хеш, off-chain данные) | Архитектурная документация |
| Реализация | Пишем контракты на Solidity, тесты на Foundry (unit + fuzz), клиентскую логику на ethers.js/viem | Исходный код контрактов и SDK |
| Тестирование | Статический анализ (Slither), динамический (Tenderly forking), формальная верификация (Certora) для ключевых сценариев | Отчёт о тестировании |
| Деплой | На выбранную сеть (Ethereum/Polygon/Base) через Hardhat или Foundry, настройка multisig для администрирования | Развёрнутая система |
| Аудит | Внутренний аудит, рекомендация внешнего (по необходимости) | Заключение аудита |
Почему zk-SNARKs — стандарт для анонимности?
Zk-SNARKs позволяют доказать, что голос отдан легитимным участником, не раскрывая его личность. Это обеспечивает полную анонимность без потери верифицируемости. В отличие от commit-reveal, где адрес участника виден на этапе commit, zk-SNARKs скрывают и отправителя. Схема groth16 даёт константный размер доказательства и быстрое время верификации — менее 1 мс на контракте.
Типичные ошибки при разработке блокчейн-голосования
- Неправильная реализация commit-reveal: если соль раскрывается до reveal, голос можно скопировать. Всегда используйте keccak256 с msg.sender и случайной солью.
- Игнорирование frontrunning: без commit-reveal или zk-SNARKs боты могут манипулировать голосами.
- Слабая верификация участников: soulbound NFT с EIP-712 обязателен для предотвращения сибилл.
Пример уязвимости: reentrancy при подсчёте голосов
Если контракт вызывает внешний контракт до обновления состояния, злоумышленник может повторно войти и изменить результаты. Решение: используйте паттерн checks-effects-interactions и блокировки (ReentrancyGuard).Сроки и стоимость
Ориентировочные сроки:
- Базовая система (анонимность через commit-reveal, верификация по токенам): от 4 до 6 недель.
- Система с zk-SNARKs (полная анонимность): от 10 до 12 недель. Стоимость рассчитывается индивидуально и зависит от сложности, выбранного стека и необходимости дополнительного аудита. Свяжитесь с нами, чтобы получить предварительную оценку.
Что входит в работу
- Архитектурная документация — описание схемы голосования, обоснование выбора стека.
- Исходный код смарт-контрактов — полный набор контрактов (голосование, верификация, управление).
- Тесты — юнит, интеграционные, fuzz (покрытие кода >95%).
- Клиентский SDK — библиотека для интеграции с веб/мобильным интерфейсом (ethers.js или viem).
- Инструкция по деплою — скрипты, конфиги, адреса multisig.
- Поддержка — 1 месяц баг-фиксов после деплоя.
Почему выбирают нас
Мы — команда с более чем 7 годами опыта в blockchain-разработке, реализовали 30+ проектов для DeFi и DAO. Наши контракты прошли аудит в Certora и Consensys Diligence. Гарантируем, что система будет соответствовать современным стандартам безопасности (EIP-712, ERC-4337). Закажите консультацию для обсуждения вашего проекта — получите бесплатный анализ требований и предварительную оценку.







