Zkopru是一种基于零知识证明的隐私保护技术,用于在以太坊网络上进行的私密交易,它采用了批量验证的方式,可以将多个交易合并为一个,并通过一次性证明验证其正确性,提高了交易的效率和隐私性,与传统的链下扩展方案不同,Zkopru在以太坊主链上进行交易,并通过zk-SNARKs算法保护交易隐私,通过使用零知识证明,Zkopru能够隐藏交易的数量、发送者和接收者,确保交易的匿名性和不可追踪性,Zkopru是一种创新的隐私保护技术,为以太坊网络上的私密交易提供了可行的解决方案,下面看下详细内容。
Zkopru全面介绍
Zkopru是什么?Zkopru这个名称是由zk-transaction + Optimistic Roll-Up的字首组成,这个layer 2的协议包含了使用零知识证明来保护交易的隐私(zk-transaction)、再搭配Optimistic Rollup来管理layer 2。
Zkopru和Zk Rollup有什么不同?
Zk Rollup连同layer 2的链的state transition都是由零知识证明来处理,但缺点是目前零知识证明技术的成本较高,包含在链下产生证明和在链上验证证明(链下产生证明耗费时间,链上验证证明则耗费gas)。
注:接下来提到的(零知识证明、circuit)的链下成本都是指时间多寡,而链上成本则都是指gas多寡)
另外目前的Rollup协议都是使用merkle tree来储存当前的链的状态(例如使用者的余额、nonce或是UTXO) —如果使用者要证明他有$20,则他必须要提供merkle proof ,而这个merkle proof的大小及hash次数也会因为选择的merkle tree的高度而有不同。
而这个因素再搭配上hash的成本在EVM和circuit会有不同,导致协议如果使用在EVM成本较便宜的hash function,则circuit的hash成本会较高;反之亦然。
目前还没有安全的hash function是在EVM或circuit里都是便宜的,所以协议设计者必须做出妥协。可想而知,Zk Rollup便是使用在circuit便宜但是在EVM贵的hash function,这导致当使用者要离开layer 2回到layer 1时(这个步骤在这里称作withdraw),他成本会很高(因为要在EVM里验证他持有资产的拥有权,这可以是一个merkle proof或zk proof)。
Zkopru和Optimistic Rollup有什么不同?
而这个成本相对的也反映了采用Optimistic Rollup的好处—只有在特殊情况下(例如协议里的Operator作恶)才需要付出较高的成本,其他时间大家则享受极低成本的使用费。
但使用Optimistic的方式也有附带的缺点:challenge period。轻节点使用者需要等待challenge period来确保交易不会被推翻、withdraw过程需要等待challenge period(以下称withdraw period)过了才能将钱提回到layer 1。
所以使用哪种Rollup就要看协议设计者如何依照他们的使用需求去权衡。
那为什么不使用Optimistic Rollup就好?
因为需要零知识证明来保护交易隐私!
前提
zkopru使用和Bitcoin相同的UTXO model
transfer的付款方、收款方和金额都是被保护住、看不到的,但zkopru和其他隐私币一样,不需要付款方和收款方合作即可由付款方单独完成transfer。
但也和隐私币一样,收款方必须去监看链上每一笔交易并尝试解密来得知是否有人transfer给自己
基本使用流程
Deposit
使用者将ether、ERC20或ERC721代币转入zkopru位于layer 1的合约,触发event。协议的Operator会监看合约并搜集deposit event,然后将这些deposit一起放入下一个(zkopru的)区块里。
Transfer
如同Bitcoin的UTXO,zkopru里使用者必须要证明其对某UTXO有拥有权才能花费该UTXO。要被花费的UTXO会被放到transaction格式里的inputs栏位, outputs栏位的UTXO则是填入收款方的公钥和收款金额(outputs的UTXO就会是新产生的UTXO)。
因为要保护交易的隐私,新的UTXO的资讯是不会泄露出去的,第三方只会看到该UTXO的hash值。那收款方要怎么知道一个UTXO是不是他的呢?
sender会利用自己的私钥、收款方的公钥及一个随机值,透过密钥交换协议来产生一个临时的共享密钥。付款方用此共享密钥加密收款方所需的资讯(包含transfer的代币种类和金额),而收款方会监看每一笔交易并试着用自己的私钥组出一个共享密钥然后去解密,如果解密完的资料不是乱码而是合理的,则可确认收到钱。
Withdraw
使用者产生withdraw类别的交易,等待协议Operator收进区块里,然后再等待withdraw period过去,即可送出merkle proof来将钱提领回layer 1。
注:提领回layer 1之后的收款方和金额都是公开透明的,隐私不再受保护。
零知识证明
zkopru里一共有三种类型的merkle tree来储存所需的状态,分别是UTXO tree、Nullifier tree以及Withdrawal tree。
- UTXO tree纪录所有产生过的UTXO,包含新的和已经花掉的。
- Nullifier tree纪录被花掉的UTXO的nullifier值。一个UTXO的nullifier由该UTXO的相关资讯算出,而且只能得出唯一一个nullifier。这个nullifier能够证明该UTXO已被花掉,但同时又不会泄露是哪个UTXO被花掉。听起来很饶口,但这就是零知识证明的能力。
- Withdrawal tree纪录withdraw类别的交易的资讯,使用者要提领回layer 1就需要这棵merkle tree的merkle proof。也是就说,前面说的Operator会把withdraw交易放到这棵merkle tree里,然后等待withdrawal period过后,再由使用者提供merkle proof来领走。
这里以transfer为例来说明其中一部分的circuit在做什么事
当使用者要产生一笔transfer,他首先要证明inputs里的UTXO都是合法的,这包含了证明:
- 他拥有这个UTXO—藉由提供签章来证明
- 这个UTXO是真的存在的—藉由证明该UTXO的hash值存在UTXO tree里
- 这个UTXO没有被花过—藉由证明该UTXO的nullifier值不存在Nullifier tree里
接者是outputs,新产生的UTXO的hash值会被放进UTXO tree里。
最后是比对inputs金额加总等于outputs金额加总再加上交易手续费。
而这些都在circuit里完成,第三方没办法得知实际的inputs、outputs或nullifiers等等,第三方只能知道新的UTXO的hash值以及运算过程是正确的—也就是这些tree都被正确的更新了。
其他特色
Mass migration
原本每个使用者要把资产换到另外一个layer 2协议,他必须申请withdraw、等待withdraw period,然后把资产deposit到另外一个layer 2协议。
zkopru支持使用者成批的搬移资产到另外一个layer 2协议—共享经济。
Instant withdrawal
如果其他需要等待withdraw period的应用来说,withdraw period是一个UX痛点。zkopru的instant withdrawal提供急着withdraw的一方和不急着withdraw的一方一个管道能互惠。
急的一方提供一点手续费,对自己的withdraw交易做签名并广播出去。不急的一方在听到这个签名后,可以将这个签名送到zkopru合约并附上withdraw金额(扣掉自己该收的手续费)。
这笔钱会直接转给急的一方,然后急的一方的withdraw拥有权便会转移到不急的一方手上,不急的一方再慢慢等到withdraw period过了再提领。
估计效能
目前在初版的效能估计中,一笔transfer平均耗费8800 gas;而TPS则是105。zkopru还在积极更新迭代中,所以这个效能会在提升。
以上就是什么是Zkopru?Zkopru是什么意思?的详细内容,更多关于Zkopru的资料请关注码农之家其它相关文章!