Библиотека на JavaScript и WebAssembly для создания и проверки zkSNARK-доказательств с Groth16, PLONK и FFLONK, работающая с циркуитами circom.
TrustLevel/ZK-Voting-App
Приложение для анонимного голосования в Cardano: участники подтверждают членство с помощью доказательств с нулевым разглашением, а голоса остаются конфиденциальными.
- Звёзды
- 5
- Форки
- 4
- Открытые issues
- 0
- Последний коммит
- 3 дня назад
Что это?
ZK Voting App — приложение для голосования на блокчейне Cardano. Организатор создаёт событие, приглашает участников по электронной почте и публикует смарт-контракты для голосования в блокчейне. Каждый участник генерирует в браузере идентификатор Semaphore и регистрирует публичный коммитмент, а затем голосует, приложив доказательство с нулевым разглашением Groth16. Доказательство подтверждает, что голосующий входит в зарегистрированную группу, и содержит одноразовый nullifier, который не позволяет проголосовать повторно. При этом связать отданный голос с голосующим невозможно.
Приложение поддерживает обычное голосование (один вариант на человека) и голосование с распределением баллов (фиксированное количество баллов распределяется между вариантами). Голосующим не нужны кошелёк и ADA: серверная часть формирует и отправляет транзакции с их голосами. События можно проводить в Cardano Mainnet или тестовой сети Preprod — организатор выбирает сеть при создании события. После окончания голосования результаты доступны в блокчейне для проверки.
Репозиторий разделён на модули: смарт-контракты Aiken, серверная часть на NestJS с хранилищами SQLite и LevelDB, фронтенд на Next.js, модуль формирования транзакций и модуль доказательств с нулевым разглашением.
Ключевые возможности
- 01Анонимное голосование с помощью доказательств с нулевым разглашением Groth16 на базе Semaphore
- 02Одноразовые nullifier не позволяют проголосовать повторно
- 03Обычный режим голосования и голосование с распределением баллов
- 04Голосующим не нужны кошелёк и ADA — серверная часть отправляет транзакции с их голосами
- 05Итоговые результаты можно публично проверить в Cardano
Сценарии использования
- Проведение обязательного голосования с ограниченным кругом участников, при котором их выбор должен оставаться конфиденциальным
- Организация голосования среди членов организации, которой нужны результаты в блокчейне с защитой от подделки
- Знакомство с анонимным голосованием в блокчейне в тестовой сети Preprod без затрат
Быстрый старт
- 1
Установите все рабочие пространства
npm install - 2
Настройте переменные окружения (для backend нужны ключ Blockfrost и пополненный relay-кошелёк)
cp src/backend/.env.example src/backend/.env && cp src/frontend/.env.example src/frontend/.env.local - 3
Запустите backend на порту 3000
cd src/backend && npm run start:dev - 4
Запустите frontend на порту 3002
cd src/frontend && npm run dev
Что важно знать
- Для локального запуска нужны API-ключ Blockfrost и пополненный relay-кошелёк Preprod.
- В Mainnet организатор платит около 15 ADA плюс комиссии, а за каждого избирателя требуется депозит в размере 1,3 ADA.
- Установка может завершиться с ошибкой, если нет SSH-ключа для GitHub и заранее не настроена замена URL git на HTTPS.
В подборках
Темы
Частые вопросы
- Что такое ZK-Voting-App?
- Приложение для анонимного голосования в Cardano: участники подтверждают членство с помощью доказательств с нулевым разглашением, а голоса остаются конфиденциальными. ZK Voting App — приложение для голосования на блокчейне Cardano. Организатор создаёт событие, приглашает участников по электронной почте и публикует смарт-контракты для голосования в блокчейне. Каждый участник генерирует в браузере идентификатор Semaphore и регистрирует публичный коммитмент, а затем голосует, приложив доказательство с нулевым разглашением Groth16. Доказательство подтверждает, что голосующий входит в зарегистрированную группу, и содержит одноразовый nullifier, который не позволяет проголосовать повторно. При этом связать отданный голос с голосующим невозможно.
- ZK-Voting-App можно использовать бесплатно? Какая у него лицензия?
- ZK-Voting-App распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- ZK-Voting-App всё ещё поддерживается?
- Активно поддерживается. Последний коммит в ZK-Voting-App — 4 нояб. 2026 г..
- Для чего можно использовать ZK-Voting-App?
- Проведение обязательного голосования с ограниченным кругом участников, при котором их выбор должен оставаться конфиденциальным Организация голосования среди членов организации, которой нужны результаты в блокчейне с защитой от подделки Знакомство с анонимным голосованием в блокчейне в тестовой сети Preprod без затрат
- Как установить ZK-Voting-App?
- Установите все рабочие пространства: npm install Настройте переменные окружения (для backend нужны ключ Blockfrost и пополненный relay-кошелёк): cp src/backend/.env.example src/backend/.env && cp src/frontend/.env.example src/frontend/.env.local Запустите backend на порту 3000: cd src/backend && npm run start:dev Запустите frontend на порту 3002: cd src/frontend && npm run dev
- Где скачать ZK-Voting-App?
- Исходный код и инструкции по установке — на GitHub: https://github.com/TrustLevel/ZK-Voting-App
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Децентрализованная операционная система и ПО узлов, обеспечивающие работу сети Aleo для приложений с доказательствами с нулевым разглашением.
Виртуальная машина с нулевым разглашением, которая генерирует доказательства корректного выполнения программ на Rust и других языках, компилируемых через LLVM.
Фреймворк на TypeScript для создания zero-knowledge circuits и zkApps с генерацией и проверкой доказательств в браузере, Node.js или Mina Protocol.
Pastebin с самоуничтожающимися заметками и сквозным шифрованием: заметки шифруются в браузере с помощью AES-256-GCM и исчезают после первого прочтения или через 24 часа.
Самостоятельно размещаемый сервис для обмена одноразовыми паролями, API-ключами, текстом и зашифрованными файлами по самоуничтожающимся ссылкам с шифрованием с нулевым разглашением.