今日运势评分

4

本月运势

癸未月

震荡偏多

辛生水,丑克水
庚不经络织机虚张
子不问卜自惹祸殃

祭祀,祈福,解除,整手足甲,安床,沐浴,入殓,移柩,破土,启钻,安葬,谢土

嫁娶,斋醮,开市,出火,入宅,移徙,出行,作灶,安门,伐木

月相

冲顶回落

日冲

Powered by RitMEX

TRUMP9.30 -1.45%

SUI3.79 -0.84%

TON3.35 1.49%

TRX0.33 -3.22%

DOGE0.22 -0.69%

XRP3.15 0.68%

SOL178.64 -1.09%

BNB790.30 -2.49%

ETH3797.12 0.71%

BTC117784.14 -0.08%

ETH Gas2.27 Gwei

贪婪
74

详解 OP Stack Rollup 流程及对应代码

OP Stack 是标准化、共享和开源的开发堆栈,为 Optimism 提供支持,由 Optimism Collective 维护。

撰文:Rayer

Optimism Bedrock 是 OP Stack 的当前版本。Bedrock 版本提供了用于启动生产质量的 Optimistic Rollup 区块链的工具。此时,OP Stack 不同层的 API 仍然与 Stack 的 Rollup 配置紧密耦合。

Op-stack 主要的 rollup 由两个服务来承担。

  • op-batcher:负责将每隔一段时间读取 sequencer 上的交易内容,rollup 到链上 DA

  • op-proposer:负责将交易状态 rollup 到合约。

Rollup 架构

op-batcher

op-batcher 执行流程图

loadBlocksInfoState 执行逻辑

loadBlocksInfoState 负责读取,从前一次读取的块开始的所有块,即还未读取的块。

其整体流程如下

代码如下:

loadBlocksIntoState 完成了以下动作

1、获取 sequencer 中的同步状态

2、153 行,调用calculateL2BlockRangeToStore函数

  • calculateL2BlockRangeToStore 获取并判断需要提交的最新 L2 的 start 和 end 块号,起始的区块为 L2 当前安全的最高块,结束区块为 L2 当前最高的不安全的区块。

3、164 行,拿到提交的开始块和结束区块之后,从起始区块开始获取区块信息,调用loadBlockIntoState 函数获取区块

  • loadBlockIntoState 检查区块信息以及 geth 信息,无误后,在 200 行,调用 AddL2Block函数将区块加到 channelManager 的 blocks []*types.Block 中。

4、165 行至 168 行,校验区块是否需要重新提交,若需要,将 l.lastStoredBlock 置成 eth.BlockID{};173 行,否则就将 l.lastStoredBlock 置成 eth.ToBlockID(block);latestBlock 置成 block;

5、177 行L2BlockToBlockRef从 L2 块引用源中提取基本的 L2BlockRef 信息,根据区块号判断必要时回退到创世信息

publishStateToL1 执行逻辑

publishStateToL1 将队列中的所有交易提交到 L1,直到队列中没有交易或者出现错误为止。

代码如下:

1、publishStateToL1 会循环将队列里的交易发送到 Layer1 网络。

2、377 行调用publishTxToL1

publishTxToL1 是提交单个交易到 L1 的逻辑,publishTxToL1 方法获取要提交的数据数据构建交易发送到 Layer1 网络,并将发送出去的交易扔到 receiptCh chan TxReceipt[T] channel 里面。

  1. 429 行l1Tip:获取当前 L1 提示作为 L1BlockRef。假定传递的上下文是生命周期上下文,因此它在内部使用网络超时进行包装。

  2. 434 行recordL1Tip:将上一个 L1BlockRef 更换成 l1Tip 获取到的最新的 L1BlockRef

  3. 437 行TxData:收集需要 rollup 的交易数据;TxData 返回应提交给 L1 的下一个 tx 数据。目前,每个事务仅使用一帧。如果待处理的通道已满,则仅返回该通道的剩余帧,直到成功完全发送到 L1。如果没有挂起的帧,它将返回 io.EOF。

  4. 447 行sendTransaction将交易发送到一层,并把交易发送状态更新到 receiptCh chan TxReceipt[T] channel 里面;sendTransaction 使用给定的「数据」创建交易并将其提交到批处理收件箱地址。它目前使用底层的「txmgr」来处理交易发送和价格管理。这是一种阻塞方法。不应同时调用它。

handleReceipt

handleReceipt 获取从 channel 处理交易的状态,并将成功处理的交易从 channel 里面移除。

代码如下:

op-proposer

执行流程图

详细执行流程

FetchNextOutputInfo

FetchNextOutputInfo: 获取 L2 上的区块的 output,方便后续组装提交。返回的 output 结构如下:

type OutputResponse struct {Version               Bytes32     json:"version"OutputRoot            Bytes32     json:"outputRoot"BlockRef              L2BlockRef  json:"blockRef"WithdrawalStorageRoot common.Hash json:"withdrawalStorageRoot"StateRoot             common.Hash json:"stateRoot"Status                *SyncStatus json:"syncStatus"}

 

代码如下:

  1. 224 行,NextBlockNumber:获取下一批次需要提交的区块区间,区间计算为 latestBlockNumber() + SUBMISSION_INTERVAL SUBMISSION_INTERVAL 的值可以在部署 L2OutputOracle 合约的时候指定。

  2. 230 行,调用FetchCurrentBlockNumber,获得当前区块的区块号

  3. 236 行至 241 行, 上面检查完 nextCheckpointBlock 符合规则之后,调用FetchOutput去 L2 上获取需要提交的 stateRoot

FetchCurrentBlockNumber 代码如下:

1、254 行,SyncStatus:获取 L2 块的 SafeL2 和 FinalizedL2 的状态和块信息,

FetchOutput 代码如下:

2、279 行OutputAtBlock: 根据块高获取 output, 里面包含 stateRoot,这里最终是调用 eth_getProof 去计算并获取 stateRoot,代码调用流程可以参考上图。提示: 这里并不是一个块提交一次 stateRoot, 而是根据 SUBMISSION_INTERVAL 配置的值来计算一批块的 stateRoot,最终将 stateRoot 提交到 L2OutputOracle 合约

send Transaction

  • sendTransaction:使用 output 构建 stateRoot 提交交易,将交易提交到一层链, 下面是交易打包的数据细节

return abi.Pack(    "proposeL2Output",    output.OutputRoot,    new(big.Int).SetUint64(output.BlockRef.Number),    output.Status.CurrentL1.Hash,    new(big.Int).SetUint64(output.Status.CurrentL1.Number))

代码如下:

欢迎加入深潮TechFlow官方社群

Telegram订阅群:https://t.me/TechFlowDaily
Twitter官方账号:https://x.com/TechFlowPost
Twitter英文账号:https://x.com/BlockFlow_News
作者登链社区@UpchainDAO
相关文章
2025.07.30 - 9 小时前
Space 回顾|热浪终章,巅峰时刻:波场 TRON 的“三重奏”引爆牛市新起点
在波场TRON创始人孙宇晨先生35岁生辰之际,波场TRON以纳斯达克上市、太空计划启动、生态峰值突破“三重奏”,奏响新周期序曲。
2025.07.30 - 11 小时前
Treehouse TGE 启动:上线多家头部交易所,并将分配大量 TREE 代币空投回馈用户
Treehouse 正在构建去中心化固定收益协议层,致力于解决当前 DeFi 世界收益波动大、利率不透明、利率缺乏标准化等核心问题。
2025.07.30 - 11 小时前
十岁的以太坊,华尔街接手元年
是时候回顾一下,我们和以太坊一起走过的路了。
2025.07.30 - 16 小时前
Kaia 原生 USDT 登陆韩国旅游场所,支持现金兑换与交通卡服务
此项服务专为前往韩国的游客及韩流爱好者量身打造。
2025.07.29 - 昨天
加密货币的「Nvidia」
以太坊是加密货币的「Nvidia」,它是第一阶段建设中的最大赢家,也是必须持有的资产。
2025.07.29 - 昨天
Ika 推出主网,实现 Sui 区块链的原生跨链资产控制
Ika是最快的并行MPC网络,提供亚秒级延迟、前所未有的规模和去中心化,以及零信任安全。
2025.07.29 - 昨天
A1 Research:占据近 70% 市场份额,Ethena 做对了什么?
随着 DeFi 逐渐成熟并细分为专门的基础设施层,Ethena 的发展轨迹可能不再是一个异常现象,而更像是可持续的、面向机构的协议如何运作的预览。
2025.07.29 - 昨天
PayPal 推出「Pay with Crypto」,跨境手续费降 90%
PayPal 预计,此举将覆盖全球超 6.5 亿加密货币用户,助力商户进入快速增长的数字资产经济。
2025.07.29 - 前天
Midl 获 Draper Associates 和 Draper Dragon 240 万美元种子轮投资,推动比特币原生 dApp 基础设施发展
Midl 是一个执行环境,将智能合约引入比特币,开启了原生构建在全球最安全区块链上的新一代去中心化应用的大门,并提供专门的开发者工具。
2025.07.28 - 前天
IOSG:加密货币储备经济模型大解构
截至2025年中,全球已有约250家上市公司将比特币纳入资产负债表,其中MicroStrategy通过创新性金融工具(优先股、零息可转债)成功构建大规模比特币储备,开创了一种新型的公司加密资产配置模式。