Secret Ballot zkApp

Secret Ballot zkApp

Secret Ballot
SnarkyJS Hackathon hosted by RDI at UC Berkeley: For more info on this hackathon visit https://zk-hacking.org/tracks/zk_snarkyjs_track (from the github readme file)

We implement a private voting zkapp. The idea was to try to implement single stage private voting, say like on Twitter- one where participants do not need to register to vote first, as was done in Minataur. In a voting procedure with a registration step, users are required to make sure that sufficiently many people have signed up for voting before them but not voted and also that sufficient time has passed between their registration and voting transactions, so that their vote may be private.

This can be difficult. Further, it seemed like bad UX. In our implementation, a centralized party (let’s assume honest for now) sets up the voting contract (called secretBallot), which includes as state variables: a randomly chosen ballot_ID the root of the Merkle tree containing the hash of public keys contained in the list of voters the root of a Merkle tree storing the votes for different options a MerkleMap storing nullifiers (hash(private_key, ballot_ID)), which record whether a key has been used for voting or not. In order, to vote, the user controlling the key pair (sk, pk) (secret/private key, public key) proves to the contract that: hash(pk) belongs in the voter list pk is derived from sk the hash(sk, ballot_ID) has not been used to vote before: nullifierMap[hash(sk, ballot_ID)] = 0. Together these 3 imply that the user controls a sk which is eligible to vote but has not been used to vote yet (Note that we are placing some assumption on the amount of information that is leaked by these hashes, especially if the same sk is used for multiple votes).

The user also needs to provide the correct witness and the number of votes for the option, he chooses to vote for Developer Contact Info
GitHub: https://github.com/goforashutosh/secretballot

zkok-id: zkok65 Category: Tag:

Hindi

सीक्रेट बैलट – स्नार्कीजेएस हैकथॉन यूसी बर्कले में आरडीआई द्वारा आयोजित: इस हैकथॉन के बारे में अधिक जानकारी के लिए https://zk-hacking.org/tracks/zk_snarkyjs_track पर जाएं। (जीथब रीडमी फ़ाइल से) हम एक निजी वोटिंग zkapp लागू करते हैं। विचार एकल चरण निजी मतदान को लागू करने का प्रयास करना था, जैसा कि ट्विटर पर कहा गया है – जहां प्रतिभागियों को पहले मतदान करने के लिए पंजीकरण करने की आवश्यकता नहीं है, जैसा कि मिनाटौर में किया गया था। पंजीकरण चरण के साथ मतदान प्रक्रिया में, उपयोगकर्ताओं को यह सुनिश्चित करना आवश्यक है कि उनसे पहले पर्याप्त संख्या में लोगों ने मतदान के लिए साइन अप किया है, लेकिन मतदान नहीं किया है और यह भी कि उनके पंजीकरण और मतदान लेनदेन के बीच पर्याप्त समय बीत चुका है, ताकि उनका वोट निजी हो सके। . यह कठिन हो सकता है. इसके अलावा, यह ख़राब UX जैसा लग रहा था। हमारे कार्यान्वयन में, एक केंद्रीकृत पार्टी (आइए अब ईमानदारी से मान लें) मतदान अनुबंध स्थापित करती है (जिसे सीक्रेटबैलॉट कहा जाता है), जिसमें राज्य चर शामिल हैं: बेतरतीब ढंग से चुना गया मतपत्र_आईडी मर्कल वृक्ष की जड़ जिसमें मतदाताओं की सूची में मौजूद सार्वजनिक कुंजियों का हैश शामिल है मर्कल पेड़ की जड़ विभिन्न विकल्पों के लिए वोट संग्रहीत करती है एक मर्कलेमैप, जो शून्यकर्ताओं (हैश (निजी_कुंजी, मतपत्र_आईडी)) को संग्रहीत करता है, जो रिकॉर्ड करता है कि मतदान के लिए कुंजी का उपयोग किया गया है या नहीं। वोट देने के लिए, कुंजी जोड़ी (एसके, पीके) (गुप्त/निजी कुंजी, सार्वजनिक कुंजी) को नियंत्रित करने वाला उपयोगकर्ता अनुबंध को साबित करता है कि: हैश(पीके) मतदाता सूची में है pk, sk से बना है हैश (एसके, बैलट_आईडी) का उपयोग पहले वोट देने के लिए नहीं किया गया है: nullifierMap[हैश(एसके, बैलट_आईडी)] = 0। इन तीनों का एक साथ तात्पर्य यह है कि उपयोगकर्ता एक ऐसे sk को नियंत्रित करता है जो वोट करने के लिए योग्य है लेकिन अभी तक वोट करने के लिए इसका उपयोग नहीं किया गया है (ध्यान दें कि हम इन हैश द्वारा लीक की गई जानकारी की मात्रा पर कुछ अनुमान लगा रहे हैं, खासकर यदि उसी sk का उपयोग किया जाता है) एकाधिक वोटों के लिए)। उपयोगकर्ता को उस विकल्प के लिए सही गवाह और वोटों की संख्या भी प्रदान करनी होगी, जिसे वह वोट देना चाहता है डेवलपर संपर्क जानकारी GitHub: https://github.com/goforashutos/secretballot

Featured zkApps
MAC!
Katz
Anomix
Social Cap
zkLocus
Protokit
Pado
Wordle
zkFusion
zKeeper
Scroll to Top