Explaining Vocdoni: Decentralized Voting System

Daorayaki Vocdoni is a user-friendly, highly secure, privacy-centric governance platform.

Daorayaki Vocdoni is a user-friendly, highly secure, privacy-centric governance platform. Currently Aragon has acquired DvoteLabsOü, the company behind the Vocdoni protocol, which aims to build the most secure, anonymous voting system using decentralized technology. governing bodies, companies and membership associations).

Vocdoni’s technology leverages zkSnarks to enable fully anonymous voting, IPFS and libp2p for anti-censorship data availability and protocol communication, and a second layer of voting-specific blockchain, Vochain, to transparently conduct voting. vocdoni’s platform previously hosted the largest voting process ever, entirely on formnium Cultural’s public blockchain,,mniumCultural is the largest cultural association in Europe with a census of over 180,000 people. I.Background

Devote Labs was born out of the Catalan independence movement in 2017, and the official staff of the Vocdoni project consists mainly of Catalans who have experienced first-hand the suppression of democratic voting. At the time, Catalonia’s attempt to secede from Spain was considered illegal. After a police crackdown, riots and high-profile arrests, the vote ended in a draw. In short, Vocdoni combines decentralized infrastructures such as the Interplanetary File System (IPFS) with the latest zero-knowledge proofs (zk-SNKARKs), aiming to bring democracy into the 21st century. The project, while not crypt-first, uses the Tendermint consensus mechanism also employed by the Cosmos blockchain. Later, in December 2021 Aragon announced the acquisition of its Estonia-based lab Dvote LabsOü’s voting project Vocdoni. in a phone interview with CoinDesk, Vocdoni CFO JOANArús said that the acquisition was completed at a private placement price, and that Vocdoni’s team members received a private placement of ANT, which was part of the acquisition and is a token of the Aragon network.

II.Team, Affiliates and Partners.
On January 11, 2021, Aragon Association announced the acquisition of Dvote LabsOÜ, a company that aims to build the most secure, anonymous voting system using decentralized technologies such as Vocdoni, with a team of nine developers as well as support staff.

II.1. Executive Team

-Xavier Vives – Co-founder, Head of Product: For the most part, Xavier’s job involves ensuring the smooth operation of Vocdoni. As the project evolved, his focus was focused on product management of the Vocdoni platform, product design and creating a viable product launch strategy. Throughout his career, he has pursued various integrated approaches that allow him to work at all levels of product development in startups in North America, Asia and Europe.

-Pau Escrich – Co-Founder and CTO: Pau is a Principal Engineer at Vocdoni and is primarily an expert in mesh networks, distributed systems, security and blockchain integration. Before that, he was co-founder of various projects such as qmp.cat, libremesh.org, developer of the EU FP7 research projects CONFINE and Community.

-Joan Arùs -COO and CFO: Joan’s main role as COO and CFO is to help Vocdoni grow from concept to scalable business, secure the resources needed to achieve this goal and lead strategic planning, with a solid scientific and business background. He has founded several companies in the internet and food industries. In addition, he is co-founder of the Barcelona Digital Chamber of Commerce and consultant of the Catalan Center Blockchain.

II.2. Technical Team:

-Jordi Moraleda – Developer: Jordi is a full-stack developer and is responsible for integrating integration components working on the whole platform. He is known for base-frame development of new projects, researching new frameworks, testing the feasibility of prototypes and documentation protocols. Jordi is also the co-founder of three companies and won his first ever hackathon as a cryptocurrency developer with a single competitor.

-Abel Boldy – Developer: Abel is a DevOps engineer with strong expertise in distributed infrastructure, Linux, networking, security, monitoring and related systems. Worked at DAppNode for 2 years.

-Jordi Pinyana Paga – Developer: Jordi Pinyana is a blockchain backend developer with extensive experience in Ether and Tendermint. His main focus is on the development of Vochain (the first blockchain for voting processing and accounting) using Golang. In addition, he is a blockchain professor at the Universitat Politècnica de Catalunya.

-Emmanouil Dimogerontakis – Developer: Emmanouil is a distributed network engineer. His work includes the design and implementation of middle-tier and back-end systems. In his area of expertise, he analyzes distributed networks, focusing on the underlying mesh networks during his PhD. In the last years, Emmanouil has focused on blockchain technology with applications in decentralized networks.

-Òscar Casajuana – Developer: Senior full-stack developer, focusing mainly on front-end client applications for Vocdoni, such as managers and blockchain browsers. He has created applications and built multiple types of infrastructure for multiple companies over the last decade and has acquired all the important knowledge about web development from top to bottom.

-Nathaniel Williams – Developer: A junior full-stack developer focused on building blockchain browsers for Vocdoni’s voting blockchain as well as Vocdoni mobile apps. He is a full-time employee of Vocdoni and first joined the team as an intern in summer 2019.

II.3. Commerce Team – Ferran Reyes – Head of Commerce: Ferran manages Vocdoni’s commerce with a focus on partnerships, social media and facilitating grassroots communication. Outside of Vocdoni, he is a member of the Board of Directors of SomConnexiò, the largest telecommunications cooperative in Spain.

III. Vocdoni’s initial vision

The Vocdoni core protocol is part of the Aragon stack, whose innovation is the implementation of the first decentralized, censorship-resistant and anonymous online voting protocol. Vocdoni completes the relevant parts of the common voting specification.

III.1. Voting Process

In Vocdoni’s architecture, each organization maintains a list of public keys of potential voters in a database or public ledger. The following are the steps for voting with Vocdoni.

  1. Create a voting process: Organizers compile a list of keys belonging to voters eligible to vote for a voter census (e.g., members over the age of 16). They hash them using the ZK-Snark friendly hash function (Poseidon) and create the Merkle tree. distribute the data structure, i.e., the voter census, through the distributed file system (IPFS) and publish the process metadata (including the Merkle root of the census and the process public key for voting encryption) on the ethereum blockchain.
  2. Voting: Once the process begins, users can vote. To do so, they need to provide a valid “proof of privilege” to prove their eligibility. 3.
  3. without anonymity: each user will calculate their Merkle proof, which can be used to calculate the Merkle root of the voting process and thus verify whether they are part of the census.
  4. With anonymity: To satisfy the uniqueness and anonymity requirements, each user attaches a ballot to an envelope using a zero-knowledge proof (ZK-Snark).The ZK-Snark proof (charter proof) is an easily verifiable means of proving voter eligibility without revealing the voter’s identity. That is, the method allows the user to convince a third-party verifier to participate in the census and that they can only vote once and without revealing any information about the voter or the vote itself.
  5. Ballot validation: A custom blockchain based on Tendermint is responsible for validating voting envelopes and franchise certificates to store and count valid ballots. This is called the voting chain (Vochain). The ballot consists of three main components: -Election/process ID. -Encrypted or unencrypted ballot content. -Franchise Proof (Franchise Proof)
Explaining Vocdoni: Decentralized Voting System

III.2. Data availability.

Usually, data availability is provided by the so-called cloud, which in practice means that a few very powerful companies collect our data and manage it centrally. vocdoni aims to be an autonomous ecosystem, so we try to decentralize and distribute all non-sensitive data. Currently, Vodconi relies on the “Interplanetary File System” (IPFS) to store information. During the voting process, text (questions, descriptions and options) is referenced, supplemented by images and census (which can be formed by public keys or user statements).

This data does not have to be stored permanently and is expensive to keep, so it can be uploaded to IPFS until voided. Since Vocdoni is designed to be modular, more integration of data layers such as Etherphere Swarm, DAT or STORj will be needed in the future.

III.3. Data synchronization

IPFS can do the job, but if no one “checks” the data when it is uploaded, it will only be available from the original location. To ensure the availability and resilience of the data, a cluster of IPFS nodes with fixed identical content is created. For this purpose, the creators started using “ipfs-cluster”, but found some incompatibilities with the existing architecture. Therefore, they developed a new component called “ipfs-sync”. Following the KISS approach, “IPFS-sync” makes creating IPFS clusters much faster and easier.

The only requirement to create your own cluster is a shared key, which will be used as a symmetric key to encrypt, authenticate and find other cluster nodes. Currently it can be implemented with libp2p / rendezvous, swarm / pss together with the p2p delivery layer to transfer messages. Each ipfs-sync node aggregates a list of local fixed files in a deterministic Merkle tree. The root broadcasts over the DHT network to nodes that share the same secret. When a new root is found, the node asks the originator of the message for its list of pins. As a result, all nodes will have the same list of files and the same Merkle tree. In addition to data synchronization, nodes announce their Multiadress addresses via DHT, so other cluster nodes can connect via IPFS.

III.4. Data integrity and primary collaboration

One might call this component the “bible”, but it is actually the “ethereum”. Ether is the place where all primary and important information is stored. For scalability reasons, the creators tried to use it as little as possible. Currently, Vocdoni uses the Goerli tesnet, but the developers plan to move the infrastructure to the Mainnet after Vocdoni integration.
Vocdoni deploys two smart contracts.
1- Entity resolver smart contract, which contains metadata for each entity using Vocdoni. The name of the Ethernet service (ENS) used to fulfill this contract is “entity-resolver.vocdoni.eth”. The parsing contract program indexes the information of the entity metadata, as well as the source or URI of other information. In addition, the “vnd.vocdoni.eth” recorded under “entity-id” will return the URI (usually IPFS) that describes the entity in JSON format. In addition, other record information is allowed, such as “vnd.vocdoni.boot-nodes”, which indicates which guide nodes are used to access other components. If the entity is not specified, the default boot nodes of Vocdoni will be used.

2-Process management smart contract for publishing and managing the election process. The entity (Ethernet address identifier) wants to create a new process. The entity can send to this contract basic information containing the transactions needed to create the contract, for example: -The type of election (polls, snarks, etc.). -Number of start and end blocks. -URI metadata with information about the election data (JSON file stored on IPFS). -Voter census hash roots and URIs. the contract is monitored by one or more Oracle, which is the bridge between the Ether and Vochain components.

III.5. Identity

The accuracy of the vote cannot be guaranteed unless the key actually belongs to the target user. In our identification model, users generate keys on their devices. Therefore, when it comes to identification, an autonomous identity should be selected. Users prove to the community that they have the right to vote as well as the ownership of the key through a secondary channel. vocdoni is designed to be independent of how voters are verified and the community can choose on demand. In the current phase, Vodconi uses the well-known simple ECDSA public/private key pair. Currently, for the time being, users or entities are identified by public keys.


It is the responsibility of the entity to update the list of public user keys. The main idea of the API is to allow entities to own and manage their private infrastructure. Usually, the database stores real user data, such as names, email addresses and phone numbers. But Vocdoni also provides a very simple web-based unified solution that any entity can use for free. In the Vocdoni design, the census is aggregated from a list of ECDSA public keys of eligible voters, based on an “iden3 implementation”, using Poseidon hashes (friendly to ZK-Snarks) in a Merkle tree.

Explaining Vocdoni: Decentralized Voting System

Why use Merkle tree as a census data structure?1 – The whole data structure can be summarized as a hash2 – The user can provide Merkle proofs to prove compliance with the census identity work. For example, in the example above, the owner of the left Pubkey only needs to send its Pubkey + Hash4 + Hash2 (named as brother) to allow third parties to reconstruct the hash root. The provers do not need to access the entire data structure, only the root (32 bytes).

III.7. Voting

Vocdoni’s goal is to scale and support voting procedures of all sizes, even for future general elections of millions of eligible voters. To this end, Vocdoni’s creators implemented their own voting blockchain project called Vochain. The design implies a paradigm shift; the Vocdoni system does not rely on a centralized counting system, and anyone can audit the voting process and create visualization tools. verify the correctness of the results.

Vochain has no tokens and no virtual machines. Its only purpose is to use a very efficient way to verify and count votes. Based on “Tendermint” and therefore weighted proof of authority. The nodes (miners or verifiers) allow the creation of new blocks on Vochain to be managed and coordinated through ethereum smart contracts. after the Vocdoni merger, the next step is to enable a hybrid proof of authority/proof of interest to decentralize verification with the authority of the decentralizer.

The oracle is a special Vochain identity capable of creating a special set of transactions, acting as a bridge between Ether and Vochain. Therefore, once a new voting process is created in Ether, oracles sends an “addProcess” transaction to the “Vochain”. Although oracles are trusted components, anyone can verify that they are not manipulating or employing any form of censorship.

Currently, Vochain allows the following transactions.

-addProcess: Creates a new election (oracle only).

-cancelProcess: Cancels a current election (oracle only).

-addVote: Send a new vote for an existing process ID (vote).

-addOracle: Add new oracle identified by public key (only for miners).

-removeOracle: remove an existing oracle (miners only).

-addValidator: Add a new miner identified by the public key (miners only).

-removeValidator: Remove existing miners (miners only).

-addProcessKey: Add the cryptographic public key used to encrypt the voting payload (miners only).

-revelProcessKey: Add the cryptographic private key used to decrypt the voting payload (miners only).

Explaining Vocdoni: Decentralized Voting System

The state of the blockchain is represented by three nested Merkle trees in a single root hash (called a state hash). All well-known miners must compute the same hash locally. This mechanism ensures that all blockchain bytes are correct and have a valid consensus. For example, if a miner starts a new vote in block 123, the new root hash will be broadcast on the p2p network. All nodes of the blockchain will then verify the same vote, including checking if the computed states match (if they do not, they will fork). The types of votes currently implemented and allowed are.

-Poll: For non-anonymous votes, voters must provide a valid Merkle proof to prove their eligibility.

-Snarks: For anonymous polls, voters must provide a valid ZK-Snark proof (in POC status). How Vocdoni is decentralized?Most of Vocdoni’s components are based on decentralized technologies: IPFS, Ether, Tendermint, etc. However, all these technologies are very resource intensive in terms of CPU / memory and network. Therefore, it is not practical to run them in a smartphone or web environment. To solve the problem, a new component called Gateway needs to be created. Gateways provide an entry point to P2P networks. They allow clients to access power decentralization services through the WebSocket HTTP(s) API interface. Gateway passwords are stored in the go-dvote repository. Currently, there are five available APIs that can be enabled/disabled according to the wishes of the gateway owner, they are

-File api: provides access to IPFS or other supported file systems.

-Census api: provides access to the census, such as creating and publishing new censuses or generating Merkle certificates for eligible voters.

-Vote api: Provides access to Vochain, such as making a new poll.

-Results api: If enabled, the Vochain reviewer will calculate election results in aggregate to the client.

-Web3 API: Providing access to the Ethernet blockchain.

Explaining Vocdoni: Decentralized Voting System

Gateways are added by Gateways for those willing to contribute to the Vocdoni ecosystem, but can also be added by users who do not trust other gateways and want to be completely self-controlled in their communication. Currently, the Vodconi team is working on gateway incentives to ensure that the gateway network is in good working condition. When a new gateway is launched, it will be exposed through the P2P / DHT network (currently libp2p). bootnodes will check if the gateways are working properly and will add the normal ones to the list. When the APP client needs to access a gateway, it will contact Bootnodes to get this list and select one (or more) gateways. On the other hand, Bootnode is managed based on entity-resolver smart contract.

币世界-详解Vocdoni: 去中心化的投票系统

Gateways can be attacked, but anyone can set up new gateways, so the network can scale horizontally just like an existing blockchain. Planned integration with DappNode allows gateways to be deployed with a single click, and finally, gateways can be added privately and silently in the event of a sustained DDOS attack. As a result, organizations or communities can share their own private gateway infrastructure to ensure they have access to the Vocdoni platform.

How to implement anonymity in Vocdoni?

Anonymous voting is achieved through Zk-Snarks, a zero-knowledge technology. Zk-Snark proofs are a simple way to prove to a third-party verifier that a voter is within the census and can vote no more than twice without revealing their identity. Each Zk-Snark use case requires its own process, which is shared between the provers and verifiers. The process consists mainly of cryptographic operators and determines the validity of the input values in a strict and deterministic way. Circm is a project developed and maintained by “iden3”.

Explaining Vocdoni: Decentralized Voting System

Dedicated inputs are dedicated inputs for generating ZK-Snark proofs. They consist mainly of the Merkle proof (indicating that the user is part of the census) and the private key (the user’s identity). Once the user has generated a valid proof for a specific census root and ElectionID, the Nullifier needs to be exposed with the Vote package. This Nullifier is a unique number that will identify the vote (but not its ownership) and will therefore be displayed if the same identity is voted twice. On the other hand, public inputs are needed to verify Zk-Snark proofs, so any prover can access these inputs.
-Census Merkle Root.

-Voting packet (may be encrypted).

-ElectionID (ElectionID).

-Cancellor (Nullifier).

-Submit key. Submitting and displaying keys enables a mechanism to reduce the number of votes purchased. After all public keys are made public, anyone can generate a valid Zk-Snark proof for a specific election. Therefore, once the election is over, users cannot publicly display their votes in favor of a specific option. On top of that, once a new election starts, Vochain’s miners will automatically generate the submission keys, and the public keys will be released as soon as they are completed.

This is one of the weaknesses of the anonymous voting architecture, but it appears only if all miners agree to tamper with the election results. Regarding transparency, can it be enforced? Transparency is key to ensuring the reliability of universal suffrage.

The process is end-to-end verifiable if anyone can verify correctness within the system. the Vocdoni team uses blockchain technology to enable end-to-end verification because when the voting process is complete, anyone can download and verify the corresponding Vochain and thus assess the correctness of the posted results. While Vocdoni seeks to maximize the transparency of its components and make the overall de-trusting, it is not possible to be completely transparent. In essence some trust is needed, for example in the private census of entities. However, even if entities try to manipulate the census, there are attributes that mitigate these problems.

-Anyone can inspect the election results, and all voter information (which is often confusing at this point) is stored in a public place and open to the Vochain blockchain. No personal or sensitive data is updated in the blockchain.

-Anyone can check the size of the census, so if an entity tries to rig the election by adding a relevant number of false identities, observers may be able to figure it out (i.e., if the city council has 1,000 residents, a census of 1,200 identities would show a red flag).

-If the entity replaces an identity in the census, the replacing user will notice the identity (without sending a vote), so if this happens in a certain number of users, it is likely that such manipulation will be detected.

III.8. Vocdoni Voting Protocol

The Vocdoni voting protocol is intended to be a very simple and powerful illustration of the results of a voting and polling process, the latter consisting of one or more fields, each representing a question or an option, depending on the type of process. When voting, eligible voters will choose from the options in each field. The number of answers allowed, and the type of answer also depends on the specific process type. Eligible voters express their choice by voting.

Explaining Vocdoni: Decentralized Voting System

The ballots are displayed as an array (or list) of natural numbers. Each position of the array should correspond to a process field answer. After that, the results are accumulated in a two-dimensional array of natural numbers (matrix), each arrow of this matrix corresponds to a ballot field and each column corresponds to one possible value of that field. Any number in the result matrix is simply the number of votes for the value represented by that index.
To delve into how to configure the process, a generic example is given below. Suppose we have a process that contains three fields A, B and C, each with 0, 1 and 2 enabled as possible values. We do not know what these values or fields represent, which is not important for now. In this example, two votes have been cast.

The first voter has chosen the value 2 for the A field, 0 for the B field, and C for the second vote with values 0, 0, and 2, respectively.The relationship between the votes and the result matrix can be seen in the figure above. The index of the ballot value determines the field to which the value belongs-i.e., the first index of ballot 1 has the value 2, so ballot 1 assigns the value 2 to field A. In each field of the result matrix, the number of votes for that value is represented by its index. We place a 1 at index 2 of field A to represent a vote for value 2.

III.9. the protocol itself.

Explaining Vocdoni: Decentralized Voting System

The voting protocol consists of numeric and Boolean (true/false) variables that restrict the format of valid votes.

  1. How to represent the proposed example in a protocol? First, we know that there are three fields, thus.
  2. maxCout = 3. We use 0, 1 and 2 as valid values, so we can set.

4.minValue = 0.

5.maxValue = 2. The second ballot contains multiple fields with the value 0. Therefore, in order for this vote to be valid, we must set.

6.uniqueValues = 0 (where 0 means ” false” and 1 means ” true”).

None of the next three variables has an obvious assignment, so let’s add more to the sample procedure. For example, say the process is just a single question asking voters to assign tokens to different organizations. Each field represents an organization, and the value assigned to that field is the number of tokens the voter wants to assign to that organization.

We already set this based on the minValue and maxValue variables; we know that each user can assign 0 to 2 tokens to any organization. But we add a reasonable rule so that the voter can only allocate a total of 3 tokens. We can also assume that the voter must allocate at least 1 token. This makes the flow chart above make more sense; the first vote allocates a total of 3 tokens (maybe they support organizations A and C, but they prefer A). The second ballot allocates only 2 of their 3 possible tokens (they only support organization C, preferring to waste their third token rather than allocate it to A or B). Thus, in order to make both ballots valid, we can set

  1. minTotalCost = 1.

8.maxTotalCost = 3. The last variable we need to set is cost Exponent, which is related to quadratic voting. We will not be doing this type of voting for now, so we set the default value of

Again, take some time to think about these variables and see if you can understand how changing any of them would affect the sample voting process.

III.10. Analysis of Results

The variables above represent the Vocdoni voting protocol as a whole, which covers the ballot validation and results list that handles the core infrastructure. However, it is clear that a lot of information is still missing in the experiment. The integrator of the protocol needs to decide how to communicate what happens in the process to the voters and how to parse and represent the result matrix. Results parsing is outside the scope of the ballot protocol, but is relevant to understanding how to use the protocol. In the current iteration, Vodconi defines two result parsing formats: “Index-weighted” and “Discrete values”.

  1. Index-weighted

In the example procedure, we will use index-weighted results to interpret the formula. This model is applicable to single-issue processes such as ranked selection
multiple choice or participation budget. Each index in the result matrix field represents a weighted value, in this case the weight represents the number of tokens assigned to the organization. The sum of the votes multiplied by their index weights is the total value of the field.

Explaining Vocdoni: Decentralized Voting System

Our example process summarizes the explanation. Institution A receives 2 tokens and Institution C receives 3 tokens.

  1. Discrete values

The discrete value interpretation is used for processes where each field has its own issues. Here, each value represents a separate discrete option (i.e., “candidate 2″), rather than a multiplier (i.e., ” 2 points to that option”). In this way, the method interprets the results by simply reporting the value (if any) for which each field received the most votes. 0 is used for the link between options. These two formats are not exhaustive. As mentioned above, the voting protocol itself is independent of how the results are aggregated, and anyone building their own application layer on top of the protocol can define their own interpretation of the results.

Explaining Vocdoni: Decentralized Voting System

Posted by:CoinYuppie,Reprinted with attribution to:https://coinyuppie.com/explaining-vocdoni-decentralized-voting-system/
Coinyuppie is an open information publishing platform, all information provided is not related to the views and positions of coinyuppie, and does not constitute any investment and financial advice. Users are expected to carefully screen and prevent risks.

Like (0)
Donate Buy me a coffee Buy me a coffee
Previous 2021-06-08 04:54
Next 2021-06-08 05:09

Related articles