织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

深入理解以太坊二层方案 Arbitrum 技术架构(2)

时间:2021-06-25 15:29来源:未知 作者:admin 点击:
AVM 使用 c++实现,AVM 表示的逻辑实现在 MachineStateKeys 类的 machineHash 函数(machinestate.cpp)中。AVM 的特别之处就是除了执行外,还能较方便的表达(证明)执

  AVM 使用 c++实现,AVM 表示的逻辑实现在 MachineStateKeys 类的 machineHash 函数(machinestate.cpp)中。AVM 的特别之处就是除了执行外,还能较方便的表达(证明)执行状态。深入理解 AVM 的基本数据结构,AVM 的基本的数据类型包括:

  using value = std::variant;

  enum ValueTypes { NUM, CODEPT, HASH_PRE_IMAGE, TUPLE, BUFFER = 12, CODE_POINT_STUB = 13 };

  •   uint256_t - 整数类型

  •   CodePoint - 当前代码指令表示

  •   Tuple - 元组,由 8 个 Value 组成。元组中的某个元素依然可以是元组

  •   Buffer - 数组,最长为 2^64

  •   HashPreImage - 固定的 hash 类型,hashValue = hash(value, prevHashValue)

  每种数据类型除了数据表示外,还能非常方便地计算其 hash 值作为状态。详细看看 CodePoint 和 Tuple 基本数据类型。

CodePoint

  CodePoint 类型将多个操作「捆绑」在一起,每个 CodePoint 除了记录当前的 Operation 外,还包括前一个 CodePoint 的 hash 信息。这样所有的 Operation 可以串连起来,当前的 CodePoint 除了能表达当前的 Operation 外,还能明确 Operation 的依赖关系。CodePoint 的类型定义在:packages/arb-avm-cpp/avm_values/include/avm_values/codepoint.hpp。

  struct CodePoint {

  Operation op;

  uint256_t nextHash;

  CodePoint(Operation op_, uint256_t nextHash_)

  : op(op_), nextHash(nextHash_) {}

  bool isError() const {

  return nextHash == 0 && op == Operation{static_cast(0)};

  }

  };Tuple

  Tuple 类型由 RawTuple 实现。RawTuple 是由一组 value 组成。Tuple 限制最多 8 个 value。

  struct RawTuple {

  HashPreImage cachedPreImage;

  std::vector data;

  bool deferredHashing = true;

  RawTuple() : cachedPreImage({}, 0), deferredHashing(true) {}

  };

  Tuple 的类型定义在:packages/arb-avm-cpp/avm_values/include/avm_values/tuple.hpp。

  在理解了基础类型的基础上,DataStack 可以由一系列 Tuple 实现:

  总结一下,AVM 中的 PC,Stack,Register 等等的状态都能通过 hash 结果表示。AVM 整个状态由这些 hash 值的拼接数据的 hash 表示。

Rollup Challenge

  在提交到 L1 的状态有分歧时,挑战双方(Asserter 和 Challenger)先将状态分割,找出「分歧点」。明确分歧点后,挑战双方都可提供执行环境,L1 执行相关操作确定之前提交的状态是否正确。L1 的挑战处理逻辑实现在 arb-bridge-eth/contracts/challenge/Challenge.sol。整个挑战机制有超时机制保证,为了突出核心流程,简化流程如下图所示:

  挑战者通过 initializeChallenge 函数发起挑战。接下来挑战者 (Challenger) 和应战者 (Asserter) 通过 bisectExecution 确定不可再分割的「分歧点」。在确定分歧点后,挑战者通过 oneStepProveExecution 函数确定 Assert 之前提交的状态是否正确。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容