Разработка блокчейн-голосования: от анонимности до верификации с аудитом

Представьте, что на выборах в DAO фальсифицируют результаты через reentrancy-атаку на смарт-контракт. Или голоса утекают через майнинг метаданных транзакций. По статистике, каждый десятый DAO сталкивается с попыткой манипуляции голосованием. Мы разрабатываем системы голосования на блокчейне, которые

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Представьте, что на выборах в 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). Закажите консультацию для обсуждения вашего проекта — получите бесплатный анализ требований и предварительную оценку.