Arbitrum Nitro白皮书解读:使用新证明器,提供更高效的Optimistic Rollup
作者:Karen
编译:Foresight News
Arbitrum One 主网将于8月31日迁移至 Nitro,这是 Arbitrum 的对吞吐量、交易成本、效率改善的一次重大迭代,将与半个月公开发布的 Arbitrum Nova 共存。这意味着此前备受关注的 Odyssey 活动也可能会并行重启。
Offchain Labs 在最新发布的 Arbitrum Nitro 白皮书中,将 Arbitrum Nitro 视为第二代 Optimistic Rollup,相比之前的 Rollup,Nitro 能够提供更⾼的吞吐量、更快的最终确定性和更有效的争议解决方案。
Arbitrum Nitro 技术的核心是一个新的证明器(prover),可以在 WASM 代码上进行 Arbitrum 的交互式欺诈证明。也就是说, L2 Arbitrum 引擎可以在 WASM 上运行,取代一直定制设计的 AVM(Arbitrum EVM)架构,可以使用标准的语言和工具来构建和编译。
将 Gethcore 直接编译到 Arbitrum 中是 Nitro 最酷的地方,Geth 实际上定义了以太坊标准的 EVM 引擎。所以本质上,Nitro 是在以太坊之上的 Layer2 运行 Geth,并且可以证明对编译为 WASM 的 Geth 核心引擎的欺诈。
Arbitrum 此前也表示,Nitro有着优化过后的批处理和数据压缩组件,能进一步降低 Arbitrum 的交易成本,并且具有以太坊 L1 Gas 兼容性等,除此之外,欺诈证明、排序器、代币桥也是 Nitro的组件。由于 Nitro 建立在 WASM 和 Geth 等标准技术之上,因此它更兼容 EVM。根据白皮书,改进过后的 Nitro 相较 Arbitrum One,效率更高,延迟性更低,激励兼容性也更好。
Arbitrum 实现这些属性的设计原则包括:
– 将事务排序与确定性执⾏分开;
– 将现有的以太坊模拟软件与扩展相结合,并实现 跨链 功能;
– 分别编译执行和证明;
– 使用基于交互式欺诈证明的 Optimistic Rollup 协议将交易结果放置在 Layer1。
一、排序和确定性执行
Nitro 分两个阶段处理提交的交易,排序器(Sequencer)进行交易排序,并将订单作为实时流和压缩数据批次发布在 Layer1 链上。这些交易会按确定性状态转换函数⼀次处理⼀个有序交易,该函数更新链状态并⽣成 Layer2 区块,这些区块稍后会结算到 Layer1 链。
具体来说,排序方面,排序器受信任且诚实地对传⼊交易按照先后顺序进⾏排序,目前以两种方式发布其事务排序,首先发布一个排序交易的实时流,代表排序器最终以特定顺序记录交易的承诺;其次,Sequencer 在收集一批交易后,然后使用通用算法 brotli 对其进行压缩来降低成本,并将结果传递给 Nitro 链的 Inbox 合约(在 L1 以太坊上运⾏)。⼀旦 Sequencer 到 Inbox 的交易在以太坊上具有最终性,Nitro 链的交易顺序就是最终的。
目前排序器是由 Offchain Labs 运营的集中式组件,未来打算使⽤公平分布式排序协议过渡到基于委员会的排序器。
确定性执行方面,在对传⼊交易进⾏排序后,Nitro 链会使⽤链的状态转换函数(STF)对其进⾏处理,输出更新的状态并生成 Layer2 区块。
二、软件架构:Geth at the Core
Nitro 将 Geth 编译进来是 Nitro 的第⼆个关键设计理念,Geth 指的是以太坊节点软件 go-ethereum。Nitro 中的 core 执⾏和状态维护功能由开源 go-ethereum (geth)package 代码处理,确保其执⾏和状态与以太坊⾼度兼容。
构成 Nitro 节点的软件可以被认为是内置在三个主要层中,分别为基础层——Geth core(模拟 EVM 合约执行和维护构成以太坊状态的数据结构)、中间层(ArbOS)以及顶层,其中,ArbOS 是⼀个软件层,实现了管理 Layer2 链所必需的功能,包括记账功能、⽀持 Nitro 和 Layer1 以太坊之间的双向安全跨链调⽤以及特定于 Layer2 的费⽤跟踪和收集。
跨链交互方面,Nitro 的跨链消息传递功能还可⽤于创建代币桥,这是⼀个允许在以太坊和 Nitro 链之间有效转移资产的应⽤。Offchain Labs 团队已经实施并发布了⼀个非正式代币桥,提供对可替代代币的存入或提款功能。另外,新的和改进的批处理和压缩系统也能最大限度地降低 L1 成本。
顶层则由节点软件组成,处理来⾃客户端的连接和传⼊的 RPC 请求,并提供操作与以太坊兼容的区块链节点所需的其他功能。
三、执行与证明分开
Nitro 通过对执⾏和证明使⽤相同的源代码,但针对这两种情况将其编译为不同的⽬标。在编译 Nitro 节点软件执⾏时,使⽤的是普通的 Go 编译器,为⽬标架构⽣成原⽣代码,当然对于不同的节点部署会有所不同。
另外,状态转换函数部分的代码由 Go 编译器编译为 WebAssembly(WASM),这是⼀种类型化的、可移植的机器代码格式。然后,WASM 代码经过简单的转换和修改,转换成称为 WAVM 的格式。
白皮书指出,WAVM 在三个主要⽅⾯与 WASM 不同,分别为去除了 WASM 的⼀些 Go 编译器没有⽣成的特性;限制了 WASM 的⼀些功,包括去除了浮点指令和不包含嵌套控制流;添加了⼀些操作码以实现与区块链环境的交互等。
如果对计算状态转换函数的正确结果存在争议,则通过参考 WAVM 代码的交互式欺诈证明协议来解决。
四、具有交互式欺诈证明的 Optimistic Rollup
在最初的 Arbitrum 设计的基础上,Nitro 使⽤改进的 Optimistic Rollup 协议,该协议使用优化过后的交互式欺诈证明协议。
这个 Rollup 协议是 Nitro ⽤于确认 Layer2 链状态和 Layer1 以太坊上的相关数据的⽅法。 Layer2 ⽤⼾通常不会等待 L1 确认,⽽是依赖确定性状态转换函数,该函数允许从记录的交易序列中得出交易结果。
该 Rollup 协议产生了一条Rollup Blocks(RBlock)链,与 Layer2 区块不同,一个 Rollup Block 通常包装(encapsulate)了一系列 Layer2 区块,因此 RBlock 的数量远少于 L2 块。最初一个 RBlock代表某方声称称 RBlock 的数据是正确的。最终,每⼀个这样的声明要么被协议确认,要么被拒绝后从 RBlock 链中删除。这组已确认的 RBlock 将从创世 RBlock 开始形成⼀条链。