{"id":25802925,"url":"https://github.com/unitychain/zkvote-node","last_synced_at":"2026-03-05T04:04:09.103Z","repository":{"id":37514467,"uuid":"222359181","full_name":"Unitychain/zkvote-node","owner":"Unitychain","description":"Using ZK-SNARK to Implement Decentralized Anonymous Voting on p2p Network","archived":false,"fork":false,"pushed_at":"2020-06-08T10:28:40.000Z","size":92817,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-06-21T08:51:01.889Z","etag":null,"topics":["dht","golang","kademlia","libp2p","p2p","zero-knowledge-proofs","zkp"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Unitychain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-18T03:51:49.000Z","updated_at":"2024-05-26T11:45:46.000Z","dependencies_parsed_at":"2022-08-19T05:21:15.737Z","dependency_job_id":null,"html_url":"https://github.com/Unitychain/zkvote-node","commit_stats":null,"previous_names":["unitychain/zkvote"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Unitychain%2Fzkvote-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Unitychain%2Fzkvote-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Unitychain%2Fzkvote-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Unitychain%2Fzkvote-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Unitychain","download_url":"https://codeload.github.com/Unitychain/zkvote-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241039553,"owners_count":19898706,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dht","golang","kademlia","libp2p","p2p","zero-knowledge-proofs","zkp"],"created_at":"2025-02-27T17:36:45.481Z","updated_at":"2026-03-05T04:04:05.559Z","avatar_url":"https://github.com/Unitychain.png","language":"Go","readme":"# zkvote: Using ZK-SNARK to Implement Decentralized Anonymous Voting on p2p Network\n**zkvote** is a powerful tool for anonymous voting. It uses a cryptographic function called a ZK-SNARK to keep the voter from revealing its identity. It is also built on a peer-to-peer network so that no single entity or authortity can control the access or result of the voting. Moreover, zkvote utilizes a developing standard called Decentralized Identifier (DID) and Verifiable Credential (VC) to prove the validity of the identity.\n\n## How it Works?\n![](https://i.imgur.com/RAAnWn8.png)\n\n1. **Generate keypair**\n    - Use `zkvote-web` to generate keypair / DID / identity commitment\n    - Doesn't support import at this moment\n    - Store in browser localStorage\n2. **Propose/Join**\n    - Proposer\n        - Use `zkvote-web` to propose a new subject to be voted on\n    - Joiner\n        - Use `zkvote-web` to join an existing subject\n3. **Exchange VC**\n    - Joiner sends its identity commitment to proposer via other network\n      - For example: email, SMS...\n    - Proposer receives the identity commitment of the joiner from the network\n    - Proposer generates a verifiable credential (VC) for joiner and sends it to joiner. This VC includes:\n        - Subject hash\n        - identity commitment of joiner\n        - Signature of issuer\n        - public key of issuer\n    - Joiner receives the VC\n4. **Vote**\n    - Proposer\n        - Generates the proof that corresponds to the subject\n        - Uploads the proof and the VC to `zkvote-node`\n    - Joiner\n        - **Verify the VC for the subject**\n        - Generates the proof that corresponds to the subject\n        - Uploads the proof and the VC to `zkvote-node`\n5. **Open**\n    - Use `zkvote-web` to see the latest result\n\n## Contribution\nSee [this document](https://hackmd.io/@juincc/B1QV5NN5S) for more technical details\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funitychain%2Fzkvote-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funitychain%2Fzkvote-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funitychain%2Fzkvote-node/lists"}