以太坊Rollup方案之 arbitrum(2)
上一期简单介绍了一下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)的更多相关文章
- 以太坊go-ethereum签名部分源码解析
以太坊go-ethereum签名部分源码解析 golang标准库里的crypto/ecdsa椭圆曲线加密算法所提供的函数有: ecdsa.PublicKey结构体通过持有一个elliptic,Curv ...
- 以太坊开发DApp入门教程——区块链投票系统(一)
概述 对初学者,首先要了解以太坊开发相关的基本概念. 学习以太坊开发的一般前序知识要求,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ruby,Java... 前 ...
- 以太坊挖矿源码:clique算法
上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...
- Hyperledger Fabric、Corda和以太坊对比
Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领 ...
- 以太坊、Hyperledger Fabric和Corda,哪个更好?
原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ...
- 以太坊nonce
以太坊系列(ETH&ETC)在发送交易有三个对应的RPC接口,分别是ethsendTransaction.ethsendRawTransaction和personal_sendTransact ...
- 美图DPOS以太坊教程(Docker版)
一.前言 最近,需要接触区块链项目的主链开发,在EOS.BTC.ethereum.超级账本这几种区块链技术当中,相互对比后,最终还是以go-ethereum为解决方案. 以ethereum为基准去找解 ...
- 理解以太坊的Layer 2扩容解决方案:状态通道(State Channels)、Plasma 和 Truebit
-宾夕法尼亚州的尼科尔森大桥建设照片(图源).罗马人的工程原理扩展至新的应用 对于以太坊来说,2018年是专注底层架构之年.今年很多早期参与者会测试网络极限,并且重新关注以太坊的扩容技术. 以太坊仍然 ...
- 以太坊和IPFS如何存储数据
如何将JSON文件存储在IPFS上,并使用Oraclize访问智能合约中的数据呢? 以太坊是一个成熟的区块链,使开发人员能够创建智能合约,在区块链上执行的程序可以由交易触发.人们经常将区块链称为数据库 ...
- [中文] 以太坊(Ethereum )白皮书
以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...
随机推荐
- oeasy教您玩转vim - 59 - # 编辑总结
[Github地址] (https://github.com/overmind1980/oeasyvim) [Gitee地址] (overmind1980/oeasyvim) [蓝桥实验楼 邀请码 ...
- pytorch问题记录
1.找不到fused 2.找不到torch_extensions 网上的教程一般都是linux系统的,Windows这个是在C盘目录下 3.c++开发环境中找不到vcvars64.bat 解决方法:重 ...
- vue使用Echarts常见警告处理方法
[警告一][ECharts] DEPRECATED: textStyle hierarchy in label has been removed since 4.0. All textStyle pr ...
- 【MySQL】Windows-8.0.19 安装版 下载安装
下载地址 https://dev.mysql.com/downloads/windows/installer/8.0.html 跳过登陆 只选择基本服务 安装依赖环境,如果已存在,圆圈显示绿点,下一步 ...
- 【SpringCloud】 Re02 Nacos
运行Nacos注册中心 win版Nacos在bin目录下打开cmd 执行此命令以运行单机模式的Nacos startup.cmd -m standalone 控制台输出: Microsoft Wind ...
- nvidia公司官方迁移学习套件 —— NVIDIA TAO Toolkit
资料: https://blogs.nvidia.com/blog/what-is-transfer-learning/ 相关: https://developer.nvidia.com/tao-to ...
- How to evaluate the Messi Hong Kong fraud incident?
Who is Lionel Messi? URL: https://en.wikipedia.org/wiki/Lionel_Messi As a famous football player, Me ...
- gym中所有可以用的模拟环境
python 代码: from gym import envs for env in envs.registry.all(): print(env.id) 打印出可用环境: Copy-v0 Repea ...
- 模仿学习算法:Data Aggregation Approach: DAGGER算法——Mixing policy
论文: <A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning> ...
- [题解] [ABC221H] Count Multiset - DP
[ABC221H] Count Multiset 题面翻译 输入两个正整数 \(N,M\),并存在一个集合,问你一个长度为 \(k\) 的合法集合存在多少个?你需要回答 \(k\) 的值为 \(1\) ...