Skip to content

Commit

Permalink
feat(arbitrum): 2024.12.14 learning
Browse files Browse the repository at this point in the history
  • Loading branch information
Yi-fantasy committed Dec 14, 2024
1 parent 73d43d7 commit 241e3e3
Showing 1 changed file with 56 additions and 0 deletions.
56 changes: 56 additions & 0 deletions Yi-fantasy.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,4 +260,60 @@ Yi
>
>简言之,开发人员在 Arbitrum 上既能使用传统 Solidity 语言,又能使用 WASM 兼容的语言,如 Rust、C 和 C++ 等来构建应用程序。此外,Stylus 使 Dapps 的执行更加高效,显著地降低了 gas 成本。
### 2024.12.14

#### 工作机制

用户和合约将消息放入 inbox,链一次读取并处理一条消息,然后更新链上的状态。

执行是确定性的:链的行为由 inbox 里的内容唯一确定。因此,只要消息被放入 inbox,就可以从任何节点获取交易结果。

#### 工作理念

##### 排序,然后确定性执行

Sequencer 接收用户发来的交易,将交易放入有序序列中,然后发布该序列。

交易经过排序后,按顺序逐一通过状态转换函数运行。状态转换函数将链的当前状态(帐户余额、合约代码等)以及下一个交易作为输入,用输出的结果更改链上状态,有时会在 Nitro 链上发出新的 L2 区块。

由于协议不相信 Sequencer 不会将垃圾放入其序列中,因此状态转换函数将检测并丢弃序列中的任何无效交易。行为良好的 Sequencer 将过滤掉无效交易,这降低了成本,从而保持交易费用较低(但无论 Sequencer 在其 feed 中放入什么,Nitro 仍将正常工作)

状态转换函数是确定性的,它的行为仅取决于链的当前状态和下一个交易的内容。由于这种确定性,交易 T 的结果将仅取决于链的创世状态、序列中 T 之前的交易以及 T 本身。

因此,任何知道交易序列的人都可以自己计算状态转换函数——并且所有这样做的诚实方都保证获得相同的结果。这是 Nitro 节点运行的正常方式:获取交易序列,并在本地运行状态转换函数。这不需要共识机制。



Sequencer 的发布方式:

1. 实时 feed:(软终结)

Sequencer 发布信息,订阅过的人都可以在交易排序时收到通知。Nitro 节点可以直接从 Sequencer 订阅信息,也可以从转发信息的中继处订阅。如果 Sequencer 是诚实的,它将按特定顺序记录交易。所有订阅人都可以使用收到的交易来运行状态转换函数,获取每笔交易的结果。这被称为交易的“软终结”;它之所以“软”,是因为它取决于 Sequencer 是否是诚实的



1. L1 上发布批量交易:(硬终结)

Sequencer 还在 L1 以太坊链上发布其序列。 Sequencer 会定期连接 feed 中的下一组交易,对其进行压缩(brotli算法),并将结果作为 calldata 发布在以太坊上。一旦这一批次的交易在以太坊上成功发布,它记录的第 2 层 Nitro 交易也将确定,并且交易的结果任何一方都清楚。这就是”硬终结“。

##### Geth 核心

Nitro 节点由三层构建:

1. 基础层为 Geth 的核心代码——Geth 模拟 EVM 合约的执行的代码、以及维护构成以太坊状态的数据结构的代码。Nitro 将此部分代码编译为一个库,并进行了一些小修改以添加必要的钩子。
2. 中间层 ArbOS 是定制软件,提供 L2 相关的附加功能
3. 顶层由节点软件组成,主要来自 Geth。它处理来自客户端的连接和传入的 RPC 请求,并提供操作与以太坊兼容的区块链节点所需的其他顶级功能。

##### 执行和证明分离

Nitro 通过使用相同的源代码进行执行和证明,但两种情况会选择不同的编译方式。

在编译 Nitro 节点软件时,使用普通的 Go 编译器。

在证明的时候,Go 编译器将状态转换函数的代码部分编译为 Wasm,并最终转换为 WAVM 的格式(修改版 Wasm)

##### Optimistic Rollup

略(前文已讲述)

<!-- Content_END -->

0 comments on commit 241e3e3

Please sign in to comment.