Arbitrum 详解 - One、Nitro、Nova

Rollup 是一种可以对开放式合约(即所有人都能看见并与之交互的合约)进行扩容的通用方法。在 Rollup 上,对合约的调用及其 argument(实际参数)都是作为调用数据(calldata)写在链上的,但是合约的实际计算和存储都是在链下完成的。有人会在链上发布一个 assertion(断言),断言合约将要执行的一系列操作(例如要完成的支付)以及执行完成之后合约状态的哈希值。可以认为,这个发布上链的断言将所有的调用和结果都 “卷起来”(“rolling up”)成为单笔发送上链的交易。

一、Arbitrum One

  • Arbitrum 的架构有部分在 L1 上,有部分在 L2 上。在 L1 上的组件是 EthBridge,由一组以太坊合约构成。EthBridge 负责对 Arbitrum Rollup 协议进行仲裁,以及维护 Arbitrum rollup 在以太坊链上的收件箱和发件箱。
  • 用户、L1 合约和全节点可以通过以太坊链上的收件箱和发件箱将其交易发送至 Arbitrum 链,并观察这些交易的结果。
  • Arbitrum 虚拟机(AVM)是 EthBridge 提供的功能,是 L1 和 L2 之间的网关。AVM 能够读取输入,并基于这些输入执行计算,从而产生输出。
  • ArbOS 运行在 AVM 上,确保智能合约在 Arbitrum 链上执行。ArbOS 完全存在于 L2 上,并像在以太坊上一样运行 EVM 合约。

存款到 Arbitrum:

  1. L1:向以太坊主网的Arbitrum L1GatewayRouter合约发送一笔交易,调用outboundTransfer 函数
  2. L1:Router合约继而将需要发送的 ERC-20 代币(这里是$USDC)存至Arbitrum在L1中的Custom Gateway合约地址
  3. L2:用户在L2上的别名地址会负责向 Arbitrum L2中的 Custom Gateway 合约发送交易,调用 finalizeInboundTransfer 方法,在L2铸造代币发送给用户地址

【图片】

提款到以太坊:

从Arbitrum取回$USDC的流程和存入基本类似,用户先向 L2GatewayRouter 合约发起提款交易,经过过网关合约在L2->L1的通信(Retryable Tickets)后,由网关合约将 L1 上的代币发送给用户。

1、交互型 rollup

不同的 Rollup 系统有所区别的地方在于确保 assertion 正确性的方式。这里有三种基本方法:非交互型 rollup(如,ZK-Rollup)、单轮交互型 rollup(如, “optimistic rollup” 提案)和多轮交互型 rollup (如,我们团队的 Arbitrum Rollup )。

1.1 概述

对于交互型 rollup 来说,智能合约没有办法很好的验证 assertion 的正确性。如果要将 assertion 发布到链上,asserter(断言者)必须缴纳保证金,并且会开放一个时间窗口,如果验证者认为该 assertion 不正确,可以在窗口期内挑战它。有时这被称为**「欺诈证明」**。如果 asserter 发布了错误的 assertion ,就会失去自己的保证金。

其中:

  • 单轮交互型 rollup:以 optimism 为代表的交互型 rollup 中,assertion 包含每次调用的结果,挑战者会指出 assertion 中对哪个调用给出的结果是错的。链上合约会模拟执行被挑战的调用,并验证 asserter 关于这个调用的声明是否有误。如果真的有误,则取消整个 assertion ,并罚没 asserter 的保证金。如果一个 assertion 到挑战期结束为止还没有被挑战成功的话,就会被接受并得到最终确定。
  • 多轮交互型 rollup:以 Arbitrum Rollup 为代表的多轮交互型产品也设有挑战窗口期,挑战者可以在此期间缴纳保证金,并声明该 assertion 是错误的。接下来就会触发 asserter 和挑战者之间的往复交互型协议,并由一个链上合约来充当该协议的仲裁方(referee)。最后由仲裁方来决定哪一方有误,并罚没其保证金。这种设计是为了将解决争议所需的链上工作量降至最低,即,在链上仲裁方据实评估合约行为之前,先通过交互型协议尽可能缩小双方之间的争议范围。

1.2 状态更新

协议的参与者,通过提出一个争议断言(Disputable Assertion,DA)来推进该虚拟机的状态;该断言声明,从某些状态哈希开始,基于一些技术前提,虚拟机将会执行特定数量的计算步骤,生成新的状态哈希,并在执行期间完成相关的支付,生成相关的日志事件。争议断言可能是有效的(即可信的),也可能是无效的。参与者在提出争议断言时需要为保证断言的有效性而赌上一笔押金。
【图片】

1.3 押注

每个状态后面最多可以接一个争议断言。如果一个状态后面没有争议断言,那么任何人都可以生成一个争议断言接在后面,作为一个新的分叉点。结果就是产生了一棵平行未来之树。

【图片】

任何人都可以在树上的某个方框(状态)后面下注。对某个方框押注,意味着你在断言该方框最终将被协议确认。也就是你在断言,从当前状态到你押注的方框所在的这条分支是正确的分支。如果你错了,可以想见你的押金将被罚没。

押注行为不能被撤销。你可以将你的押注向右移动——可以在分叉点后向上或向下选择分支——但你不能向左移动押注,因为这相当于撤销你之前作出的押注承诺。

1.4 纠纷

当两个参与者之间出现纠纷时,系统可以启动一个交互式纠纷解决协议。

【图片】

2、交互式纠纷解决协议

交互式证明是 Arbitrum 的关键特性之一,它通过证明者和验证者之间的多轮交互来确保系统的安全性和正确性。

2.1 定义

Arbitrum 采用多轮欺诈证明。简单来说,就是通过二分查找,找到引起分歧的那个区块的第一个操作码。找到之后,只需在链上执行这个操作码。纠纷解决协议的结果是一个参与者将被发现是错误的。这个参与者的押金会被罚没。押注会从所在的方框上删除。部分押金会给到纠纷的另一方,剩下的被烧掉。

【图片】

  • 当两个质押者押注不同的区块且这两个区块之间没有继承关系时,他们会在某个区块上产生分歧,从而引发挑战。
  • 挑战主要发生在 Arbitrum 链上,由 L1 合约裁决。
  • 挑战包括一个在 L2 上进行的交互型多轮切分游戏和一个在 L1 上执行的单步证明。
  • 如果有质押者对某个区块提出争议,提议该区块的质押者将作为 “被告” 捍卫自己的断言。在切分游戏中,作为 “被告” 的质押者(Alice)为先手,将 N 个指令切分成 K 段,每段的大小是 N/K,且每段都有一个起点和一个终点。
  • 作为 “原告” 的质押者(Bob)同样将 N 个指令切分成 K 段(每段的大小是 N/K),并将它们与 Alice 的切分段一一对应,发现其中一个切分段的终点与 Alice 的不同。
    • Bob 实际上是在找出他不认同的切分段。
  • 接着,Bob 会执行 Alice 最初的操作,将有争议的切分段(大小为 N/K)再切分成 K 个子段,然后将这个切分段连同子段一起发送给 Alice。
  • Alice 执行 Bob 最初的操作,找到终点不同的那个子段。
  • 切分流程继续下去,直到 Alice 和 Bob 找到他们产生分歧的那一个指令为止。这个指令被发送给 L1 合约,并由后者执行它,然后决定这场争议的 “胜诉方”。
  • “败诉方” 将失去质押物,一部分质押物将被销毁(防止攻击者对冲押注),其余则奖励给诚实的 “胜诉方”。
  • 在整个切分流程中,作为裁决方的 L1 合约不知道任何关于指令的信息,只负责核实双方是否遵循游戏规则。
  • 在争议期间,其他所有验证者都能在争议敲定之前自行断定争议的结果,这就意味着会发生软分叉,且验证者可以继续在正确的链上提交 Rollup 区块。
  • 挑战期有一个强制的期限,即,每个质押者大约一周时间。
  • 每个质押者必须在一周的限期内完成自己的任务,否则就会 “败诉”。
  • 多个纠纷可以同时解决,但是每个押注者一次最多只能参与一个纠纷。

2.2 优势

Optimism 和 Arbitrum 之间最大的不同点在于欺诈证明机制的实现。Arbitrum 采用多轮欺诈证明,它只需为一整批交易生成一个状态证明,并发布到链上;其次,Layer 1 区块 gas 上限并不重要,因为 Layer 2 交易不完全在 Layer 1 上执行。

Optimism 采用单轮欺诈证明,Layer 1 会在链上执行整个 Layer 2 交易,来验证状态根。这使得欺诈证明具有即时性,但也存在以下问题:

  • 你需要监督交易执行,为此需要使用 OVM(即为了避免副作用而重新编写的EVM)
  • Layer 2 交易的 gas 使用量不得超过 Layer 1 区块的 gas 上限
  • 每执行一笔交易,你都需要在链上生成状态根 —— 导致成本上升:(
  • 存在安全隐患

3、Nitro 升级

Nitro 是 One 的技术栈升级,并不是独立于 One 的网络,Nitro 升级后全称还是 Arbitrum One ;而 Nova 是独立于 One 的网络。

【图片】

升级版的 Nitro,它的费用更低、以太坊兼容性更好以及zk证明更简洁,总之是一次全面的升级。支撑Nitro的关键创新可以概括为四点:证明程序、以Geth为核心、实现执行与证明分开、交互式欺诈证明的Optimistic Rollup。

3.1 不需要共识机制的证明程序

由于 Sequencer 在第一阶段的「状态转移函数」操作是公开的,任何人都可以根据自己已知的交易顺序去计算状态转移函数,所有诚实方得到的是相同的结果。因此,Nitro 的节点不需要共识机制,只需要获取交易序列(即时提取和在以太坊上批次提取),并自行在本地运行就可以了,所以会显著降低成本。

第一阶段:软确认(但此时的交易还没有向L1以太坊提交,有更改的余地)

  • 用户创建了一笔交易,经过钱包签名确认后,会发送给Nitro的Sequencer(序列器)。
  • Sequencer 收到信息,通过「状态转移函数」过滤掉无效交易,并把剩下的交易公平地进行排队.
  • 直接无条件地让节点在本地执行,并向客户提供交易收据(包括提交了恶意或者错误信息的用户),这个过程通常只需要一两秒钟。不需要任何额外的链上确认

第二阶段:硬终结

Sequencer向以太坊发布排队序列,并最终确认。

  • 一种发送方式是在给每笔交易排序时,都向所有订阅者发布即时通知。
  • 另一种方式是汇总起来在L1以太坊上按批次发布(间隔几分钟)。

3.2 用Go语言重写的节点软件Geth

Geth即 go-ethereum,是用 Go 语言编写的以太坊节点软件,让矿工去执行交易,这是 Nitro 最核心的部分。

Arbitrum 的旧方案方案是通过定制的 Arbitrum 虚拟机(AVM)来模拟 EVM,它的一些内部逻辑在EVM 不一致(例如Gas的计算),所以仅限于低级指令。而Geth则基本完全支持以太坊的数据结构、格式和虚拟机,所以可以实现以太坊高度兼容。

3.3 执行与证明分别两套代码

Layer2 的任务有两个——执行和证明,这是两个侧重点,无法兼顾,因此Nitro用不同的代码来实现。

不过都是同一套源代码,刚才提到的让矿工去执行交易的节点软件 Geth 用的是源代码,执行速度更快。但是关于欺诈证明的代码,则编译为二进制的 wasm 格式,特点是可移植、体积小、加载快并且兼容Web。而且Nitro又对wasm格式进行了微调,让它更适合与链交互,称之为WAVM代码。

在WASM代码上进行Arbitrum的交互式欺诈证明,就取代了Arbitrum虚拟机(AVM)的架构,直接以标准的语言和工具来构建和编译。

3.4 互相检举的交互式欺诈证明

Nitro 采用的证明系统是他们首创的「交互式欺诈证明」。

二、AnyTrust 拆解

Anytrust 是 Arbitrum 扩容方案最初的构想,是 Arbitrum Nitro 的技术变式。它通过最小信任假设来降低 calldata 的交易成本,依靠外部数据可用性委员会来存储数据并按需提供。

1、数据可用性委员会

Anytrust 与 rollup 的区别在于 Anytrust 引入了数据可用性委员会,将原本应该存储在 inbox 合约中的 calldata 数据转移到链下的数据可用性委员会存储。在 Anytrust 技术模式下,用户将交易发送到 Sequencer 以后,Sequencer 会将交易数据发送到数据可用性委员会,委员会将会为批量交易签署数据可用性证书(DACerts),只有 DACerts 上传到主网的 inbox 合约,这就进一步降低了发送到主网所需的数据。为了保证数据可用性,委员会将会运行数据可用性服务器,并公开 REST API,允许通过 Hash 获取数据批次。

也就是说,当需要获取对应批次的交易数据的时候,只需从 inbox 合约中获取上传的 hash 值,通过数据可用性服务器提供的公开 API ,即可查询到交易数据。相比直接将交易数据的 calldata 上传到 inbox 合约,Anytrust 方案在一定程度上牺牲了去中心化特性,人们从数据可用性委员会获取交易数据且不得不信任其保证交易。不过 Anytrust 方案相比其他侧链和采用 BFT 共识的链仍然具有较高的优势。

2、最小信任假设

该委员会有 N 名成员,AnyTrust 只需要确保至少有 2 名成员是诚实的。这是因为,如果 N-1 名委员会成员需要承诺提供对某些数据的访问,承诺方只需要有一名诚实成员即可,同时为了避免该诚实成员在 N-1 之外,因此,总共需要至少 2 名成员为诚实节点。这样,即可保证 rollup 协议正常运行。

3、Nova

Arbitrum Nova 是基于 AnyTrust 技术搭建的新链,专为游戏、社交应用程序和对成本更敏感的用例而设计。Nova 提供了 2 种数据发布方式,一种是像 Nitro 一样以 Calldata 的形式发布完整数据,另一种是发布 DACert 证明数据的可用性。

【图片】

Nova 的定序器将完整的数据集同时发送给所有 DAC 委员会的成员,委员会签名后把带有签名的证明返回给定序器,定序器收集到足够多的证明就能将它们聚合并创建有效的数据可用性证明(DACert),然后把 DACert 发布到主网。如果定序器没有收集到足够多的证明,Nova 会回退到 Rollup 模式(以 Calldata 形式发布数据到主网)。

相对于 One 而言,Nova 通过牺牲一定的安全性来提高性能,游戏社交类等需要高频交互的 Dapp 适合部署在 Nova 上。

三、Arbitrum L3 战略

Optimism 以其 OP Stack 为戟横向开疆扩土,Arbitrum 则另辟蹊径以 Arbitrum Orbit 开启纵向的 L3 变革。Arbitrum 团队亲自下场搞基于Arbitrum Orbit 的首条 L3 - XAI,正式向Optimism 宣战。

1、Arbitrum Orbit

Arbitrum Orbit 是一个开发框架,允许用户使用任何基于 Arbitrum Rollup 的 L2 网络作为结算层来创建和启动 L3 网络。借助 Arbitrum Orbit,用户可以在隐私、权限、费用代币、治理等方面定制自己的链。Orbit 链为最终用户提供专用吞吐量、流量隔离和 Gas 价格可靠性,从而允许快速迭代特定领域的机制设计和价值捕获机会。

【图片】

Nova 是专注于游戏场景的通用 L2,照理说已经可以满足游戏场景的需求了,为何还要推出 XAI?理由很简单:相对于 Nova 游戏公用链的定位,XAI 作为游戏专用 L3 能实现更高的性能,拥有专用的计算和存储资源。使链上资源密集型用例成为可能,比如说计算密集型的 AI 模型等。XAI 将原生受益于 Arbitrum 的技术堆栈:Nitro + BOLD+ Stylus。Nitro 是 One 的技术栈升级。通过客户端软件的基础层直接编译了 Geth 的核心,Geth 是主流的以太坊客户端,从而实现更高的以太坊兼容性。

2、BOLD

BOLD 是 Arbitrum 团队提出的无需许可验证机制,目的是最小化结算状态的延迟。

目前对于乐观 Rollup 而言,普遍存在一周的挑战期,用户从 L2 提现到 L1 要等一周;挑战期内验证者如果发现提交上来的 L2 交易有问题,可以发起挑战。

通过引入 BOLD 机制,一方面能实现验证的无需许可,更符合区块链去中心化的理念;另一方面,能实现最小化结算状态的延迟。BOLD 允许单个诚实的验证者在以太坊上与任意数量的对手进行争议时取胜,从而使 DDOS 攻击失效。

3、Stylus

Stylus 是 Arbitrum 开发的支持多语言构建应用程序的开源 SDK 。这是一种实现 EVM+ 兼容性的产品。简言之,开发人员在 Arbitrum 上既能使用传统 Solidity 语言,又能使用 WASM 兼容的语言,如 Rust、C 和 C++ 等来构建应用程序。此外,Stylus 使 Dapps 的执行更加高效,显著地降低了 gas 成本。Stylus 不局限于支持 Rust、C 和 C++, 例如 Move、Sway、Cairo 和 Go 等。试想下,以后 Aptos/ Fuel/ StarkNet 上的 dApps 能一键迁移至 Arbitrum 上。甚至可以通过 Arbitrum Orbit 实现一键 L3 链的链改。更有趣的是,BOLD、Stylus 都是通用的模块化组件;开发者基于 Arbitrum Orbit 启动特定用例的 L3,可以原生集成 BOLD、Stylus;也可以通过去中心化 DAO 治理的形式,在 L3 启动并平稳运行后再投票决定集成上述模块化组件。

【图片】

参考: