ZK/OP Rollup的误解

我们都知道区块链慢的主要原因是所有节点都需要对交易进行全量冗余(计算和存储),随着大家对于区块链理解的加深,我们可以对整个区块链系统做一个功能上的大体划分,以前叫P2P网络和密码学层,共识层,存储层,执行层,rpc接口层,这个时候还仅仅是对区块链系统做一个架构上的划分而已,一开始想到的提高TPS方案

我们都知道区块链慢的主要原因是所有节点都需要对交易进行全量冗余(计算和存储),随着大家对于区块链理解的加深,我们可以对整个区块链系统做一个功能上的大体划分,以前叫P2P网络和密码学层,共识层,存储层,执行层,rpc接口层,这个时候还仅仅是对区块链系统做一个架构上的划分而已,一开始想到的提高TPS方案是分片,就像数据库分片一样,把不同的交易放到不同的分片中,从而提高整体区块链网络的TPS,在2019的时候,分片的概念非常火热,以太坊也朝着方法努力着,甚至分片也分成两个阶段,网络分片和存储分片。比如:quarkchain,near都是分片的代表,也是这个时期的佼佼者。

后面也许是车大难掉头(技术负担太重,利益/经济变动太大等等原因吧,我也不知道具体因为啥),以太坊的V神改变了以太坊的路线图,分片还是目标,但是是最终目标,在到达这个终局目标之前,全力推进rollup方案来提升TPS。ETH2.0的叫法也变成了共识层。

后面分片链的情况大家也都看到了,虽然quarchain和near都号称实现了分片(但是据我的调研,near的分片就是假分片,分片之间没有办法进行跨分片通信),但是币价反应了一切。

也许分片的难度实在太大吧,分片之间如果要通信的话,就引入了另一个难题:跨链。跨链本身就是一个巨大的话题,哪怕到了现在,跨链还是一样离成熟期早着呐。更不要说难度更加大的分片了。

OK,说回rollup。

rollup的思想很简单,我们知道区块链系统耗时的几个阶段有:共识,执行,验证等等几个阶段,我们如果把其中一个,或者几个阶段放到链外(或者叫做链下)去做的话,链的负担轻了,是不是整体的tps就提高了呐。

基于上面的想法,rollup就是把交易的执行放到链下去执行。具体的流程如下:

  1. 用户把tx直接发送到L2(rollup)上面,L2执行tx1,tx2.....tx-n条交易,并获取一个L2的state root。
  2. 现在的大部分rollup其实都是中心化的,我们一般称之为: sequencer。这个sequencer会压缩一下tx1...tx-n(去掉nounc,sigature等等,rollup的名字就是来自这里),得到一个batch,然后把得到的batch,L2 的State root发给L1上面的一个智能合约(ZK rollup的话,还需要添加一个zk proof,来证明sequencer按照交易老老实实的干活了,没有作恶)。
  3. L1 上的智能合约收到L2上面的batch和state root,把batch直接存储到L1的合约里面,也把收到的新的state root设置为当下最新的state root。

这里有几个容易导致误解的地方:

  1. L2的账户的真正状态是不会每次都通过rollup的方式同步到L1的。即:L1的状态其实就是一个merkle root。只是因为L1的合约里面存储了所有的Tx,如果rollup的sequencer作恶的话(或者跑路),我们可以获取这些数据(我们称之为数据可用性),然后拿着开源的L2的代码,谁都可以重新跑一遍,从而得到正确的状态。
  2. L1和L2之间账户token的转账,还是需要一个双向跨链桥的。
  3. 现在很多的rollup更多还是在做token的交易的tx。
  4. rollup之间的割裂,和公链之间的割裂一样厉害,跨链的问题一样存在。

rollup的出现,让模块化公链更加清晰,区块链开始学习微服务架构,希望用更加专业分工合作,把区块链分成DA(数据可用性)公链,共识性层公链,结算层公链。然后这些公链合作来解决TPS问题。

区块链里面充满了但是,这里也不能少,因为只要是公链,一定要有共识算法,一定要有token代币,这么多公链之间如何跨链协作,是一个天大的问题。

当下嘛,大家都是基于优先级(money)出发,都在解决token流动的问题,跨链的可组合性还是遥遥无期啊。

点赞 1
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
杜满想Elvin
杜满想Elvin
老程序员,区块链架构师