上一期简单介绍了一下rollup的一些基本内容以及aritrun交易的执行流程,这一期将介绍一下aritrum的核心技术 -- 交互式单步证明

这一期主要涉及到的是arbitrum的验证节点

arbitrum 架构

validator(验证节点)的功能有两个

  • 通过质押资产出L2的rblock
  • 向不合法的区块发送单步证明

一个arbitrum的验证节点可以概括为以下几个部分

  • Rpc server : 提供arbtirum rpc服务(以太坊rpc的超集)

  • Geth:执行层

  • AVM :验证层(验证过程是把evm操作码转译为avm)

Rpc模块用于接受以太坊格式的请求(用户体验上L2与L1的区别仅在与L2手续费低很多,几乎没有多于的配置)

Geth模块是L1的执行层,用于执行L1操作码

AVM模块是L2的验证层,用于验证L2操作码,并不是每一笔交易都会走到验证层,就现实而言arbitrum已经运行一年多了,还没有走到验证层的交易

当然没有走到验证层并不是说验证层没用,而是目前没有好的办法绕过验证层的验证,或者是使验证层出错(毕竟在区块链系统,出错一般是恶意的)

AVM 状态机

VM状态不外乎这几种:特殊状态Halted(暂停),特殊状态ErrorStop,或其他扩展状态。

扩展状态包含下列几种:

  • Current Codepoint,当前码点:代表当前运行所处的码点

  • Data Stack,数据栈:该栈是运算的首要工作区

  • Aux Stack,辅助栈:该栈提供了辅助的存储空间

  • Register,寄存器:一种可变的存储单元,可存储单个值

  • Static,静态:一种在VM初始化时就已经确定的不可变值

  • AVMGas Remaining,AVMGas剩余: 记载了在出现报错前可消耗多少AVMGas的一个整形

  • Error Codepoint,错误码点: Error所对应的码点

  • Pending Message,待处理消息: 记录了待处理的收件箱信息(若有的话)的元组

当VM初始化时,位于扩展状态。Data Stack, Aux Stack, Register, AVMGas Remaining, 和 Error Codepoint 会分别初始化为 None, None, None, MaxUint256, 和Codepoint (0, 0)。创建VM的实体提供Current Codepoint和Static的值。

vm的最终状态为上述状态的串联hash

AVM操作码案例

Opcode NickName 描述
0x01 add 从数据堆栈中弹出两个值(A、B)。 如果 A 和 B 都是整数,则将值 A+B(截断为 256 位)压入数据堆栈。 否则,引发错误。
0x70 send 从数据堆栈中弹出两个值(A、B)。 如果 A 和 B 都是整数,则将值 A+B(截断为 256 位)压入数据堆栈。 否则,引发错误。
0x72 inbox 如果待处理消息不是空元组,则将待处理消息推送到数据堆栈上,然后将待处理消息设置为等于空元组。 否则,将阻塞直到虚拟机的收件箱序列非空。 然后从运行时环境提供的收件箱序列中删除第一项,并将结果推送到数据堆栈上。

AV M数据结构案例

codepoint

表示当前执行的指令。arbitrum中在某个PC值下指令的码点是(opcode at PC, Hash(CodePoint at PC+1))。如果没有CodePoint at PC+1,则使用0。

Data Stack

表示存储的数据栈。当执行到某个指令码是会根据指令码的逻辑在数据栈中取出或压入指定数量的数据。数据栈也使用类似的链式结构。

注:codepoint是链式结构,执行过程不会改变,data stack满足栈的操作逻辑。

交互式证明

分割协议(简化版)

Alice为自己的主张辩护,她的主张是:从父区块的状态开始,虚拟机的状态可以前进至她所主张的区块A上的状态。本质上,她是在宣称,虚拟机可以执行N条指令,消耗M条收件箱中的信息并将哈希从H'转换为H。

Alice的第一个动作需要她把她的断言从开始(0条指令已执行)到结束(N条指令已执行)以中间点切分。协议要求Alice将其主张对半切分,发布中间点在执行了N/2步指令后的的状态。

当Alice已经有效地将她的断言二等分变为两个N/2步的断言后,Bob需要在这两个片段中选择一段并声明它是错的。

在此,我们又回到了之前的状态:Alice主张一个断言,Bob不同意。不过现在我们已经把断言长度从N缩短到了N/2。我们可以再重复之前的动作,Alice二分,Bob选择不同意的那一半,缩短尺度到N/4。我们可以继续该动作,经过对数轮的博弈,Alice和Bob的争议点就缩减为了单步操作。自此,分割协议就终止了,Alice必须给EthBridge生成一个单步证明供其检测。

A作为出快人,c作为挑战者

  • A主张L2状态机在H0状态下经历N个操作码之后到达Hn状态 (H0,Hn表示上面提到的vm的最终状态)
  • C主张H0在经历N个操作之后不会变成Hn
  • A对N步操作进行二分 表明H0在经过N/2个操作后变成H(n/2)

    注意这里暗示了H(n/2)经历剩下N/2个操作之后会变成Hn,C需要指出两段之中的一段的错误

  • C表示H0经过N/2个操作之后不会变成H(n/2)
  • A表示H0经过N/4个操作之后变成H(n/4)
  • C表示从H(N/4)经历N/4个操作之后不会变成H(n/4)

    .

    .

    .
  • 表示层Hi 经历一个操作之后不会变成H(i+1)
  • A 提交Hi状态下的世界信息(也就是上面提到的那些堆栈,codepioint的那些信息,但是不是所有的,比如Add操作码只有两个操作数,那么数据堆栈就只需要两个,由于整个堆栈是可hash,所以A无法作恶)

代码上的流程图表现为这样

单步证明

初始状态下AVM状态相同,如下:



执行一步后状态不同

验证者从链上获取对方的信息得知,对方在执行add前与本地状态相同,执行后状态不同

验证者将执行前状态,其他各个没有改变的栈的状态hash,add指令的codepoint,数据栈的 前两个元素,执行add后状态提交在链上。(执行前后的状态用于保证这一步确实是有问题的,并且暗示验证者同意执行前的状态,上传没有改变的栈是因为后面计算最终状态时要用)。

链上执行add操作后宣布验证结果

以太坊Rollup方案之 arbitrum(2)的更多相关文章

  1. 以太坊go-ethereum签名部分源码解析

    以太坊go-ethereum签名部分源码解析 golang标准库里的crypto/ecdsa椭圆曲线加密算法所提供的函数有: ecdsa.PublicKey结构体通过持有一个elliptic,Curv ...

  2. 以太坊开发DApp入门教程——区块链投票系统(一)

    概述 对初学者,首先要了解以太坊开发相关的基本概念.   学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...

  3. 以太坊挖矿源码:clique算法

    上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...

  4. Hyperledger Fabric、Corda和以太坊对比

     Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领 ...

  5. 以太坊、Hyperledger Fabric和Corda,哪个更好?

    原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ...

  6. 以太坊nonce

    以太坊系列(ETH&ETC)在发送交易有三个对应的RPC接口,分别是ethsendTransaction.ethsendRawTransaction和personal_sendTransact ...

  7. 美图DPOS以太坊教程(Docker版)

    一.前言 最近,需要接触区块链项目的主链开发,在EOS.BTC.ethereum.超级账本这几种区块链技术当中,相互对比后,最终还是以go-ethereum为解决方案. 以ethereum为基准去找解 ...

  8. 理解以太坊的Layer 2扩容解决方案:状态通道(State Channels)、Plasma 和 Truebit

    -宾夕法尼亚州的尼科尔森大桥建设照片(图源).罗马人的工程原理扩展至新的应用 对于以太坊来说,2018年是专注底层架构之年.今年很多早期参与者会测试网络极限,并且重新关注以太坊的扩容技术. 以太坊仍然 ...

  9. 以太坊和IPFS如何存储数据

    如何将JSON文件存储在IPFS上,并使用Oraclize访问智能合约中的数据呢? 以太坊是一个成熟的区块链,使开发人员能够创建智能合约,在区块链上执行的程序可以由交易触发.人们经常将区块链称为数据库 ...

  10. [中文] 以太坊(Ethereum )白皮书

    以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...

随机推荐

  1. IDL根据Landsat QA波段去云处理【代码】

    IDL根据Landsat QA波段去云处理[代码] ​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在.虽然我们常用的 ...

  2. 【Tutorial C】01 概述

    历史 History 欢迎来到C语言的世界!C语言是一种强大的专业化编程语言,深受业余和专业编程人员的欢迎. 在学习之前先让我们了解和认识它! C语言的原型是A语言(ALGOL 60语言). 1963 ...

  3. 【PC-Game】世嘉拉力:进化

    SegaRally:Revo游戏本体资源: 游侠网115盘 + 详细介绍 https://game.ali213.net/forum.php?mod=viewthread&tid=409661 ...

  4. 灵巧手 —— 智能仿生手 —— 人形机器人(humanoid)

    产品主页: https://www.brainco.cn/#/product/brain-robotics 国内销售的一款产品,美国华人生产的,灵巧度非常高的一款仿生手产品.

  5. 元学习:元学习的始祖论文——《On the Optimization of a Synaptic Learning Rule》

    ============================================= 这个论文保持着上世纪人工智能论文的特点,与其说是计算机类论文更不如说是偏生物科学方面的论文,这也可能是因为当 ...

  6. pip install --user 使用方法和注意事项——python中安装module库到用户packages路径中

    pip install --user   是python中安装module库到用户packages路径中的方法. 参考: https://blog.csdn.net/The_Time_Runner/a ...

  7. 人工智能、机器学习等科技领域论文中常见的词汇SOTA到底是什么意思,具体的用法是什么???

    如题,经常可以在文章中看到这个SOTA的词汇,也就是state of the art,这个词汇我是看着感觉十分的不懂,这个词汇有时候被用作名词有时候又被用作形容词,但是不管用作形容词还是名词大多数人的 ...

  8. mybatis-plus系统化学习之更新-AR-主键-service

    1.背景 本节要么很简单,要么不重要,知道就可以了. 2.更新 package com.ldp.demo01; import com.baomidou.mybatisplus.core.conditi ...

  9. php curl访问https 域名接口一直报错的问题

    这两天一直在对接一个https的接口 通过本地postman完美链接后再服务器一直报错 出现问题:linux 下 curl可以正常访问 但是PHP请求一直返回false 测试方法:var_dump(c ...

  10. 聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景解决方案

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群.   性能在数据分析中至关重要,它直接决定数据处理的效率与及时性,进一步对数据驱动的企业决策造成影响.   举个例 ...