本文档介绍了去中心化自治投票完整性网络DAVINCI,它是Vocdoni投票协议的演进,旨在通过零知识证明和区块链技术,提供安全、可验证和匿名的数字投票工具。DAVINCI利用zkSNARKs和同态加密等技术,实现了端到端的投票可验证性、隐私性和无需信任,并通过以太坊智能合约和数据blob等技术,确保了系统的安全性和可扩展性。
DAVINCI 是 Vocdoni 投票协议的演进,旨在通过提供安全、可验证和匿名的数字投票的基本工具来增强公民社会的能力。利用零知识证明和区块链技术的最新进展,Vocdoni 协议转变为专用 zkRollup 系统,该系统继承了以太坊主网等结算层的网络安全性。该系统完全依赖于加密证明来确保完整性和安全性,从而消除了对中心化机构的需求。通过集成 zkSNARKs 和阈值同态加密 (ElGamal),DAVINCI 实现了投票过程中的端到端可验证性、隐私性和无需信任。
该协议采用在排序器之间进行分布式密钥生成,通过以太坊智能合约进行协调,并利用以太坊数据 blob (EIP-4844) 来实现数据可用性。DAVINCI 专注于可访问性、可扩展性、抗收据性和自动化,旨在促进高频率、低成本的投票,从而促进电子投票的大规模采用并简化公民参与。最后,Vocdoni Token (VOC) 的引入协调了参与者之间的激励,从而确保了网络的可持续性。
Voĉdoni 在世界语中意为“给予声音”,体现了我们从基层增强公民社会力量的使命。我们的目标是构建基本的原语和工具,使任何集体——从小组到数百万公民——都能被倾听,无论他们的处境或可用资源如何。
我们的理念设想投票超越了传统的民族国家选举; 我们将其视为一种集体信号机制,具有完整性和结果的加密保证。
为了应对这一挑战,我们开发了一种端到端可验证和匿名的投票系统,旨在可在任何设备上使用,包括智能手机。 我们还成功部署了一个最大限度地提高弹性、中立性和透明度的基础设施。
2018 年 Vocdoni 刚开始时,zkSNARKs 还只是一项新兴技术。 我们选择将我们的解决方案建立在名为 Vochain 的定制拜占庭容错 L1 区块链之上。 这使我们能够实现可扩展性(大约每秒 700 笔交易),利用在基于 EVM 的区块链上成本高昂的高级加密工具,并使用户能够免费发送投票交易。
这一经验为我们提供了宝贵的见解,使我们能够克服技术和运营方面的挑战。 尽管此解决方案已有效地满足了用户需求并证明了其可行性,但作为通用投票协议,进一步的开发对于其广泛采用至关重要。
DAVINCI 代表了 Vocdoni 投票协议的演进。 它集成了用于编排的智能合约、用于验证和累积投票的基于 zkSNARK 的状态机以及用于确保抗审查性的去中心化数据可用性层。
为了构建 DAVINCI 堆栈,我们坚持以下设计原则:
1. 加密技术作为真理的来源: 我们完全依赖于加密证明 -> 广泛验证的加密方案,以确保投票过程的完整性和安全性。 通过仅信任加密技术,我们消除了对中心化机构的需求,从而使系统本质上安全透明。
2. 无需信任: 我们的系统运行无需信任任何一方。 通过加密协议和去中心化基础设施,我们确保系统完整性并防止任何恶意行为者的破坏。
3. 端到端可验证性: 每位选民都可以验证他们的投票从投票到结果计算(字体)。 此外,任何第三方都可以审核选举数据以确认结果(字体,因为它是一项像“无需信任”一样的原则)并验证每张选票都来自唯一注册的选民(字体)。 透明的加密机制使这成为可能。
4. 可组合性: 该系统是模块化的,由可互换的组件组成,这些组件可以通过适应性强的接口重新排列或与外部系统集成。 这允许冗余、灵活性以及与第三方应用程序的无缝集成,我们的 Voting-as-a-Service 的API就是例证。
5. 可访问性: Vocdoni 的投票平台(应用程序)是开源的、公开可用的且用户友好的。 该界面对于所有用户来说都很直观,包括那些不太熟悉技术的用户,并且可以容纳使用屏幕阅读器等辅助技术的选民。
6. 开源: 通过公开我们的代码,我们邀请任何人进行审核和贡献,从而增强安全性并促进社区参与。 透明度使得通过默默无闻来确保系统安全变得完全不必要,并加速了创新。
7. 弹性: 我们的设计旨在防范硬件故障、网络中断和审查。 基础设施去中心化和分布式所有权提高了系统的可用性和抵抗攻击的能力。
8. 可扩展性: 我们的解决方案可以高吞吐量地处理投票,超出当前需求以适应未来的增长。 去中心化基础设施随着使用量的增加而有机地扩展,从而确保一致的性能。
9. 抗收据性: 为了减轻勾结、胁迫和购买选票的风险,该系统使选民能够验证他们的选票,而无需向他人证明他们是如何投票的,从而减少了胁迫和贿赂的动机。 此外,允许选民在保持保密性的同时覆盖他们的选票。
10. 自动化: 我们通过智能合约和加密协议最大限度地减少人为干预,从而降低成本和人为错误。 自动化确保一致的运行,并释放资源用于选民支持、审计和自动执行。
零知识简洁非交互式知识论证是确保投票结果有效性的关键组成部分。 选民生成 zkSNARK 证明来证明他们加密的选票符合投票过程的规则和要求,而不会泄露有关其选择的任何信息。 Sequencer 还生成 zkSNARK 证明,以证明投票正确聚合到共享状态中,该状态维护投票过程的状态。
Merkle 树用于创建选民登记(人口普查)和投票过程状态的加密表示:
阈值同态加密,特别是 ElGamal 方案,用于允许在不解密的情况下对加密投票进行求和。 这使得系统能够在维护个人投票隐私的同时计算最终投票总数。 通过确保在聚合阶段不会公开任何投票,此方案可以保护选民的机密性并提供反胁迫保护,因为一旦添加加密投票,选民就无法向第三方证明他们的选择。
DKG 协议用于以去中心化的方式生成加密公钥 (EPK)。 Sequencer 协同参与 DKG 过程以创建 EPK,从而确保没有单方完全控制密钥。 这种方法保证了加密密钥的安全性,并且只有当达到阈值数量的 Sequencer 发布其份额时,才有可能解密结果。
以太坊智能合约用于协调投票过程、管理状态转换以及存储关键数据,例如当前状态根和加密公钥。 这些智能合约提供了一个无需信任的环境,确保所有参与者都可以确信投票过程规则得到正确执行。
EIP-4844 用于数据可用性,从而可以以太坊数据 blob 的形式存储状态转换数据。 这种机制允许 Sequencer 协作构建和验证投票过程状态,从而确保高效且去中心化的数据可用性。
下面,我们详细介绍了架构的组件,这些组件共同支持投票系统的运行和管理。
与以太坊兼容的网络被用作投票系统的真理来源。 通过利用 EVM 区块链,流程管理可确保所有转换对于所有参与者都是不可变且可验证的。 为此,我们实施了多个智能合约。
流程管理: 此智能合约负责投票流程的生命周期管理。 它包括投票事件的启动、配置、监控、执行和关闭。
结果验证: 此智能合约维护每次投票流程的投票和流程生命周期的完整性。 它通过检查提交的 zkSNARK 证明来验证 Sequencer 提交的每个状态转换是否符合预定义的规则。
Sequencer 注册表: 此智能合约跟踪现有的可用 Sequencer,存储抵押品以确保良好行为,并用于在创建新的投票流程时协调分布式密钥生成。
Sequencer 是一种专用组件,旨在采用零知识证明机制处理投票过程。 它确保与此过程相关的所有交易都经过验证和排序。 Sequencer 定期将投票过程的状态提交给以太坊。
用户界面充当选民和组织者的主要交互层。 它提供了设置、管理和监督选举、投票等工具和功能。 此界面隐藏了管理去中心化投票系统的复杂性。
对于每个投票过程,系统都会跟踪当前状态 Merkle 树,其中包含此类过程的所有信息。 公共数据可用性层确保所有状态转换都可用且可验证,并允许同一投票过程中多个 Sequencer 的参与。
该流程包括投票事件的初始化、分布式密钥生成、加密投票、投票验证和累积,最终公布并公开验证结果。 每个阶段都利用先进的加密技术来确保投票过程的完整性、隐私性和普遍可验证性。
当新的投票流程开始时,Sequencer 会初始化一个新状态,该状态由 Merkle 树的根哈希表示。 此树封装了有关投票过程的所有基本信息,包括过程参数、选民登记(人口普查)、投票配置和初始结果。
对于每批新投票,Sequencer 都会通过生成一个 zkSNARK 证明来更新状态,该证明验证从当前根到新根的状态转换。 此证明会提交到链上进行结算。 这样做,我们在区块链上维护了一个不可变且可验证的投票过程记录。
这种方法允许任何人从结果验证智能合约访问投票过程的最新验证状态,以及处理后续状态更新所需的数据。 该系统的设计使多个 Sequencer 能够参与计票。 他们可以获取当前状态根及其关联的数据来构建下一个状态,并将新投票纳入计票中。 Sequencer 的这种去中心化有助于防止潜在的审查,并增强投票过程的稳健性。
完整性链通过智能合约强制执行和严格的 zkSNARK 电路约束来维护。 这确保了每个状态转换都是有效的,并且建立在上次接受的状态之上,而无需额外的机制。
状态树包含一些特殊的地址(索引),用于存储有关投票过程的一些所需数据:
投票过程从初始状态开始,其中建立 Merkle 树根并在流程管理智能合约上发布。 包含预定义的参数,但结果初始化为零,并且不存在任何无效器。
流程组织者交易包含初始根和必要 Merkle 证明。 这些证明验证初始参数根据投票流程信息是否正确,并且没有存储任何其他信息。 由于初始状态的 `ProcessId` 是一个唯一标识符,因此对于不同的流程不会有重复的根。
为了验证和处理状态转换,我们采用了一个 zkSNARK 电路来强制执行所有协议约束。 此电路证明,基于新处理的投票,从先前的状态根到新状态根的转换是有效的。
该电路具有以下输入(验证证明需要公共输入)。 请注意,我们将电路拆分为 3 个链式电路,每个电路负责验证过程的特定部分。 但是,为简单起见,我们将在本节中将整个电路称为一个电路。
电路必须强制执行以下约束。
censusRoot
或 processId
)保持一致,并且在转换中不会更改。Root1
检索的 censusRoot
验证包含的 Merkle 证明,确认每位选民都包含在人口普查中。Root2
,相应地更新 Merkle 树。Root1
检索的先前结果来准确更新投票结果,以便 results2 = results1 + votes
。blobCommitment
相对应。Root2
)是通过将经过验证的投票和更新应用于 Merkle 树从 Root1
正确计算得出的。在投票期结束时,智能合约停止接受新的状态更新,从而有效地最终确定该流程。 然后可以在链上验证最终状态,从而提供投票结果的不可变记录。
人口普查代表符合资格的选民列表以及他们各自的投票权重。 它以二进制 Merkle 树的形式实现,使用 iden3 稀疏 Merkle 树 (SMT) 和一个 zkSNARK 友好的哈希函数,以确保与零知识证明的兼容性。
在此 Merkle 树中:
此结构允许高效生成和验证 Merkle 证明,使选民能够在不泄露整个人口普查数据的情况下证明他们的资格和投票权重。
投票流程的组织者负责构建人口普查数据。 只有人口普查 Merkle 树的 根哈希 存储在链上,从而在最大限度地降低链上数据存储成本的同时,确保透明度和不变性。 完整的人口普查数据在链下共享,通常通过 IPFS 或 HTTPS 端点,允许参与者和 Sequencer 获取数据并根据需要生成 Merkle 证明。
尽管构建人口普查数据的方法超出了核心协议的范围,但我们提供了对常见方法的见解,以适应各种用例。
对于维护符合资格的选民及其投票权重的私有列表的组织(例如会员数据库、CRM 系统或 CSV 文件),可以针对每个投票流程直接从此数据集构建人口普查数据。 组织者将列表转换为 Merkle 树格式,确保每个选民的地址和权重都正确地表示在叶子中。 这种方法很简单,并且使选民登记保持机密性,因为只有根哈希是公开的。
该协议支持使用自主身份系统。 如果选民的身份通过 SSI 解决方案进行管理,并且他们的地址在链上或链下可用,则人口普查数据可以包含此信息。 组织者聚合 SSI 数据以构建 Merkle 树,从而允许选民使用其自我管理的身份安全地参与投票过程。
要利用现有的基于以太坊的 Token(例如 NFT 或 ERC20 Token)作为人口普查数据的基础,有两种主要方法:
为了确保准确性并防止欺诈,会有一个异议期,在此期间,任何人都可以质疑人口普查数据的有效性。 如果发现差异,例如不正确的余额或缺失的地址,挑战者可以提交欺诈证明。 这通常涉及提供来自人口普查数据的 Merkle 证明和以太坊存储证明(根据 EIP-1186),以显示指定区块高度的正确余额。 如果挑战有效,则可以拒绝人口普查数据。
ZK 方法: ZK 方法涉及生成使用零知识证明进行加密验证的人口普查数据。 对于给定的以太坊区块号和状态根,链下 zkSNARK 电路验证了人口普查 Merkle 树的正确构建:
投票包含多个组件,这些组件协同工作以确保安全、私密且可验证的投票。 这些组件包括:
下面,我们详细介绍了每个组件及其在投票流程中的作用。
流程标识符 (`ProcessId`) 是一个唯一的 32 字节数字,用于唯一标识 DAVINCI 网络中的特定投票流程。 它通过附加链 ID、组织者的地址和一个 nonce 来确保唯一性而形成的。 此标识符由流程管理智能合约管理。
人口普查证明充当选民的身份验证机制,确保只有符合资格的选民才能参与。 根据流程配置,选民提供:
选票包含根据选票协议规则编码的选民选择。 为了确保隐私,选票使用椭圆曲线上的 ElGamal 密码系统加密,该系统允许对加密的投票进行同态组合。
加密过程:
m 被编码为一个点
M 在椭圆曲线上。
k∈[1,n−1],其中
n 是椭圆曲线群的阶。
(C1,C2)。
零知识证明 (ZKP):
选民生成一个 ZKP 来证明选票和加密过程的正确性:
(C1,C2) 是从明文消息正确计算出来的
M 和随机标量
k。
m 遵循选票协议约束,例如有效选择和允许的选择数量。
k。
ZKP 电路的输入:
公共输入:
(C1,C2)。
V.
A。
PID。
私有输入:
m。
k。
VoteId
V 是一个唯一的标识符,用于标识已投的选票。 由于选民可以发出多个选票,因此 VoteId 可用于跟踪每个选票。 它还用于防止重放选票,因为它属于状态 Merkle 树的一部分。 VoteId 的计算方法如下:
V=Hash(Address∥ProcessId∥k)
其中:
地址是选民的唯一标识符,通常是他们的以太坊地址或投票过程中使用的任何其他唯一标识符。 它用于将选票链接到选民,并确保每位选民每个投票过程只能投一张选票。
签名验证选票并确保它是经合法选举人投出的。 选民使用其私钥签署必要的组件,具体取决于人口普查配置(例如,ECDSA、EdDSA、RSA)。
Vocdoni 选票协议定义了一种简单有效的机制,用于在任何类型的选举或集体决策过程中进行投票和计票。 每个投票过程由一个或多个字段组成,选民需要在选票中为每个字段提供回复。
选票中的回复表示为一系列自然数,每个自然数对应于选民对相应字段的选择。结果累积到一个数组中。 数组中的每个位置对应于所有选民对该字段投出的所有选票的总和。
选票协议由一组可配置的变量定义,这些变量规定了投票的方式。 这样,该协议可以适应各种投票过程和行为。
考虑一个投票过程,选民被要求评价三位候选人:Lennon、Hendrix 和 Joplin。选民为每位候选人评出 0 到 5 星,并且每个选票都表示为一个数组,其中每个位置对应于候选人的评级。
配置:
numFields
:3maxValue
:5uniqueValues
:是选票:
[3, 2, 5]
(为 Lennon 3 星,为 Hendrix 2 星,为 Joplin 5 星)[4, 3, 2]
[2, 4, 5]
在累积投票后:
[3+4+2, 2+3+4, 5+2+5] = [9, 9, 12]
Lennon 获得 9 分,Hendrix 获得 9 分,Joplin 获得 12 分。
在选民在不同选项之间分配固定数量的信用额度(例如,选择 NGO 的资助级别)的方案中,选票允许选民分配多个点数,但对单个选项投出多个选票的成本呈平方级增长。
配置:
numFields
:4maxValueSum
:12(信用额度)costExponent
:2(二次方)选票:
[2, 2, 2, 0]
[1, 1, 3, 1]
[0, 2, 1, 2]
在累积投票后:
[2+1+0, 2+1+2, 2+3+1, 0+1+2] = [3, 5, 6, 3]
数组中的每个位置代表分配给每个 NGO 的信用额度总和。
投票过程的隐私通过使用阈值同态加密方案来确保。 具体来说,使用的是 椭圆曲线上的阈值 ElGamal 密码系统。 此密码系统提供安全且可验证的数字投票所必需的同态和阈值属性。 加密消息可以组合起来,以生成原始明文总和的加密,而无需解密它们。在投票的背景下,这允许安全地聚合选票,同时保持选民选择的私密性。
加密: 给定一条消息 m 被编码为椭圆曲线上的一个点 M ( M=mG):
对于求解离散对数问题并计算最终结果,由于消息很小,因此可以通过暴力搜索或使用 baby-step giant-step 算法来完成。
DAVINCI 采用分布式密钥生成 (DKG) 协议,该协议允许一组参与者(排序器)共同为 ElGamal 密码系统生成公钥/私钥对,而无需任何单个参与者知道完整的私钥。相反,每个参与者都持有私钥的一部分,并且只有达到阈值数量的参与者可以协作解密消息(阈值是可配置的)。这消除了对可信经销商的需求,并防止了单点故障,从而增强了安全性。
公钥计算:
参与者计算集体公钥: PK=∑i=1nCi,0
其中 s=∑i=1nai,0modq 是集体私钥(任何单个参与者都不知道)。
在民主进程中,选民能够自由地投票,而不受不当影响或胁迫的能力至关重要。维护这种自由的一个关键方面是确保无收据性,防止选民能够向第三方证明他们如何投票。DAVINCI 利用 ElGamal 密码系统和 zkSNARK 的属性来实现无收据性。
椭圆曲线上的 ElGamal 密码系统支持加法同态,允许对密文执行操作,这些操作会转换为基础明文的加法。重新加密是一个刷新密文的随机性而不更改基础明文消息的过程。这使得计算上无法将原始密文和重新加密的密文联系起来。
为了防止选民能够证明他们如何投票,DAVINCI Z 采用排序器对选票进行重新加密。当选民提交加密的选票时,排序器会重新加密它,然后再将其存储在状态 Merkle 树中。
这样,系统确保选民不能通过泄露 r 来生成其投票的收据,因为存储的密文不再对应于 r。 这可以防止第三方进行买票和胁迫。
为了进一步增强无收据性并减轻选民和排序器之间共谋的风险,DAVINCI 允许选民覆盖他们的选票。选民可以提交多个选票,每次新提交都会替换上一个选票。
当排序器收到来自已投票的选民的新选票时,它将执行以下步骤:
为了防止观察者检测到何时发生覆盖,排序器在每次状态更新期间定期重新加密状态 Merkle 树中随机选定的选票子集。此过程模糊了覆盖的发生,因为重新加密与为增强隐私而执行的标准重新随机化无法区分。
通过将随机选票重新加密,系统会增加熵,并使对手在统计上不可能确定特定选票是被覆盖还是只是被重新随机化。
DAVINCI 通过匿名化选票和选民身份来确保用户匿名性,采用密码学技术来维护隐私,即使面对未来的量子计算威胁也是如此。该系统使用 ElGamal 同态加密方案 来加密选票,从而可以在不泄露个人选择的情况下聚合选票。由于加密的选票存储在公共存储库(如以太坊 blobs)中——尽管在几周后会被删除,但可能仍然可以访问——因此至关重要的是要防止解密的选票与选民身份之间存在任何关联。通过使用秘密和密码学哈希将选民身份与其加密的选票分离,即使对手将来解密选票,他们也无法将其链接回个别选民。
身份匿名化充当双重安全因素,增强了长期隐私。虽然处理投票的排序器可以识别选民(因为选民提交资格证明和承诺),但排序器没有动力公开此信息,并且排序器无法解密选民的选票,因为他们不拥有私有解密密钥。这确保了选民的选择保持机密。
我们采用了这种部分身份匿名化,因为直接从数字签名(例如,ECDSA/EdDSA 或 RSA)使用 zkSNARK 生成完全匿名的证明,对于浏览器和智能手机等客户端设备来说,计算量很大。我们的首要任务是支持各种设备,使尽可能多的选民可以访问该系统。将来,随着密码学技术的进步和客户端设备变得更加强大,我们预计能够有效地在客户端生成此类零知识证明。除了选票之外,这将使我们能够完全匿名化客户端的身份,从而在不影响可访问性或用户体验的情况下进一步增强用户隐私。
随着量子计算技术的进步,它对支持数字系统(包括像 DAVINCI 这样的投票平台)安全的经典密码学方案提出了重大挑战。确保系统在面对量子威胁时保持安全对于其寿命和可信度至关重要。
量子计算机有可能比经典计算机更快地解决某些数学问题。值得注意的是,Shor 算法 允许量子计算机有效地分解大整数并计算离散对数,从而破坏了广泛使用的密码学方案(如 RSA、DSA、ECDSA 和 ElGamal 密码系统)的安全性。
但是,DAVINCI 的设计包含即使在面对未来的量子攻击时也能保留选民匿名性的机制:
身份和加密选票的分离: 选民的身份及其加密的选票通过无效器中的秘密分离。无效器计算如下: N=Hash(Commitment∥s)
其中 s 是只有选民知道的秘密。这意味着,即使对手使用量子计算机解密加密的选票,他们也无法在不知道密钥 s 的情况下将解密的投票链接回人口普查中的选民身份。
量子抗性哈希函数: Nullifier 和 Commitment 是使用密码学哈希函数计算的,这些函数被认为是能够抵抗量子攻击的(例如,SHA-3)。虽然 Grover 算法可以在搜索原像时提供二次加速,但使用足够长的哈希输出(例如,256 位)可以缓解此风险。
为了进一步防范量子威胁,将来可以实施以下措施:
采用后量子签名方案。用基于硬格问题的量子抗性算法(如 CRYSTALS-Dilithium、Falcon 或 Rainbow)代替 ECDSA/EdDSA。
探索基于格的同态加密方案。用量子抗性替代方案(如 Brakerski-Gentry-Vaikuntanathan (BGV) 方案或 Brakerski/Fan-Vercauteren (BFV))代替 ElGamal 密码系统。
采用量子抗性零知识证明系统,例如基于后量子假设或 zkSTARK 的 zkSNARK 构造。
我们引入 Vocdoni 代币 (VOC) 作为其去中心化投票生态系统的关键要素,在协议的可持续性中发挥着至关重要的作用。
该代币具有多种实用功能,可协调所有参与者(投票组织者、排序器和选民)的激励机制,从而确保投票系统的完整性、效率和安全性。
投票流程组织者支付 VOC 代币费用来创建和管理其投票活动。这些费用涵盖运营成本并激励排序器。
投票流程的成本因以下因素而异:
费用必须预先支付,但可以部分报销。计算报销额的公式为:
Reimbursement=TotalCost−TotalReward−BaseCost
鉴于每个投票流程都有一个符合条件的选民名单,组织者应预留等于最大选民数的空间,预计所有符合条件的选民都可能参与。但是,由于这种情况不太可能发生,因此可以报销一部分奖励池。
此公式的组成部分在以下各节中定义。
流程成本模型定义了如何计算给定流程的成本。
考虑到排序器特定的容量、流程持续时间、选民人数和安全成本,我们定义以下组成部分公式:
totalCost=baseCost+capacityCost+durationCost+securityCost
baseCost=fixedCost+maxVotes⋅p
其中:
k1⋅(totalVotingProcessestotalSequencers−usedSequencers+ϵ⋅maxVotes)a
预计会有最小和最大持续时间阈值(例如,1 小时到 1 年)。
k2⋅processDurationb
k3⋅ec⋅(numSequencerstotalSequencers)d
需要在公式中强制执行一些约束,以避免不可行的方案。
要成为排序器并获得奖励,参与者必须质押 VOC 代币作为抵押品。此抵押品在 Sequencer Registry 智能合约中的排序器注册期间被锁定,并且可以在履行排序器承诺后提取。
排序器根据以下内容获得奖励:
获得的奖励总额可以表示为:
sequencerRewardi=R⋅(votesimaxVotes)+W⋅(voteRewritesitotalRewrites)
并受以下约束:
voteRewritesivotesi≤T
totalReward=R+W
R>W
其中:
排序器的惩罚可以表示为:
SlashedAmouti=s⋅StakedCollaterali
其中:
总成本公式结合了四个主要组成部分:
所提出的公式确保:
在提出的模型中,我们可以清楚地看到两个主要参与者的目标存在冲突:
这些是自然冲突的目标,可以建模为战略游戏。但是,对协议的这种均衡进行建模不在此文档的范围内,将在单独的文章中介绍。
DAVINCI 投票流程使用四个密码电路链:一个由用户生成,三个由排序器生成。每个电路都以先前的证明为基础进行递归。通过将排序器的工作分为三个电路,我们可以实现并行处理,从而提高可扩展性,并最大限度地减少多个排序器同时生成状态转换时发生冲突的风险。此外,我们确保可以在任何设备(包括智能手机和网络浏览器)上进行投票,同时将排序器的计算要求保持在具有 64 GiB 内存的可访问的、基于 CPU 的计算机的能力范围内。
由用户在投票时生成,此电路证明加密的选票有效,并且无效器和承诺已正确生成。
断言:
由排序器生成,此电路将投票证明转换为 BLS12-377 曲线以进行本机递归,并在人口普查中验证用户的资格及其签名。
断言:
此电路将多个经过身份验证的投票累积到单个证明中。它还会验证所有累积的投票是否属于同一投票流程。
断言:
给定聚合的投票证明,此电路验证所有新投票是否正确包含到流程的状态 Merkle 树中。它生成最终状态转换证明,该证明将由以太坊智能合约验证。
断言:
作者要感谢以下审阅者和贡献者,感谢他们宝贵的反馈和支持:
- 原文链接: hackmd.io/@vocdoni/BJY8E...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!