zoukankan      html  css  js  c++  java
  • zkRollup原理(转载)

    zkRollup就是基于零知识证明的二层扩容方案(layer2), zkRollup方案起源于18年下半年,由Barry Whitehat和Vitalik先后提出。Rollup顾名思义有“卷起”和“汇总”的意思,将大量的交易“卷起/汇总”打包成一个交易,zkRollup的原理一句话就可以讲清楚:链下进行复杂的计算和证明的生成,链上进行证明的校验并存储部分数据保证数据可用性。zkRollup数据可用性可以让任何人都能根据链上存储的交易数据,还原出账户的全局状态,从而消除由于数据可用性带来的安全风险(这里的数据可用性对比Plasma,Plasma之所以不能称为主流的扩容方案,在于Plasma的数据并没有提交到链上,所以在Plasma上退出一笔资产的周期会长达一周左右(争议期),如果在争议期间没有人提交欺诈证明,那么资产才可以安全退出到主链)

    zkRollup在链下利用Merkle tree存储账户状态,由Operator收集用户的交易,交易收集完成后Operator会执行每个交易(校验余额,校验nonce,校验签名,执行状态转换),当交易执行完成后会产生一个新的Merkle tree Root,为了证明链下状态转移是正确的,Operator会在交易执行完成后生成一个零知识证明的proof。下图表示Operator工作过程,黄色的表示用户发送的交易,绿色的表示Operator中维护的merkle tree,Operator执行交易后本地的merkle tree root会由prev state root转换成post state root,图中蓝色的表示Operator生成证明账户状态转移有效的零知识证明。

    Operator把prev state root,post state root,交易数据和proof证明提交至链上合约,合约校验proof通过后会将来新的状态写入到链上,合约不需要单独校验每笔交易的合法性,只需要校验proof是否有效,降低了链上gas消耗,其中交易数据是存储在较便宜的位置CALLDATA上。链下每一次的状态转变都需要提供零知识证明,由主链上的合约进行验证,只有验证通过才能更改状态。即每一次状态转变都严格依赖密码学证明。

    zkRollup生成的证明大小(很小),验证时间(很快基本上是常数),不会随着交易数量的增长而变大,所以zkRollup可以极大地提高TPS。影响zkRollup链上性能的只有链上CALLDATA存储数据的成本,随着以太坊Istanbul升级,CALLDATA使用成本降为原来的1/4,zkRollup的性能则获得4倍提升,TPS可达到近2000左右。

    上链的数据中prve state root,post state root与proof基本上是不会随着交易增长变化的,只有上图中黄色交易部分会随着交易增长变大,所以为了能在一个区块链中容纳更多的交易,需要对上链的交易进行压缩。zkRollup使用merkle tree来记录地址,这样地址就可以表示成merkle tree的索引值,地址数据的大小就从原本的20 bytes减少到3 bytes,在以太坊上金额用32个字节256位的大整型来表示,这里压缩到6个字节,货币最小单位从wei变成Mwei=10^6 wei,手续费压缩到1个字节,nonce压缩到2个字节,nonce的范围0~65535,也就是说一个账户最多可以发送65535笔交易,交易的签名直接删除了,不出现交易中,因为每笔交易的合法性在链下都通过零知识证明约束校验过了。

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/timlong/p/15784526.html
Copyright © 2011-2022 走看看