更新时间:2021-10-17 18:18:01点击:155
这篇文章是由Aragon、原文作者: Nate Williams Pau Escrich、Odaily星球日报译者Katie辜编译的。
本文提出了利用zk-SNARKs实现治理下一个前沿方向的概念:免gas资费经验证后连接起来的链上治理。
因此,Aragon Labs继续进行新设计的实验,以使链投票过程的结果能够交叉链入以太网,而无需使用主观预言和其他可信组件。
这个提案背后的中心创新是,我们知道的任何系统都无法在链条下组织投票过程,而是棉根据该过程的结果在以太网上可靠地执行操作。 此建议的用例可能包括根据结果执行绑定操作的所有治理过程。 例如,对资产分配或智能合约更改进行DAO投票,但不限于此。 这些治理过程现在必须在以太网主网络上进行,每个投票者都要花很多gas费用。 或者投票可以在链条下进行,但请相信外部组件会准确诚实地将结果转发给以太坊。
我们的提案允许完全在链条下进行的投票过程,并在以太坊上以与链条上治理相同的完整性执行结果。 成本只是链条上治理的一小部分。
在设计
投票的要求是:
免除许可; 对检查的抵抗; 可以将结果绑定到以太网上; 免除不产生gas手续费的投票者令牌的交叉链; 尽可能简单(没有侧链); 可与ERC-20/ERC-777和NFT一起用于投票。 作为概念验证设计,接受以下限制:
没有用户匿名性:投票可以绑定到以太坊的地址。并不是没有收据。 购买选票是可能的,不是为了处理全国范围的选举而设计的。 仅适用于DAO或ERC-20/NFT持有者。 因此,必须设定最大的人口普查规模(取决于性能和成本)。 对中转者(relayers )没有明确的激励模型。
潜在的问题是,理论上计算结果的zk-SNARK证明,“协调员”的参加者可以通过决定排除投票来审查结果。 除了协调员之外,任何人都可以提交新的投票,从而解决这个问题。 如果检测到不包括协调员,任何人都可以生成并提交包含自己投票的摘要。
我们的提案是利用zk-SNARKS以以下目的进行的。
验证选票上的签名,该签名用于存储在验证单个地址之前未在“默克尔树”累加器中投票的证书,并计算选票上用于验证用户是否拥有令牌的部分结果。
根据上述模型,有两个主要问题。
目前可用于验证
另一个挑战是,证明每个令牌的所有者的以太网地址可以批准BabyJubJub公钥,并以投票过程中创建的块的高度进行投票。 要实现这一点,请使用“单实例”智能合约。 该合同将从太郎的地址映射到BabyJubJub公钥,用户必须通过标准交易向智能合约添加密钥。 地址到密钥的映射可以通过optimistic的存储欺诈证书实现。 由于这些许可证密钥预计将在不同的投票过程中多次使用,因此该解决方案还通过可重复使用的设计解决了数据可用性问题。
总之,SNARK可以处理大部分验证,但不包括以下内容:
在确认一个地址之前,使用默克尔树(Merkletree )累加器SNARK保存未投票的证书(Storage proof )Optimistic验证用户是否有令牌计算部分投票结果 验证投票签名SNARK。
通过zk-Rollup拦截新投票的注册,SNARK将证明:
计算结果; 投票签名由BabyJubJub密钥决定。维持投票累加器的更新。维持投票者名单的更新。 允许任何人怀疑上次投票登记作弊的证据。 但是,需要以下条件之一:
证明存储证书BabyJubJub密钥已被投票,该密钥用于证明投票者的以太坊地址未链接到BabyJubJub密钥,该证书用于保存证明投票者的以太坊地址没有令牌的证书。 这个钥匙在“被投票的”默克尔的树上。
zk-SNARK的输入:
哈希输入是为了削减SNARK认证的gas成本; 计算私人选举标识符投票结果的当前空符路线; 更新的空符根; 批次内的投票数; 投票值和对应的BabyJubJub密钥的签名。 用于上传用于调整此结果的智能合约功能调用的输入如下。
选举标识符; 更新了此批中投票者的公钥列表空符号根; 计算这些投票结果的SNARK证明了。 为了检查
测试产生了以下gas成本:
用户注册表导入: 258536注册: 68956投票导入: 6673,159新投票: 25989累计统计: 291801非法证书1:574574 (未注册BabyJubJub密钥)非法证书2:908822 (账户ERC-20)
在SNARKs中验证标准kecak/ECDSA/Sec256k1签名。 相信很快,PLOOKUP就能验证这些方案。 这带来了两种可能性。babyjubjub密钥证明是从Secp256k1密钥派生出来的。 验证投票本身。 在SNARK内部验证存储证书。 这样复杂的线路,成本可能很高,但我相信可以通过zkVM轻松整合。 由于担心以太网客户端退出归档节点,会优先考虑更高的gas费用限制,因此另一个研究领域是尝试用EIP1186以外的方法进行存储证明。 为了计算计数,嵌入了几个操作码并通过zkVM执行,使得通用可编程投票线路可以运用。 在浏览器中生成投票证书,进行批处理混合,然后递归聚合结果。 类似于zk.money协议。 这将提高投票过程的隐私。 即使SNARKs的计算成本很高,也可以在浏览器级别分散计算。 这消除了对可见服务器的依赖,完全实现了P2P,并将所有权限授予投票者。 在网络级投票协议中嵌入隐私和混合。 我们找到了与以太坊2.0完全互通的合理的加密经济学模型。 可以生成唯一的证书并轻松进行验证。 这开辟了可编程L1和L2对以太坊的投票结果做出反应的可能性,无论它们是否为以太坊虚拟机——EVM。 长远的目标是在任何链条上投票,并在其他链条上验证结果。 这可能会成为通过SNARKs交叉滚动/链存储证明验证的黄金标准。