Repolode
TrustLevel

TrustLevel/ZK-Voting-App

Cardano에서 영지식 증명으로 투표자의 소속을 확인하고 투표는 익명으로 유지하는 개인정보 보호형 온체인 투표 앱입니다.

스타
5
포크
4
열린 이슈
0
마지막 커밋
3일 전

어떤 프로젝트인가요?

ZK Voting App은 Cardano 블록체인 기반의 투표 애플리케이션입니다. 주최자는 이벤트를 만들고 참가자를 이메일로 초대한 뒤, 투표 컨트랙트를 온체인에 게시합니다. 각 참가자는 브라우저에서 Semaphore identity를 생성하고 공개 커밋을 등록한 다음, Groth16 영지식 증명을 첨부해 투표합니다. 이 증명은 투표자가 등록된 그룹에 속해 있음을 보여 주며, 중복 투표를 막는 일회용 nullifier도 포함합니다. 따라서 제출된 투표를 투표자와 연결할 수 없습니다.

앱은 간단 투표(1인당 한 가지 선택)와 가중 투표(정해진 점수를 여러 선택지에 배분)를 지원합니다. 백엔드가 투표 트랜잭션을 생성하고 제출하므로 투표자에게는 지갑이나 ADA가 필요하지 않습니다. 이벤트는 Cardano Mainnet 또는 Preprod 테스트넷에서 진행할 수 있으며, 주최자가 이벤트 생성 시 네트워크를 선택합니다. 투표 기간이 끝나면 온체인에서 집계 결과를 확인할 수 있습니다.

저장소는 Aiken 스마트 컨트랙트, SQLite 및 LevelDB를 사용하는 NestJS 백엔드, Next.js 프런트엔드, 트랜잭션 빌더, ZK 증명 모듈로 구성되어 있습니다.

핵심 기능

  • 01Semaphore 기반 Groth16 영지식 증명을 통한 익명 투표
  • 02일회용 nullifier로 중복 투표 방지
  • 03간단 투표 및 가중 투표 모드
  • 04투표자에게 지갑이나 ADA가 필요 없으며, 백엔드가 트랜잭션을 제출
  • 05Cardano에서 최종 집계 결과를 공개적으로 검증 가능

활용 사례

  • 참가자의 선택을 비공개로 유지해야 하는 구속력 있는 비공개 그룹 투표 진행
  • 온체인에서 변조 여부를 확인할 수 있는 결과를 원하는 조직의 구성원 투표 운영
  • Preprod 테스트넷에서 무료로 익명 온체인 투표 체험

빠른 시작

  1. 1

    모든 워크스페이스를 설치합니다

    npm install
  2. 2

    환경 변수를 설정합니다(백엔드에는 Blockfrost 키와 자금이 충전된 릴레이 지갑이 필요합니다)

    cp src/backend/.env.example src/backend/.env && cp src/frontend/.env.example src/frontend/.env.local
  3. 3

    백엔드를 포트 3000에서 시작합니다

    cd src/backend && npm run start:dev
  4. 4

    프런트엔드를 포트 3002에서 시작합니다

    cd src/frontend && npm run dev

사용 전 알아둘 점

  • 로컬에서 실행하려면 Blockfrost API 키와 자금이 충전된 Preprod 릴레이 지갑이 필요합니다.
  • Mainnet에서는 주최자가 약 15 ADA와 수수료를 부담하며, 투표자 1명당 1.3 ADA의 보증금이 필요합니다.
  • GitHub용 SSH 키가 없거나 git URL을 HTTPS로 다시 쓰도록 먼저 설정하지 않으면 설치가 실패할 수 있습니다.

포함된 컬렉션

토픽

#zero-knowledge#cardano#blockchain#voting#privacy#semaphore#groth16#typescript

자주 묻는 질문

ZK-Voting-App은(는) 무엇인가요?
Cardano에서 영지식 증명으로 투표자의 소속을 확인하고 투표는 익명으로 유지하는 개인정보 보호형 온체인 투표 앱입니다. ZK Voting App은 Cardano 블록체인 기반의 투표 애플리케이션입니다. 주최자는 이벤트를 만들고 참가자를 이메일로 초대한 뒤, 투표 컨트랙트를 온체인에 게시합니다. 각 참가자는 브라우저에서 Semaphore identity를 생성하고 공개 커밋을 등록한 다음, Groth16 영지식 증명을 첨부해 투표합니다. 이 증명은 투표자가 등록된 그룹에 속해 있음을 보여 주며, 중복 투표를 막는 일회용 nullifier도 포함합니다. 따라서 제출된 투표를 투표자와 연결할 수 없습니다.
ZK-Voting-App은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
ZK-Voting-App은(는) Apache-2.0 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
ZK-Voting-App은(는) 아직 유지보수되고 있나요?
활발히 유지보수 중. ZK-Voting-App의 마지막 커밋은 2026년 11월 4일입니다.
ZK-Voting-App은(는) 어디에 사용할 수 있나요?
참가자의 선택을 비공개로 유지해야 하는 구속력 있는 비공개 그룹 투표 진행 온체인에서 변조 여부를 확인할 수 있는 결과를 원하는 조직의 구성원 투표 운영 Preprod 테스트넷에서 무료로 익명 온체인 투표 체험
ZK-Voting-App는 어떻게 설치하나요?
모든 워크스페이스를 설치합니다: npm install 환경 변수를 설정합니다(백엔드에는 Blockfrost 키와 자금이 충전된 릴레이 지갑이 필요합니다): cp src/backend/.env.example src/backend/.env && cp src/frontend/.env.example src/frontend/.env.local 백엔드를 포트 3000에서 시작합니다: cd src/backend && npm run start:dev 프런트엔드를 포트 3002에서 시작합니다: cd src/frontend && npm run dev
ZK-Voting-App은(는) 어디서 받을 수 있나요?
소스 코드와 설치 방법은 GitHub에 있습니다: https://github.com/TrustLevel/ZK-Voting-App

요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.

관련 프로젝트

circom 회로에 사용하는 Groth16, PLONK, FFLONK zkSNARK 증명을 생성하고 검증하는 JavaScript 및 WebAssembly 라이브러리입니다.

보안#zksnark#zero-knowledge#cryptography
2천+2 이번 주489JavaScriptGPL-3.0업데이트 지난달