Arbitrum Optimistic Rollup机制
1.Layer2: Optimistic Rollup 概述
1.1.整体架构
1.2.乐观汇总的核心特点
乐观假设机制:
-
默认假设所有交易都是有效的
-
不在链上进行即时验证,显著降低验证成本
-
采用挑战期机制确保安全性
1.3.交易处理流程
1.4.挑战期(Challenge Period)设计
固定时长:6.4 天(约一周)
支持多个挑战并行处理
使用欺诈证明机制
具有自动超时机制
2.验证层架构
3.核心组件实现
3.1.ArbOS - Arbitrum 操作系统
type ArbosState struct { arbosVersion uint64 upgradeVersion storage.StorageBackedUint64 networkFeeAccount storage.StorageBackedAddress l1PricingState *l1pricing.L1PricingState l2PricingState *l2pricing.L2PricingState }
核心功能:
-
交易处理和验证
-
状态管理和更新
-
安全保障
-
版本控制和升级
-
定价机制
-
可重试交易支持
-
地址管理
-
存储系统
3.2.序列器(Sequencer)实现
type RedisCoordinator struct { Client redis.UniversalClient sentinelMaster string }
特点:
-
Redis 协调序列器选择
-
单一主序列器负责出块
-
其他序列器作为备份
3.3. validator - Validation Layer
验证所有交易的执行结果
监控链上状态变化
对可疑的状态变更提出挑战
参与争议解决流程
维护网络安全
3.4. staker - 质押机制实现
在L1进行质押
挑战和惩罚机制
挑战代码:staker/execution_challenge_bakend.go
验证代码:staker/BlockValidator.go
Arbitrum DAO 合约代码库:
https://github.com/ArbitrumFoundation/governance
3.5. daprovider - 数据可用性提供者
Redis 适合分布式场景
S3 云存储:可用性解决方案
Google Cloud 存储:可用性解决方案
LevelDB/PebbleDB 适合持久化存储
3.6. 消息广播系统
type Broadcaster struct { ws *wsbroadcastserver.WSBroadcastServer }
基于 WebSocket 的实时通信:
-
Sequencer 作为广播服务器
-
验证者和全节点作为客户端
3.7. arbnode - 节点服务
equencer:序列器:选择与协调:中心化角色
redis协调序列器,选择主序列器
使用 Redis 的分布式锁机制确保同一时间只有一个主序列器
排序打包
通过锁定机制选择主序列器
主序列器负责产生新块和打包交易
其他序列器作为备份,在主序列器故障时接管
序列化消息
负责交易的排序和打包
维护交易的执行顺序
生成批次(Batch)
3.8. arbitrator - 仲裁系统
仲裁系统主要负责:
状态验证:
-
验证交易执行结果
-
验证状态转换
-
处理争议情况
欺诈证明生成:
-
生成状态证明
-
验证状态证明
-
处理挑战响应
4.出块流程详解
4.1. 区块生成者选择
type L1Info struct { poster common.Address // 序列器地址 l1BlockNumber uint64 // L1区块号 l1Timestamp uint64 // L1时间戳 }
序列器选择机制:
Redis 协调器管理:
type RedisCoordinator struct { Client redis.UniversalClient sentinelMaster string // Redis主节点 quorumSize uint64 // 所需法定人数 }
优先级管理:
const ( PRIORITIES_KEY string = "coordinator.priorities" // 序列器优先级列表 WANTS_LOCKOUT_KEY_PREFIX string = "coordinator.liveliness." // 活跃性检查 )
4.2. 交易处理和区块创建
无投票共识:
-
中心化序列器直接决定
-
不需要多节点投票
-
大幅提高效率
func ProduceBlockAdvanced( message *arbostypes.L1IncomingMessage, delayedMessagesRead uint64, lastBlockHeader *types.Header, statedb *state.StateDB, ) (*types.Block, types.Receipts, error) { // 1. 立即处理新交易 txes, err := ParseL2Transactions(message, chainConfig.ChainID) // 2. 快速创建区块 header := createNewHeader(lastBlockHeader, l1Info, arbState, chainConfig) // 3. 无需等待验证 block := types.NewBlock(header, txes, receipts) }
4.3. 区块广播机制
type Broadcaster struct { ws *wsbroadcastserver.WSBroadcastServer } func (b *Broadcaster) BroadcastBlock(block *types.Block) error { // 通过WebSocket实时广播 return b.ws.Broadcast(block) }
4.4. 区块确认和永久存储
func FinalizeBlock( block *types.Block, statedb *state.StateDB, ) error { // 1. 更新状态 if err := statedb.Commit(block.NumberU64()); err != nil { return err } // 2. 永久存储 if err := WriteBlockWithState(block, receipts, statedb); err != nil { return err } }
4.5. 挑战期机制:
6.4天观察期
允许任何验证者挑战
确保安全性
挑战期的特点:
只在有争议时才进行验证
一旦挑战开始,需要在挑战期内完成
支持多个挑战并行处理
使用欺诈证明机制
有自动超时机制
挑战期结束后:
如果没有挑战,状态被确认
如果有挑战且证明成功,错误状态被拒绝
不是真正回滚L1的状态,而是把那些交易回滚,然后重新打包到L1
恶意挑战者的质押会被没收
正确的验证者可以获得奖励
5.去中心化程度
5.1. 排序层:相对中心化
使用中心化序列器
Redis 协调机制
5.2. 验证层:去中心化
任何人都可以成为验证者
只需一个诚实验证者即可保证安全
5.3. 数据存储:去中心化
所有数据最终存储在以太坊
支持完整数据恢复
6.数据可恢复性
完整数据保存:
-
所有批次数据存储在以太坊
-
包含完整状态变更信息
压缩存储:
-
使用高效压缩算法
-
优化存储成本
7.高性能原因总结
7.1.乐观执行机制
无投票共识:
-
中心化序列器直接决定
-
不需要多节点投票
-
大幅提高效率
7.2.中心化序列器优势:
-
无需共识投票
-
Redis 快速协调
-
单一决策者
7.3.批量处理机制:
-
交易批量执行
-
状态批量更新
-
数据批量提交
7.4.实时广播系统:
-
WebSocket 低延迟
-
高效数据传输
-
实时状态同步
这种架构设计使得 Arbitrum 能够在保证安全性的同时实现极高的性能,每秒可以处理多个区块。它通过巧妙的设计平衡了性能、安全性和去中心化程度,为以太坊扩容提供了一个可靠的解决方案。

浙公网安备 33010602011771号