其他分享
首页 > 其他分享> > 从cannon的角度理解Layer2 - 2:cannon登场

从cannon的角度理解Layer2 - 2:cannon登场

作者:互联网

现在,让我们通过聚焦在Optimistic-Rollup的核心,也就是争议处理的部分,通过cannon项目来看看Optimistic-Rollup运行的大致过程,后面的内容会涉及繁琐的交互内容,如果你对这些细节不感兴趣,可以选择性跳过,有时抓大放小反而可能更加清晰明了

Optimistic-rollup Cannon

cannon项目是optimistic-rollup方案中OVM2.0(Optimism虚拟机)的争议处理机制,相比于OVM1.0中的争议处理机制(下简称“OVM1.0”),cannon具有以下特点,建议阅读OVM1.0的外联后,再继续阅读:

核心业务

俗话说,一图胜千言,让我们画张图,看看cannon的核心过程,请注意,下面的内容仅包含对cannon的分析,仅为Optimistic-rollup方案的争议处理机制,其他过程并没有涉及

从本质上讲,cannon的仲裁能力来源于:不同层以及不同节点之间,统一的CPU运行架构,也就是说,不管是在L1上,还是在L2上,都能以同一套CPU指令集(MIPS),在相同的内存快照中,得出严格相等运行结果,这样,就可以在受信的环境中通过重跑争议指令,从而得出受信的结果,并最终得出仲裁结论

就如图中所描述的,当L2与L1同步内存快照后,L2与L1的运行内存就完全相同了,在正常情况下,L1(受信环境)通过智能合约模拟MIPS的指令集,模拟后的内存快照,与L2提供的内存快照应该是完全一致的,如果不一致的话,就可以证明L2提供的内存快照有作弊行为,应该使用处罚机制进行处理

流程中隐藏了很多细节

当然,这里隐藏了很多运行的细节,让我们通过流程图将细节展开,看看cannon的运行过程

在开始流程之前,我们先来做一些前置说明:

现在,让我们根据图中的流程,逐步梳理一下细节部分,下述的序号与图中序号一一对应:

  1. Challenger日常会检验区块的合法性,并希望可以通过发现非法区块得到挑战收益
    1. 通过计算和对比block header hash,Challenger发现了异常区块,它会马上将区块高度(blockNumber)送入MiniGeth,MiniGeth根据区块高度与L1或L2进行交互(L1还是L2取决于业务设计),并模拟blockNumber到blockNumber+1的所有过程,注意,MiniGeth与Geth的功能是一样的,并都与主链的运算结果严格一致
    2. 就像你所知道的,所有应用的运行基础都是OS的操作码,所以,当MiniGeth在MIPS环境中,将状态从blockNumber推进到blockNumber+1后,MIPS的内存快照、操作码数量、内存快照RootHash、可能的争议步骤序号(step)等数据,就会通过回调的形式流回到Challenger中(回调方式在代发分析中会有详细介绍)
    3. Challenger将MIPS内存以及block的相关数据,打包到挑战请求中,以交易的形式调用L1的智能合约,智能合约则会在storage中生成challengerId以及相关数据结构,以支持后续的挑战过程
    1. Defender得知自己打包的blockNumber被挑战后(如何得知可以自由设计),需要到L1的智能合约中获取挑战的上下文,包括challengerId、blockNumber、step(当前争议的MIPS操作码)等
    2. Defender根据blockNumber和step,使用MiniGeth进行按步模拟,并输出step那一步执行完毕后的MIPS内存数组
    3. 将MIPS内存MPT化(内存快照),并得出RootHash
    4. 将MIPS内存快照的Root Hash提交到L1的智能合约
  2. Challenger与Defender的攻与防是来回多次的(也就是3与4过程是多次运行的),Challenger也通过与Defender相同的步骤,向L1智能合约持续提供新step的RootHash,这也是为什么cannon被称为“交互式仲裁机制”的原因,你可以想象一条由几千万个整数组成的数轴(如:[0,1,2...85619095]),其中每个整数都对应着一个MIPS操作码,而数组的顺序就是MIPS操作码运行的顺序,Challenger与Defender的攻防过程,其实,就是需要在这条数轴中寻找到那个真正有争议的操作码,也就是,该操作码在Challenger与Defender各自的MIPS中运行后,得出了不相等的结果,这个操作码被称为“确定的争议步骤”,当然,这个寻找的过程,cannon使用的二分查找的模式,具有O(logn)的性能
    1. 当“确定的争议步骤”被找出后,Challenger/Defender需要通过MiniGeth得到步骤运行前的MIPS内存快照,可以简称为“前内存快照”
    2. 通过向L1智能合约提供challengerId,以及前内存快照,Challenger发起了仲裁过程
    3. L1智能合约(受信环境)使用前内存快照,将step推进到step+1,并得到后内存快照的RootHash,这里需要注意一下,L1的智能合约是怎样知道step+1的操作码的呢?那是因为,所有数据其实都存在于前内存快照中,例如:pc地址、操作码地址等等
    4. L1的智能合约通过运算,得出了可信的step+1的RootHash,现在,只需要将这个RootHash与Challenger/Defender“攻防阶段”已经提供了的step+1的RootHash进行对比,就可以知道Defender是否有作弊行为了,并可以判断是否需要运行惩罚的过程

以上,我们通过一个实际例子梳理了cannon的运行过程,更细节的部分,之后我们会使用代码的形式进行详细了解

标签:Layer2,快照,登场,L1,Challenger,内存,cannon,MIPS
来源: https://www.cnblogs.com/chenkaihong/p/16480248.html