详解Vocdoni:去中心化的投票系统

Vocdoni是一个用户友好、高度安全、以隐私为中心的治理平台。目前Aragon已经收购了Vocdoni协议背后的公司DvoteLabsOü,该公司旨在使用去中心化技术构建最安全,匿名的投票系统。Vocdoni提供基于普遍可验证,私有和可扩展投票的治理解决方案,该解决方案是为来自公共和私人市场的组织(包括市政当局,公共管理机构,公司和会员协会)量身定制的。Vocdoni的技术利用zkSnarks来启用完全匿名投票,IPFS和libp2p来实现反审查数据可用性和协议通信,以及第二层特定的投票目的区块链Vochain来透明地进行投票。Vocdoni的平台以前托管了有史以来最大的投票程序,完全在formnium Cultural的公共区块链上进行,,mniumCultural是欧洲最大的文化协会,拥有超过18万名人口普查。

I.背景

Devote Labs诞生于2017年加泰罗尼亚独立运动,Vocdoni项目官方人员主要由加泰罗尼亚人组成,他们曾亲身经历过压制民主投票。当时,加泰罗尼亚试图脱离西班牙被认为是非法的。在警察镇压,骚乱和高调逮捕之后,投票最终以平局告终。

简而言之,Vocdoni将分散式基础架构(例如星际文件系统(IPFS))与最新的零知识证明(zk-SNKARKs)相结合,旨在将民主带入21世纪。该项目虽然不是crypt-first,但使用了Cosmos区块链也采用的Tendermint共识机制。后来,2021年12月 Aragon宣布收购其位于爱沙尼亚的实验室Dvote LabsOü的投票项目Vocdoni。Vocdoni首席财务官JOANArús在接受CoinDesk的电话采访中表示,此次收购以私募价格完成,Vocdoni的团队成员在此次收购中收到了一笔私募ANT,这是收购的一部分,是Aragon网络的代币。

II.团队,附属机构与合作伙伴:

2021年1月11日,Aragon协会宣布收购Dvote LabsOÜ,该公司旨在使用Vocdoni等去中心化技术构建最安全,匿名的投票系统,其团队由9名开发人员以及支持人员组成。

II.1.高管团队

Xavier Vives - 联合创始人,产品负责人:在大多数情况下,Xavier的工作涉及确保Vocdoni的平稳运行。随着项目的发展,他的重点集中在Vocdoni平台的产品管理上,产品设计及创建可行的产品推出策略。在他的整个职业生涯中,他追求各种整合方法,使他可以胜任北美,亚洲和欧洲地区初创企业中产品开发的各个级别的工作。

Pau Escrich – 联合创始人兼CTO:Pau是Vocdoni的首席工程师,主要是mesh网络,分布式系统,安全性和区块链集成方面的专家。在此之前,他是qmp.cat,libremesh.org等各种项目的共同创立者,欧盟FP7研究项目CONFINE和Community的开发人员。

Joan Arùs –COO和CFO:Joan担任COO和CFO的主要职责是帮助Vocdoni从概念发展为可扩展的业务,确保获得实现此目标所需的资源并领导战略规划,具有扎实的科学和商业背景。在互联网和食品行业创立了几家公司。除此之外,他还是巴塞罗那数字商会的联合创始人,加泰罗尼亚中心区块链顾问。

II.2.技术团队:

Jordi Moraleda – 开发人员:Jordi是全栈开发人员,负责集成整个平台上的集成组件工作。他以新项目的基架开发,研究新框架,测试原型的可行性以及文件协议而出名。乔迪(Jordi)也是三家公司的联合创始人,作为一名加密货币开发者,他以单一竞争对手的身份赢得了有史以来的他的第一次黑客松比赛。

Abel Boldy –开发人员:Abel是一名DevOps工程师,在分布式基础架构,Linux,网络,安全性,监视以及与系统相关方面具有很强的专业知识。在DAppNode工作2年。

Jordi Pinyana Paga – 开发人员:Jordi Pinyana是区块链后端开发人员,在以太坊和Tendermint方面拥有丰富的经验。他主要致力于使用Golang开发Vochain(第一个用于投票处理和会计的区块链)。此外,他还是加泰罗尼亚理工大学的区块链教授。

Emmanouil Dimogerontakis – 开发人员:Emmanouil是一位分布式网络工程师。工作包括设计和实施中间层及后台系统。在专业领域,他分析了分布式网络,在博士期间主要研究底层mesh网络。在过去的几年中,Emmanouil专注于区块链技术与去中心化网络的应用。

Òscar Casajuana – 开发人员:高级全栈开发人员,主要专注于Vocdoni的前端客户端应用程序,例如管理器和区块链浏览器。在过去的十年中,他为多家公司创建了应用程序,并构建了多种类型的基础架构,并掌握了从上到下的所有有关Web开发的重要知识。

-Nathaniel Williams – 开发人员:一个初级的全栈开发人员,专注于为Vocdoni的投票区块链以及Vocdoni移动应用程序构建区块链浏览器。他是Vocdoni的全职雇员,于2019年夏季作为实习生首次加入该团队。

II.3.商务团队

Ferran Reyes – 商务主管:Ferran管理Vocdoni的商务,重点是伙伴关系,社交媒体和促进基层的交流。在Vocdoni之外,他是西班牙最大的电信合作社SomConnexiò的董事会成员。

III.Vocdoni 初衷

Vocdoni核心协议是Aragon协议栈的一部分,其创新之处,是实施第一个去中心化,抗审查和匿名的在线投票协议。但是,除了这些技术抱负之外,该议定还支持与广泛的民主进程进行兼容。Vocdoni完成了通用的投票规范有关部分。

III.1.投票流程

在Vocdoni的体系结构中,每个组织都会在数据库或公共分类帐中维护潜在选民的公钥列表。下面是使用Vocdoni进行投票的步骤:

1. 创建投票程序:组织者整理了属于符合投票条件的选民的密钥清单,以进行选民普查(例如,年龄超过16岁的成员)。他们使用ZK-Snark友好的哈希函数(Poseidon)对它们进行哈希处理,并创建了Merkle tree。通过分布式文件系统(IPFS)分发数据结构,即选民普查,并将过程元数据(包括普查的Merkle根和用于投票加密的过程公钥)发布在以太坊区块链上。

2. 投票:一旦过程开始,用户即可投票。为此,他们需要提供有效的“特许证明”以证明其资格。

3. 不具有匿名性:每个用户将计算其Merkle证明,可以使用它来计算投票过程的Merkle根,从而验证它们是否是普查的一部分。

4. 具有匿名性:为了满足唯一性和匿名性要求,每个用户都使用零知识证明(ZK-Snark)将选票附在信封中.ZK-Snark证明(特许证明)是一种易于验证的手段在不透露选民身份的情况下证明选民的资格。就是说,该方法允许用户说服第三方验证者参与普查,并且他们只能投一次,且不透露有关选民或投票本身的任何信息。

5. 选票验证:一个基于Tendermint的自定义区块链负责验证投票信封和特许经营证明,以存储和计算有效选票。这被称为投票链(Vochain)。投票主要由三部分组成:

选举/进程ID。

加密或未加密的投票内容。

特许经营证明(Franchise Proof)

III.2.数据可用性:

通常,数据可用性是由所谓的云提供的,实际上,这意味着由少数几家非常强大的公司收集我们的数据并进行集中化管理。Vocdoni的目标是成为一个自治生态系统,因此我们尝试对所有非敏感数据进行去中心化和分布式。

目前,Vodconi依靠“星际文件系统”(IPFS)来存储信息。在投票过程中,将引用文本(问题,描述和选项),补充图像和普查(可以由公共密钥或用户声明形成)。这些数据不必永久保存,并且保存起来很昂贵,因此可以将其上传到IPFS,直到作废为止。由于Vocdoni设计是模块化的,因此将来需要更多地集成数据层,例如Etherphere Swarm,DAT或STORj。

III.3.数据同步

IPFS可以完成这项工作,但是如果没有人在上传数据时将其“选中”,则只能从原始位置获得。为了确保数据的可用性和弹性,创建固定相同内容的IPFS节点群集。为此,创建者开始使用“ ipfs-cluster”,但是发现现有体系结构存在一些不兼容问题。因此,他们开发了一个名为“ ipfs-sync”的新组件。遵循KISS方法,“ IPFS同步”使创建IPFS群集的方式更加快捷,简便。创建自己的集群所需的唯一条件是共享密钥,它将用作对称密钥来加密,认证和查找其他集群节点。当前可以与libp2p / rendezvous,swarm / pss一起用p2p传递层实现传输消息。

每个ipfs-sync节点都会在确定性的Merkle树中聚合本地固定文件列表。根通过DHT网络向共享相同秘密的节点进行广播。找到新的根后,节点会向消息的发起者询问其 pins列表。因此,所有节点都将具有相同的文件列表和相同的Merkle树。除了数据同步外,节点还通过DHT宣布其Multiadress地址,因此其他集群节点可以通过IPFS连接。

III.4.数据完整性和主要协作

人们可能将这个组件称为“圣经”,但实际上是“以太坊”。以太坊是所有主要和重要信息的存储地。出于可扩展性的原因,创建者尝试尽可能少地使用它。目前,Vocdoni使用的是Goerli tesnet,但开发人员计划在Vocdoni整合后将基础架构转移至主网(Mainnet)。

Vocdoni部署了两个智能合约:   

1Entity resolver智能合约,其中包含使用Vocdoni各实体的元数据。用于履行该合约的以太坊服务名称(ENS)为“ entity-resolver.vocdoni.eth”。

解析合约程序对实体元数据的信息,以及其他信息的源或URI进行索引。此外,“ entity-id”下记录的“ vnd.vocdoni.eth”将以JSON格式返回可找到描述实体的URI(通常为IPFS)。此外,还允许其他记录信息,例如“ vnd.vocdoni.boot-nodes”,该记录指示使用哪些指引节点访问其他组件。如果实体未指定,则将使用Vocdoni的默认启动节点。

2流程管理智能合约,用于发布和管理选举流程。实体(以太坊地址标识)想要创建一个新流程。实体可以向该合约发送包含创建合约所需交易的基本信息,例如:

选举类型(民意测验,snarks等)。

开始和结束区组数。

带有选举数据信息的URI元数据(存储在IPFS上的JSON文件)。

选民普查哈希根和URI。

该合约受一个或多个Oracle监视,Oracle是以太坊和Vochain组件的桥梁。

III.5.身份

除非密钥确实属于目标用户,否则无法保证投票的准确性。在我们的身份识别模型中,用户在其设备上生成密钥。因此,当涉及识别时,应选择自治权身份。用户通过辅助渠道向社区证明他们有投票权以及密钥的所有权。Vocdoni的设计与选民的验证方式无关,社区可以按要求选择。在当前阶段,Vodconi使用著名的简单ECDSA公钥/私钥对。目前,暂时通过公共密钥来识别用户或实体。

III.6.普查

实体有责任更新公共用户密钥列表。为此,Vodconi提供了一项普查服务,该服务使“ REST API后端”可以方便地管理普查。API的主要思想是允许实体拥有和管理其私人基础设施。通常,数据库存储真实的用户数据,例如姓名,电子邮件地址和电话号码。但是Vocdoni还提供了一个非常简单的基于Web的统一解决方案,任何实体都可以免费使用。在Vocdoni设计中,人口普查是由合格选民的ECDSA公钥列表,基于“

iden3实施”,使用Poseidon哈希(对ZK-Snarks友好)在Merkle树上汇总而成。

为什么要使用Merkle树作为普查数据结构?

1整个数据结构可以总结为一个散列

2用户可以提供Merkle证明来证明符合普查身份的工作。例如,在上面的示例中,左侧Pubkey的所有者只需要发送其Pubkey + Hash4 + Hash2(命名为兄弟)即可允许第三方重构哈希根。证明者不需要访问整个数据结构,只需访问根(32字节)即可。

III.7.投票

Vocdoni的目标是扩展和支持各种规模的投票程序,甚至在未来举行数百万合格选民的大选。为此,Vocdoni的创建者实现了自己的名为Vochain的投票区块链项目。该设计意味着范式转移。Vocdoni系统无需依赖集中式计数系统,且任何人都可以审核投票过程,同时创建可视化工具。Vocdoni为此发布名为“检查程序(scrutinizer)”的基本系统,任何人都可以运行该系统来验证结果的正确性。

Vochain没有代币,也没有虚拟机。它唯一的目的是利用一种非常有效的方式来验证和计数选票。基于“ Tendermint”,因此是加权的权威证明。节点(矿工或验证者)允许在Vochain上创建新区块通过以太坊智能合约来管理和协调。Vocdoni合并后,下一步就是启用混合的权威性证明/权益证明,以分散者的权限,实现去中心化验证。

oracle是能够创建一组特殊交易的特殊Vochain身份,充当以太坊和Vochain之间的桥梁。因此,一旦在以太坊中创建新的投票流程,oracles 就会向“ Vochain”发送一个“ addProcess”交易。尽管oracles是受信任的组件,任何人都可以验证他们没有操纵或采用任何形式的审查制度。

当前,Vochain允许进行以下交易:

addProcess:创建新的选举(仅适用于oracle)。

cancelProcess:取消当前的选举(仅适用于Oracle)。

addVote:为现有的进程ID(投票)发送新的投票。

addOracle:添加由公钥标识的新oracle(仅适用于矿工)。

removeOracle:删除现有的oracle(仅限矿工)。

addValidator:添加由公钥标识的新矿工(仅矿工)。

removeValidator:删除现有的矿工(仅限矿工)。

addProcessKey:添加用于加密投票有效负载的加密公共密钥(仅限矿工)。

revelProcessKey:添加用于解密投票有效负载的加密私钥(仅限矿工)。

区块链的状态由三个嵌套的在单个根哈希中(称为状态哈希)的Merkle树代表。所有知名矿工必须在本地计算相同的哈希值。这种机制确保所有区块链字节都是正确的并且具有有效共识。例如,如果矿工在区块123开始新的投票,则新的根哈希将在p2p网络上进行广播。然后,区块链的所有节点将验证相同的投票,包括检查计算出的状态是否匹配(如果不匹配,它们将分叉)。

当前实施和允许的投票类型为:

民意调查:对于非匿名投票,选民必须提供有效的Merkle证明以证明其资格。

Snarks:对于匿名投票,投票者必须提供有效的ZK-Snark证明(处于POC状态)。

Vocdoni如何实现去中心化的?

Vocdoni的大多数组件都基于去中心化技术:IPFS,以太坊,Tendermint等。但是,所有这些技术在CPU /内存和网络上都非常消耗资源。因此,在智能手机或Web环境中运行它们并不现实。要解决该问题,需要创建一个名为Gateway的新组件。

网关为P2P网络提供了一个入口。它们允许客户端通过WebSocket HTTP(s)API接口访问权力分散服务。网关密码存储在go-dvote repository中。当前,可以根据网关业主的意愿启用/禁用五个可用的API,它们是:

File api:提供对IPFS或其他支持的文件系统的访问。

Census api:提供普查的访问权限,例如创建和发布新的普查或为符合条件的选民生成Merkle证明。

Vote api:提供Vochain的访问,例如进行新的投票。

Results api:如果启用,Vochain审查程序将计算选举结果汇总给客户端。

Web3 API:为以太坊区块链提供访问权限。

Gateways 为愿意为Vocdoni生态系统做出贡献的人添加网关,但也可以由不信任其他网关并希望完全自控交流的用户添加网关。目前,Vodconi团队正在研究网关激励机制,以确保网关网络具有良好运行状况。新的网关启动后,它将通过P2P / DHT网络(当前为libp2p)公开。Bootnodes将检查网关是否正常工作,并将正常的网关添加到列表中。当APP客户端需要访问网关时,它将与Bootnodes联系以获取此列表并选择一个(或多个)网关。另一方面,Bootnode基于 entity-resolver 智能合约进行管理。

网关可能会受到攻击,但任何人都可以设置新网关,因此,网络可以像现有的区块链一样横向扩展。计划与DappNode整合使网关可以一键部署,最后,在持续的DDOS攻击中,可以私下和静默添加网关。因此,组织或社区可以共享自己的私有网关基础架构,以确保他们可以访问Vocdoni平台。

如何在Vocdoni中实现匿名?

匿名投票是通过零知识技术Zk-Snarks来实现的。Zk-Snark证明是一种向第三方验证者证明选民处于普查范围内并且在不透露其身份的情况下进行不超过两次投票的简单方法。

每个Zk-Snark用例都需要其自己的流程,由证明者和验证者共享。流程主要由密码运算符组成,并以严格和确定的方式确定输入值是否有效。Vocdoni团队使用非标准叉(non-standard fork)(进行了一些细微的修改)来设计和实现他们的流程。Circm是由“ iden3”开发和维护的项目。

专用输入端是生成ZK-Snark证明时专用的输入端。它们主要是Merkle证明(表明用户是普查的一部分)和私钥(用户的身份)组成。一旦用户为特定的普查根和ElectionID生成了有效的证明,便需要将Nullifier与Vote软件包一起公开。该无效符是独特的数字,它将标识投票(但不能标识其所有权),因此,如果相同身份投票两次,将被显示。另一方面,需要公共输入端来验证Zk-Snark证明,因此任何证明者都能访问这些输入端。

普查默克尔根。

投票包(可能被加密)。

选举ID(ElectionID)。

取消者(Nullifier)。

提交密钥。

提交和显示密钥启用减少购买投票的机制。所有公开密钥公开后,任何人都可以为特定选举生成有效的Zk-Snark证明。因此,一旦选举结束,用户就无法公示自己支持特定选项的选票。除此之外,一旦新的选举开始,Vochain的矿工将自动生成提交密钥,而公开密钥将在完成后立即发布。这是匿名投票架构的弱点之一,但出现的前提是所有矿工都同意篡改选举结果。

关于透明度,可以强制执行吗?

透明度是确保普选可靠性的关键。如果任何人都可以在系统内验证正确性,则该过程是端到端可验证性。Vocdoni团队使用区块链技术实现了端到端验证,因为当投票过程完成时,任何人都可以下载并验证相应的Vochain,从而评估发布的结果正确性。

尽管Vocdoni力求最大程度地提高其组件的透明度,使整体上去信任化,但并不可能完全透明。从本质上需要一些信任,例如实体的私有普查。但是,即使实体尝试操纵普查,也有一些属性可以缓解这些问题:

任何人都可以检查选举结果,所有选民信息(目前通常很容易混淆)都存储在公共场所并开放Vochain区块链。区块链中不会更新任何个人或敏感数据。

任何人都可以检查普查的规模,因此,如果实体试图添加相关数量的虚假身份来操纵选举,则观察员都可能会找出(即,如果市议会有1000名居民,则1200个身份的普查将显示示警红旗)。

如果实体在普查中替换了身份,则替换的用户将注意到该身份(不发送投票),因此,如果在一定数量的用户中发生此情况,则很可能会发现这种操作。

III.8.Vocdoni投票协议

Vocdoni投票协议旨在成为一个非常简单而有力的说明,用于表现投票和投票过程的结果,后者由一个或多个字段组成,每个字段代表一个问题或一个选项,具体取决于流程类型。投票时,符合条件的选民将从每个字段的选项中进行选择。允许的答案数量、答案类型还取决于特定的流程类型。合格的选民通过投票来表达自己的选择。

选票显示为自然数的数组(或列表)。数组的每个位置都应对流程字段答案。之后,将结果累积在二维自然数数组(矩阵)中,此矩阵的每个箭头对应一个选票字段,每列对应于该字段的一个可能值。结果矩阵中的任何数字都只是该索引所表示值的票数。

为了深入研究如何配置流程,下面给出了一个通用示例。假设我们有一个包含三个字段A,B和C的过程,每个字段都启用0、1和2作为可能的值。我们不知道这些值或字段代表什么,这暂时不重要。

在此示例中,已投了两票。第一个投票者为A字段选择了值2,B字段选择了0,C字段选择了1.第二个投票的值分别为0、0和2.可以在上图中看到投票与结果矩阵的关系。选票值的索引确定该值所属的字段-即选票1的第一个索引的值为2,因此选票1将值2分配给字段A.在结果矩阵的每个字段中,该值投票数由其索引表示。我们在字段A的索引2处放置1以代表对值2的一票表决。

III.9.协议本身:

投票协议由数字和布尔(真/假)变量组成,这些变量限制有效投票的格式。

1.如何用协议表示所提出的示例?

首先,我们知道有三个字段,因此:

3.maxCout = 3。

我们用0、1和2作为有效值,因此我们可以设置:

4.minValue = 0。

5.maxValue = 2。

第二张选票包含多个字段的值0。因此,为了使这次投票有效,我们必须设置:

6.uniqueValues = 0(此处的0表示“ false”,而1表示“ true”)。

接下来的三个变量没有一组具有明显赋值,因此让我们在示例过程中添加更多内容。例如,说这个过程只是单一问题,要求选民将代币委派给不同的组织。每个字段代表一个组织,分配给该字段的值是选民要分配给该组织的代币数量。

我们已经根据minValue和maxValue变量进行设置; 我们知道每个用户可以向任何一个组织分配0到2个代币。但是我们添加一条合理的规则,使选民总共只能分配3个代币。我们还可以假设选民必须分配至少1个代币。这使上图的流程图更有意义; 第一次投票总共分配了3个代币(也许他们支持组织A和C,但他们更喜欢A)。第二次投票仅分配其3个可能的代币中的2个(它们仅支持组织C,宁愿浪费他们的第三个代币而不是将其分配给A或B)。因此,为了使两个选票均有效,我们可以设置:

7.minTotalCost = 1。

8.maxTotalCost = 3。

我们需要设置的最后一个变量是cost Exponent,它与二次方投票有关。我们暂时不会进行这种类型的投票,所以我们设置默认值:

9.costExponent = 1。

同样,花点时间思考一下这些变量,看看是否能理解更改其中任一变量会如何影响示例投票过程。

III.10.结果解析

上面的变量代表了Vocdoni投票协议的整体,其中涵盖了处理核心基础架构的选票验证和结果列表。但显然,在试验中仍然缺少很多信息。协议的集成商需要决定如何将过程中发生的事情传达给投票者,以及如何解析和表示结果矩阵。结果解析不在选票协议的范围内,但与了解如何使用该协议有关。在当前迭代版本中中,Vodconi定义了两种结果解析格式:“索引加权(Index-weighted)”和“离散值(Discrete values)”。

1.索引加权

在示例过程中,我们将使用索引加权结果解释公式。该模式适用于单一问题过程,例如排名选择,

多选或参与预算。结果矩阵字段中的每个索引代表一个加权值,在这种情况下,权重代表分配给组织的代币数量。投票总和乘以其指数加权值即为该字段的总价值。

我们的示例过程汇总了解释。机构A收到2个代币,机构C收到3个代币。

2.离散值

离散值解释用于每个字段有其自身问题的流程。在这里,每个值代表一个单独的离散选项(即“候选2”),而不是乘数(即“ 2指向该选项”)。这样,该方法通过简单汇报每个字段获得最多投票的值(如果有)来解释结果。

0用于选项之间的联系。

这两种格式并非穷尽的。如上所述,投票协议本身与结果的汇总方式无关,任何在协议上构建自己的应用层的人都可以定义自己的结果解释。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。