通过 zk-SNARK 与 Optimistic Rollup 技术的结合,Zkopru 可实现 ETH、ERC20s 和 ERC721s 多种以太坊代币的快速、廉价和隐私的交易,并实现即时取款和隐私原子互换等功能。
撰文:殷耀平 以太坊Layer2隐私扩容新方案Zkopru问世 7月20日,Ethereum9?创始人WanseobLim在太坊技术论坛ethresear.ch上发布了一份新的以太坊扩容方案「Zkopru」的技术实现说明。 Ethereum9?是一种概念证明系统,使用Mimblewimble以及零知识证明等隐私技术来隐藏以太坊代币交易。 据WanseobLim介绍,这是一个结合了zk-SNARK和OptimisticRollup来实现隐私交易的Layer2扩容解决方案,该方案支持在二层网络中以低成本实现ETH,ERC20,ERC721之间的隐私转移和隐私原子交换,并实现了诸多其他亮点功能。 WanseobLim称,该方案是由他和化名为「barryWhiteHat」的以太坊开发者共同完成,他们从2019年11月开始构建此方案,目前Zkopru已发布测试网(ArticRoll),代码已在github开源。 「barryWhiteHat」是以太坊社区最活跃的开发者和研究者之一,ZKRollup的扩容方案正是由barryWhiteHat在2018年下半年最先提出。 链闻查询该项目路线图发现,Zkopru计划分为Arcticroll(testnet)、Burrito(testnet+mainnet)、Grilledburrito(testnet+mainnet)、Californiaroll(mainnet)、Dragonroll(mainnet)五个阶段进行迭代,github上的开发进度显示,目前第一阶段(ArticRoll)的开发工作已完成大部分。 Zkopru方案一经推出,便吸引了众多以太坊开发者的关注,*以太坊创始人*VitalikButerin第一时间表达了对该项目问世的祝贺,认为是一项「很棒」的工作,并在推特上转发了该项目的介绍文章。 下面我们一起了解一下Zkopru扩容方案的主要思路和设计亮点。 什么是Zkopru? Zkopru的全称是zk-Optimistic-Rollup,是一个基于zk-SNARK和OptimisticRollup的以太坊二层隐私扩容解决方案。可支持第二层网络中ETH、ERC20、ERC721各类代币之间的隐私转账和隐私原子交换,并且费用很低。 「Zkopru」方案使用OptimisticRollup来管理区块,使用zk-SNARK来构建隐私交易。 了解过以太坊Layer2扩容现状的都知道,目前最当红的扩容主力便是基于Rollup技术系列扩容方案,最主流的是两个分支ZKRollup和OptimisticRollup。 简单理解,「ZKRollup」方案是利用Rollup技术进行交易压缩,并利用zk-SNARK(零知识证明)技术实现交易打包和验证,以实现在减少交易成本的同时确保安全性。 「OptimisticRollup」方案吸收了ZKRollup方案对于数据可用性的优势,但去除了零知识证明部分,而是沿用了Plasma的欺诈证明机制。所以在该方案中,不像ZKRollup方案通过SNARK处理后再将数据聚合到链上,而是默认「乐观(Optimistic)」相信节点会将最新且准确的数据发布到链上,否则当「验证者」发现有问题时,节点会受到相应惩罚。 了解更多关于Rollup的知识可以参考链闻文章「以太坊扩容最热门主力方案Rollup学习指南」。 而最新问世的「Zkopru」方案则是对zk-SNARK和OptimisticRollup的结合,相当于是在OptimisticRollup方案中,又加入了零知识证明的技术部分。 Zkopru扩容方案有何特点? 据WanseobLim介绍,Zkopru方案能将每笔zk交易的gas费控制在可承受范围,并实现交易性能提升,使得: 以太坊隐私交易平均成本为每笔交易8000gas。 理论上最大TPS为105(当gas上限为11950000,出块时间为13.2秒时)此外,Zkopru中,交易数据消耗大约534字节,由于证明数据(proofdata)有256字节,未来如果使用证明聚合(proofaggregation),还可以将交易成本降低50%左右。 此外,Zkopru方案还能实现以下功能。
Zkopru方案实现:如何证明交易真实性? 我们可以简单了解一下Zkopru方案是如何利用zk-SNARK技术完成交易验证的。 Zkopru方案认为,由于每个零知识证明事务(zk-transaction)都会接受若干个UTXOs(UnspentTransactionOutputs,未花费交易)作为其输入(inflow),并为其输出(outflow)创建新的UTXO。因此,最重要的,就是验证输入和输出(inflow和outflow),从而完成对交易真实性的验证。 首先是输入验证(InflowValidation) Zkopru使用Commitment-nullifier(Zcash使用的隐私交易方案)来实现隐私保护。在该方案中,每个zk事务会使用UTXO,但不会显示使用了哪个note,虽然会展示从UTXO派生出来的nullifier(清零器),但仅仅看到nullifier不可能与原始的UTXO建立起联系,从而可以实现隐私保护。
要花费UTXOs时,必须满足以下条件(就是完成一系列验证): UTXO成员证明(UTXOmembershipproof):交易构建器(txBuilder)提交每个UTXO的Merkle证明来证明其存在。为实现有效的SNARK计算,UTXO树使用Poseidon作为其哈希函数。 所有权证明(Ownershipproof):只有所有者才能花费UTXO,每个note都会有一个公钥字段,所有者通过使用配对的私钥创建EdDSA签名来证明其所有权。 承诺证明(Commitmentproof):整个环路(circuit)需获取有关UTXOs输入的详细信息,从而计算输入量的总和。因此,所有者应该提供详细信息,其Poseidon哈希值应该等于Merkle证明和所有权证明的叶节点哈希值(leafhash)。 无效证明(Nullifierproof):给定的nullifiers应该从UTXOs输入中正确派生。 其次是输出验证(OutflowValidation) 每个zk事务可创建三种类型的输出:UTXO、取款(Withdrawal)和转移(Migration)。 如果zk事务创建UTXO输出,Zkopru会追加到UTXO树中。如果zk事务创建取款(Withdrawal)输出,Zkopru会追加到Withdrawal树中。最后,批量转移(massmigration)(Layer2区块链的一部分)是由区块中的每个zk事务的转移输出所组成。 因此,UTXO的输出应满足以下条件: 当输出是UTXO类型时,输出的公共哈希值必须与SNARK环路中计算所得值相等。 零和证明(Zero-sumproof) 最后,zk事务应该保证输入等于输出,包括费用在内。 Zkopru功能实现:原子交换Atomicswap功能 目前,Zkopru在以一种很简单的方式支持原子交换(Atomicswap)。 如果A和B想交换他们的资产,他们会为彼此创建notes,并在交易数据中公开所需的note。然后,协调器(coordinator)应该配对相反的事务(oppositetransaction),或者被惩罚。
Zkopru功能实现:即时取款(Instantwithdrawal)功能 Zkopru中,取款人可以请求即时取款,取款人可以为每个取款note设置一定的取款费用,然后,任何人都可以提前支付这笔尚未最终完成(unfinalized)的取款并获得该取款费用。 具体而言,为请求即时取款,所有者需要为她的note生成一个ECDSA签名并进行广播。任何有足够资产支付的人都可以使用该签名提前支付这笔取款。一旦Zkopru成功打包了该交易,智能合约会将该取款note的所有权转移给预付款人。最后,预付款人可以在区块完成最终确定(finalization)后取款。 通过该功能,Zkopru团队认为,可以为即时取款建立一个去中心化的公开市场。 Zkopru方案的Merkle树结构 Zkopru的当前版本中,UTXO树和withdrawal树的最长深度将为31,Zkopru团队表示下个版本(即Burrito版本)中最长深度将变为64,并且只有一个UTXO树和一个withdrawal树。 Zkopru方案由UTXO树,nullifier树和withdrawal树所组成。 UTXO树会追加(append)包含UTXOs的Merkle树,用户可以通过提交Merkle证明将UTXOs用作事务的输入,并将事务的输出结果追加至最新的UTXO树中。 同样,如果zk事务创建了withdrawal输出,Zkopru会将其追加到最新的withdrawaltree树中。一旦树根被标记为终结(finalized),所有者就可以来提取资产(给出所有权证明)。 最后,通过commitment-nullifier隐私交易方案,已使用过的UTXO的nullifier会在nullifier树中被标记为「已使用」。 用过的UTXO的清零器被标记为在nullifier树中使用,nullifier树是唯一的稀疏Merkle树。如果有事务试图使用一个已被使用的nullifier,该事务会自动失效,并且区块提议者会被质询系统惩罚。 Zkopru方案中Merkle树的详细规格。 UTXO树(UTXOTrees) 单个UTXO树是用于成员证明(membershipproof)的稀疏Merkle树,它使用Poseidon哈希(SNARK中最便宜的哈希函数之一)生成zkSNARK证明来隐藏花费哈希及其路径。 为了更新UTXO树,协调器(coordinator)需执行以下步骤。
假设UTXO树完被全填满了(包含了2^31项),系统会将填满的树归档并开始一个新树,已存档的树也可以作为交易的包含证明被引用。 Zkopru会乐观地更新树根,且只在发现挑战(问题)时进行验证。Zkopru会使用Subtreerollup(子树汇总)的方法生成链上欺诈证明。Subtreerollup会追加固定大小的subtree,而非逐个追加交易项。与单纯的Rollup相比,SubtreeRollup显著降低了大约20倍的gas成本。 Nullifier树 每个转账(transfer)、取款(withdrawal)和转移(migration)事务都通过包含证明(inclusionproofs)来花费UTXOs,并标记在nullifiers树上。所以nullifiers树是一个非常大的稀疏Merkle树,要记录稀疏Merkle树(254深度)中每个已花费的UTXO。因此,Zkopru使用keccak256(最便宜的哈希函数)作为nullifier树的哈希函数。 为了更新nulleizer树,协调器(coordinator)需执行以下步骤。
就像UTXO树一样,Zkopru会乐观地更新nullifier树的根。若有任何问题,可以通过在链上生成欺诈证明来证明一个nullifier使用了不止一次。 Withdrawal树 Withdrawal树和UTXO树的唯一区别是,提取树使用keccak256作为哈希函数。原因是Zkopru在智能合约中需要withdrawal树的Merkle证明,但在SNARK环路中又需要UTXO树的Merkle证明。 要更新Withdrawal树,协调器需执行以下步骤。
Zkopru方案实现:Zkopru中的区块结构(Blockstructure) 区块头(Header) 前372个字节的数据是区块头(blockheader),区块头包含以下数据: 区块主体(Body) 区块主体包括交易(transactions)、批量存款(massdeposits)和批量转移(massmigrations)。此外,区块头应该包含来自区块主体的正确信息。如果区块头没有包含正确的值,提案人会被质询系统(thechallengesystem)所惩罚。 交易(Transactions) 批量存款(Massdeposits) 批量转移(Massmigrations) Account(帐户) Zkopru计划创建一种新的公钥结构(publickeystructure)。 每个Zkopru帐户将同时管理Layer1和Layer2的密钥对(keypairs)。 首先,该帐户会有一个随机生成私钥的以太坊帐户,用于与Layer1交互。其次,Zkopru钱包会根据该以太坊账户的私钥创建一个Babyjubjub私钥和公钥集,用于Layer2的EdDSA签名和加密memo字段。 UTXO Zkopru还将提出一种新的UTXO标准。 然后Zkopru再用Poseidon哈希计算叶节点哈希(leafhash)。 本文来源:链闻独家 —- 编译者/作者:链闻独家 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
以太坊扩容赛道又出新方案 Zkopru:zk-SNARK 与 Optimistic Rollup 的结合将如何实现隐
2020-07-21 链闻独家 来源:火星财经
LOADING...
相关阅读:
- 币岛上的IOST帮助扩大抵押资产篮子2020-08-02
- 于集鑫:8月1日BTC/ETH晚间分析及操作策略2020-08-02
- 陈楚初:日内比特币以太坊再创新高后续多单思路保持不变2020-08-02
- 于嘉硕:8.1比特币以太坊还会涨吗?晚间怎么操作2020-08-02
- 比特币上涨突破17000刀时计算接下来的行情里面主涨趋势还有几波?2020-08-02