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 能够在保证安全性的同时实现极高的性能,每秒可以处理多个区块。它通过巧妙的设计平衡了性能、安全性和去中心化程度,为以太坊扩容提供了一个可靠的解决方案。
posted @ 2025-06-19 15:38  若-飞  阅读(6)  评论(0)    收藏  举报