Aragon最新研究:通过zk-Rollups进行安全的链下投票
本文来自Aragon,原文作者:Nate Williams & Pau Escrich,由 Odaily星球日报译者 Katie 辜编译。
本文提出了一个概念,利用zk-SNARKs来实现治理的下一个前沿方向:无gas费+经过验证+绑定的链上治理。
背景
作为领先的数字治理项目,Aragon Labs在研究和创新治理模式方面投入了大量资金。我们已经确定了各种显示出潜力的Layer 2治理解决方案,但也存在一些技术问题。 我们已经能够在我们专门的投票区块链——Vochain上实现无gas手续费的投票过程,并设计和实现了一种使用以太坊存储证明(Ethereum Storage proof)的方法,将基于ERC-20代币的统计从以太坊跨链到Vochain。不过到目前为止,将跨链结果转到以太坊的可能性一直是一个开放性的研究问题。
为此,Aragon Labs一直在进行一项新设计的实验, 该设计将允许链下投票过程的结果跨链到以太坊,而不使用主观预言或任何其它可信组件。
该提议背后的核心创新是:我们所知的任何系统都无法在链下组织投票过程,并基于该过程的结果在以太坊上棉信任地执行操作。此建议的用例可能包括基于结果执行绑定操作的所有治理流程,例如(但不限于)对资产分配或智能合约更改的DAO投票。这些治理流程目前必须在以太坊主网上进行,这会给每个投票者带来大量的gas费用。或者投票可以在链下进行,但要相信外部组件会准确、诚实地将结果转发回以太坊。
我们的提议将允许完全在链下进行的投票过程,在以太坊上以与链上治理相同的完整性执行结果,成本仅为链上治理的一小部分。
投票协议概念验证要求
在设计技术解决方案之前,我们定义了研究方案的参数:
投票协议的要求是:
- 免许可;
- 抗审查;
- 能够在以太坊上绑定结果;
- 不产生gas手续费的投票者;
- 免于代币跨链;
- 尽可能简单(没有侧链);
- 可与ERC-20 / ERC-777和NFT一起用于投票。
作为概念验证设计,我们接受以下限制:
- 没有用户匿名:投票可以绑定到一个以太坊地址;
- 并非没有收据:购买选票是可能的;
- 不是为处理全国范围的选举而设计的:只针对DAO或ERC-20 / NFT持有者。因此,应该设置最大普查规模(取决于性能和成本);
- 对中继者(relayers)没有明确的激励模式。
理想的提案
根据该提案的设计,当创建一个新的投票过程时,组织者向以太坊提交一个交易,指定ERC-20代币的合约地址,用于投票者普查。此地址的存储根哈希(Storage Root Hash)在指定的区块高度上成为此进程的普查根(census root)。任何持有给定代币的人都可以通过提供代币余额的Merkle Proof 证明(通过EIP-1186)来证明他们的资格。然后,他们可以通过将证明和签名发送到zk-SNARK汇总中继者进行投票,后者将计算最终结果的证明。
存在的潜在的问题是,理论上计算结果的zk-SNARK证明(协调者)的参与者可以通过决定排除投票来审查结果。我们通过允许任何人(不仅仅是协调者)提交新的投票来解决这个问题:如果他们检测到协调者没有将其包含在内,任何用户都可以生成并提交包含他们投票的汇总。
我们的提案将运用zk-SNARKS于以下目的:
- 验证一个地址之前没有通过默克尔树(Merkle Tree)累加器投票;
- 通过存储证明验证用户拥有代币;
- 计算一批选票的部分结果;
- 验证选票签名。
根据上述模式,我们可以发现两个主要问题:
问题1:ERC20存储证明验证对SNARK不友好
ERC-20存储证明在SNARK中验证是非常复杂的。这部分是由于它们使用了递归长度前缀(Recursive Length Prefix, RLP)解析和多个Kecmack -256哈希验证,这两种方法在最先进的SNARK汇总技术中计算效率都很低。这个问题很难解决,所以目前我们使用optimistic验证来解决这个问题。
问题2:ECDSA / Secp256k1签名验证对SNARK不友好
我们可以用来验证用户签名的一种当前加密标准是ECDSA,该标准使用来自以太坊签名的BabyJubJub密钥,使用该签名作为原始私钥,允许用户恢复其地址。由于此方法依赖于用户签名,因此很容易受到恶意代理的攻击,这些代理会欺骗用户在他们的Web3钱包中对欺诈性交易进行签名。此漏洞存在于浏览器钱包用于签署交易的任何地方。一个潜在的解决方案可能是使用web地址作为派生路径来派生私钥。
另一个挑战是证明每个代币所有者的以太坊地址批准了BabyJubJub公钥,以便在投票过程创建的区块高度进行投票。我们通过一个“单例”智能合约来实现这一点,该合约将以太坊地址映射到BabyJubJub公钥,用户必须通过标准交易将他们的密钥添加到智能合约中。地址到密钥的映射可以通过optimistic的存储欺诈证明来实现。因为预计这些授权密钥将在不同的投票过程中使用多次,此解决方案还通过可重用设计解决数据可用性问题。
总之,我们可以在SNARK中处理大多数验证,但不包括:
- 确认一个地址之前没有通过默克尔树(Merkle tree)累加器→SNARK进行投票;
- 通过存储证明(Storage proof)→Optimistic验证用户是否有代币;
- 计算部分投票结果→SNARK;
- 验证投票签名→SNARK。
用户
- 创建一个源自以太坊签名的BabyJubJub密钥,并将其注册到投票者注册处(Voter Registry)智能合约。
- 检索其账户的投票信息和存储证明,在投票包上生成签名,并将其转发给一个或一组中继者(relayers)。
投票智能合约
注册投票进程,包括:ERC-20智能合约地址,ERC-20地址的槽位索引→平衡映射,投票进程启动块的状态根哈希,计算计票的进程参数。
通过zk-Rollup监听新投票的注册,SNARK将证明:
- 结果计算;
- 投票签名是由BabyJubJub密钥决定的;
- 保持投票累加器更新;
- 保持投票者名单的更新。
允许任何人质疑上次投票登记舞弊的证据。但必须具备以下条件之一:
- 存储证明,证明投票人的以太坊地址没有代币;
- 存储证明,证明投票人的以太坊地址没有链接到一个BabyJubJub密钥;
- 证明BabyJubJub密钥已经投票(该密钥在“已投票”的默克尔树中)。
中继者(Relayer)
- 阶段0:在以太坊上创建选举进程,并从可用中继器列表中选择一个中继器。选举组织者需要支付选举费用(奖励给协调者)。组织者提供EVM字节码,这些字节码需要在DAO智能合约的选举之后执行,具体取决于结果。
- 阶段1:投票开始。任何人都可以向所选的协调器发送投票包(可以使用HTTPs或libp2p传输)。协调器将选中的结果分批卷起来,构建一个zk-SNARK证明,将这个证明和结果上传到以太坊,收集用户投出的选票,验证它们,并将它们广播给其它中继者。
- 阶段2:检测未加入投票的协调者可以卷起自己的投票,并向投票智能合约发送zk-SNARK有效性证明。此外,如果他们检测到投票添加错误,他们可以发送欺诈证明,以证明之前添加的结果是无效的,产生该结果的协调者将被削减。
- 阶段3:当达到投票日期限制时:
上传的结果(由协调者和任何第三方)的总和被认为是有效的,奖励将在协调者和包含更多投票(如果有的话)的参与者之间分配。
任何人(通常是协调者)调用EVM字节码执行,使用最终结果作为输入。
线路和合约
zk-SNARK将汇总投票名单。zk-SNARK证明是基于给定的投票列表、普查根、选举标识符(electionId)和聚合结果而有效的。
zk-SNARK的输入:
- 哈希输入是为了减少SNARK验证的gas成本;
- 私人的选举标识符;
- 计算的投票结果;
- 当前的空符根(nullifiers root );
- 更新了的空符根;
- 批量中的投票数;
- 投票值和对应的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交叉rollup/链存储证明验证的黄金标准。
TOKEN2049 Dubai to Unleash Biggest Crypto Conference of the Year
TOKEN2049 Dubai gathers over 15,000 global attendees and top crypto leaders for the year’s largest e...
Why Alpaca Finance (ALPACA) Price is Up Today?
The post Why Alpaca Finance (ALPACA) Price is Up Today? appeared first on Coinpedia Fintech NewsWhi...
Roswell Becomes First U.S. City to Hold Bitcoin as a Reserve Asset
The post Roswell Becomes First U.S. City to Hold Bitcoin as a Reserve Asset appeared first on Coinpe...