单体链把执行、共识、结算与数据可用性塞进同一个状态机,所有全节点都必须重复执行每一笔交易。当区块空间成为稀缺资源,gas 价格在需求高峰呈指数级上涨,链上应用的边际成本随用户增长而恶化——这正是模块化区块链要解决的核心矛盾。
模块化的本质是把「一条链做所有事」拆成「多条链各做一件事」,再通过标准化的接口把它们粘合起来。执行层负责算,结算层负责裁定争议,数据可用性层负责让所有人能看见并验证数据确实被发布过。理解这三层的边界与信任假设,是评估任何模块化方案的前提。
前置:/blockchain-rollup-architecture/(Rollup 的基本结构与批次提交机制)、/blockchain-data-availability/(数据可用性的定义与验证手段)。
目录
- 1. 单体链的瓶颈与模块化动机
- 2. 三层解耦:执行、结算与数据可用性
- 3. Rollup 作为可商品化的执行层
- 4. 结算层的形态:L1 结算、共享结算与再质押
- 5. Celestia:纠删码与数据可用性采样
- 6. EigenDA:再质押与经济安全
- 7. Rollup 即服务与一键发链
- 8. 共享排序与跨 Rollup 互操作
- 9. 信任假设与风险矩阵
- 10. 工程实践与选型建议
- 延伸阅读
1. 单体链的瓶颈与模块化动机
1.1 状态膨胀与执行瓶颈
以太坊主网每秒处理约 15 笔交易,每个全节点都要保存完整状态并重复执行全部交易。这种冗余带来了最强的安全保证,但也把可扩展性锁死在单机性能上。EIP-1559 之后基础费随拥堵动态调整,一笔普通 ERC-20 转账在高峰期可能消耗 30 美元以上,而同样的操作在 Rollup 上通常低于 0.05 美元。
问题不只是吞吐。状态数据库以每年数百 GB 的速度增长,全节点的磁盘与同步时间成为参与门槛,验证者集趋于集中。单体链无法同时满足「去中心化」「安全」「可扩展」三者的现实约束,这就是所谓的可扩展性三角。
更隐蔽的问题是费用市场的耦合。在单体链上,一次 NFT 铸造的抢购会把所有应用的 gas 价格一起推高,DeFi 用户的清算交易可能因为别人的 Meme 币交易而失败。不同应用被迫共享同一个拥堵市场,彼此的外部性无法定价,也无法隔离。
1.2 模块化:从单块巨石到可组合组件
模块化把可扩展性从「让单链更快」转变为「让多条链协作」。执行层可以独立优化虚拟机与 gas 计量,结算层可以专注于争议解决,数据可用性层可以专注于低成本的批量数据发布。每一层只解决一个问题,并通过标准化接口对外暴露能力。
这种解耦带来两个直接收益:一是各层可以独立升级与竞争,执行环境可以按应用需求定制;二是成本被显式分摊,用户为 blob 空间、DA 采样与结算证明分别付费,而不是为链的整体安全性买单。
代价是复杂度从「一条链」转移到「一组接口」。每一层都需要定义数据格式、证明格式与争议超时参数,任何一层的参数错配都可能导致资产冻结或争议无法解决。模块化的工程难点不在单点技术,而在于跨层协议的一致性。
2. 三层解耦:执行、结算与数据可用性
2.1 执行层
执行层是状态转换发生的地方,它定义虚拟机、gas 规则与状态根的计算方式。在模块化架构中,执行层可以是 EVM 兼容的 Rollup,也可以是基于 WASM 或 SVM 的定制环境。执行层的关键输出是一个状态根,以及与之对应的批次交易数据。
执行层不负责最终性。它把状态根与批次数据交给结算层与 DA 层,由后者决定这些状态是否被认可。这意味着执行层可以激进地追求性能,因为它不必自己承担全链共识的成本。
执行层的另一个设计维度是证明系统。乐观 Rollup 假设状态转换默认正确,只在被挑战时重新执行;有效性 Rollup 则要求每个批次附带零知识证明。前者依赖至少一个诚实的挑战者,后者依赖证明系统的可靠性与生成成本。两者对执行层的性能要求完全不同。
从工程角度看,执行层最容易被低估的是「状态存储」。无论链上计算多快,状态数据库的读写都会成为瓶颈,因此模块化执行层通常需要配套的状态管理策略,例如按账户分片、冷热数据分离,或者把状态存储外包给专门的存储网络。
2.2 结算层与数据可用性层
结算层负责验证状态转换的正确性并解决争议。它保存状态根的历史,接受欺诈证明或有效性证明,并在必要时执行强制提款。结算层是资产安全的锚点:只要结算层可信,用户就能在不信任执行层的前提下取回资产。
数据可用性层保证批次数据被发布且可被任何人获取。如果数据不可用,验证者无法重建状态,用户就无法生成欺诈证明,资产可能被冻结。因此 DA 层是模块化栈中最容易被忽视却最致命的一环。EIP-4844 引入的 blob 空间就是以太坊作为 DA 层的一种实现:每个 blob 128 KB,携带独立的 blob gas 定价。
三层之间的接口可以简化为三个承诺:执行层承诺「给定这批数据,状态根是这样算出来的」;DA 层承诺「这批数据确实发布过且任何人可取回」;结算层承诺「如果前者说谎,我能在有限时间内裁定并让用户退出」。三者缺一,模块化栈的资产安全就不完整。
// 简化示意:Rollup 合约向 DA 层提交批次数据
contract RollupBatch {
struct Batch {
bytes32 stateRoot;
bytes32 dataHash; // 指向 DA 层发布的数据承诺
uint256 blobIndex; // EIP-4844 blob 索引
}
mapping(uint256 => Batch) public batches;
function commitBatch(uint256 id, bytes32 root, bytes32 dh, uint256 bi) external onlySequencer {
batches[id] = Batch(root, dh, bi);
emit BatchCommitted(id, root, dh);
}
}
3. Rollup 作为可商品化的执行层
3.1 通用 Rollup 框架
OP Stack 与 Arbitrum Nitro 把 Rollup 的公共部分抽象成可复用的框架:桥接合约、欺诈证明程序、排序器与状态提交逻辑。团队只需替换执行环境与治理参数,就能派生出一条新链。这种「Rollup 模板化」让发链的边际成本从数年研发降到数周配置。
通用框架的代价是执行环境受限于框架所支持的虚拟机。如果应用需要自定义预编译或特殊 gas 模型,就必须等待框架升级,或者走向定制化路线。
框架之间的竞争集中在生态与工具链:桥接合约是否经过审计、区块浏览器是否可用、索引器与预言机是否已适配、跨链标准是否统一。技术差异往往小于生态成熟度的差异。
从成本结构看,通用框架把「共享组件」的成本摊薄:欺诈证明程序、桥接合约、升级机制都由社区维护,单条链只需承担部署与运营费用。这也是通用框架能在短时间内催生大量 L2 的根本原因。
3.2 定制化执行环境
面向特定场景的链可以选择定制执行层。游戏链可能希望免 gas 或使用固定费用模型,DeFi 专用链可能希望内置清算引擎与预言机接口。定制化的收益是性能与用户体验,代价是需要自己实现排序、证明与桥接,并独立承担安全审计成本。
无论通用还是定制,执行层最终都必须把状态根与数据承诺提交到某个结算层。区别只在于这条链愿意把多少信任外包给底层。
定制执行环境还有一个被低估的成本:生态迁移。用户的钱包、DApp、区块浏览器与做市商都需要重新适配。一条技术上更优的链如果缺少流动性,实际可用性可能远低于一条普通的 EVM Rollup。
4. 结算层的形态:L1 结算、共享结算与再质押
4.1 L1 结算与共享结算
最直接的方案是把结算锚定到以太坊 L1:把状态根写入 L1 合约,用 L1 的共识保证最终性。成本是每批次都要支付 L1 的 calldata 与执行费用,因此批次频率与成本直接挂钩。
共享结算层则在多条 Rollup 之间提供统一的结算与互操作。它可以把多条链的状态根聚合后再提交到 L1,摊薄单链成本,同时提供跨链原子操作的基础设施。共享结算的核心挑战是治理与安全预算:谁来运营这条结算链,作恶时用户能获得什么救济。
L1 结算的另一个变体是把结算与 DA 合并:状态根与批次数据都写入 L1,用同一套共识保证两者。这种方式信任假设最简单,但成本最高,因为 calldata 与 blob 空间都要按 L1 的市场价付费。
结算层的最终性时间直接决定用户体验。欺诈证明的挑战期通常是 7 天,这意味着从 L2 提款到 L1 需要等待一周;共享结算层如果采用更短的挑战窗口,就能显著改善跨链体验,但代价是安全预算需要相应提高。
4.2 再质押作为结算信任来源
再质押(restaking)允许验证者把已经质押在 L1 的 ETH 或 LST 重新抵押给外部服务,从而为结算层或 DA 层提供经济安全。其逻辑是:作恶会同时罚没原始质押与再质押部分,攻击成本因此倍增。
但再质押引入了新的信任耦合。当同一批验证者同时服务多个协议,惩罚条件的叠加可能造成级联罚没,而验证者未必理解自己承担的每一个额外义务。评估再质押方案时,必须追问:罚没条件是否可验证、是否存在客观的争议仲裁、以及验证者激励是否足以覆盖风险。
再质押的经济安全还有一个规模问题:名义上「数十亿美元的安全预算」只有在这些质押真的会被罚没时才成立。如果罚没条件需要主观判断,或者需要治理投票才能触发,实际安全就远低于账面数字。
5. Celestia:纠删码与数据可用性采样
5.1 纠删码与数据可用性采样
Celestia 把区块数据用二维 Reed-Solomon 纠删码扩展:原始数据被切分成 k 份,扩展为 2k 份,只要任意 k 份就能重建全部数据。轻节点不需要下载整个区块,只需随机采样若干份,如果采样全部成功,就能以极大概率确信数据可用。这使轻节点可以在不信任全节点的情况下参与验证。
采样安全性与采样次数相关。假设恶意方隐藏了 x 比例的数据,则单次采样命中缺失部分的概率为 x,采样 n 次的漏检概率为 x 的 n 次方。采样次数与网络参数决定了安全边界。
纠删码同时提供了数据可恢复性:即使部分全节点离线,只要网络上仍存在 k 份有效分片,数据就能被重建。这把「数据可用」从「所有节点都存一份」放宽为「网络整体保有足够分片」,从而降低了存储冗余。
采样验证的关键在于随机性不可被预测。如果恶意方知道轻节点会采样哪些位置,就能只保留这些位置的数据而隐藏其余部分。因此采样位置必须由不可预测的随机数派生,通常结合区块哈希与节点本地随机源。
5.2 命名空间 Merkle 树与 Blob 提交
Celestia 用命名空间 Merkle 树(NMT)把不同应用的数据分隔开,应用只需下载与自己命名空间相关的数据,而无需关心整块内容。这为 Rollup 提供了廉价的 DA:Rollup 只需把自己批次的数据以特定命名空间提交,就能让任何人在需要时重建状态。
# 向 Celestia 提交 blob 的简化流程
celestia blob submit 0x0000000000000000000000000000000000000000000000000000000000000001 ./batch.bin
celestia blob get 0x0000000000000000000000000000000000000000000000000000000000000001 1
与以太坊 blob 相比,Celestia 的单位成本更低,但安全预算来自其自身的验证者集与代币经济,而非以太坊的共识。这是典型的安全与成本的权衡。
6. EigenDA:再质押与经济安全
6.1 再质押与经济安全模型
EigenDA 建立在 EigenLayer 之上,由再质押者提供经济安全,专职运营者负责存储与提供数据。数据同样经过纠删码编码并分散到多个运营者,任何人可以验证承诺与实际数据的对应关系。其安全假设是:只要被罚没的质押价值高于攻击收益,运营者就没有作恶动机。
与 Celestia 相比,EigenDA 把安全来源外包给以太坊质押者,理论上继承了 ETH 的经济体量。但这也意味着安全取决于再质押参与度:如果只有很少的 ETH 被再质押,实际安全预算可能远低于名义值。
EigenDA 的另一设计选择是只提供 DA 而不做共识:它把排序与共识留给上层 Rollup 或结算层,自己只负责「把数据编码、分发、证明可用」。职责单一让它的实现更简单,也让它更容易被组合进不同的栈。
安全与成本的权衡在这里最为直接:以太坊 blob 的安全预算是以太坊全体验证者,Celestia 是其自身验证者集,EigenDA 是再质押的 ETH。三者的名义规模可能相差一个数量级,但实际的罚没可执行性才是决定安全的关键变量。
6.2 EigenDA 的吞吐与成本
EigenDA 的设计目标是把 DA 成本压到远低于以太坊 blob 的水平,通过批量聚合与编码实现高吞吐。对高频提交的 Rollup 而言,DA 成本在总运营成本中的占比可能从一半以上降到个位数百分比。
但成本优势必须与信任假设一起评估。使用外部 DA 层意味着 Rollup 的资产安全不再单纯依赖以太坊 L1,而依赖 DA 层在数据不可用时的处理机制。部分方案提供「DA 逃逸舱」,在数据不可用时允许用户基于 L1 上的承诺强制退出。
实际部署中常见的混合策略是双轨提交:把状态根与关键的提款数据写入以太坊 L1,把大体积的批次数据提交到外部 DA。这样即使 DA 层失效,用户仍能基于 L1 上的状态根发起退出,代价是成本高于纯外部 DA 方案。
对高频小额交易的应用,DA 成本往往比结算成本更敏感,因此更倾向外部 DA;对低频高价值操作,信任假设的优先级高于成本,更倾向以太坊 blob。这种按业务分层的选择,是模块化栈最实用的落地方式。
7. Rollup 即服务与一键发链
7.1 RaaS 平台与一键发链
Rollup 即服务(RaaS)把发链流程产品化:选择执行框架、配置 DA 层、选择结算层、设置排序器模式,然后一键部署。常见组合是 OP Stack 或 Arbitrum Orbit 作为执行框架,Celestia 或 EigenDA 作为 DA,以太坊作为结算层。
RaaS 降低了发链门槛,也带来新的中心化风险。默认配置往往包含由服务商运营的排序器与升级多签,如果团队不主动更换密钥或部署治理合约,链的实际控制权可能仍在服务商手中。
RaaS 的另一个隐性成本是退出。如果链的配置深度绑定服务商的专有组件,迁移到自建基础设施时需要重建排序、桥接与证明系统,迁移成本可能高于当初省下的研发投入。
评估 RaaS 服务商时,应该把「退出路径」作为一等指标:配置是否开源、合约是否可独立部署、数据是否可导出、以及迁移时是否需要服务商配合。没有退出路径的一键发链,本质上只是租用。
7.2 运维与成本结构
一条 Rollup 的持续成本主要包括:DA 费用、L1 结算的 calldata 与验证费用、排序器服务器、证明生成(有效性证明场景下尤其昂贵)以及跨链桥的流动性维护。RaaS 平台通常按月收取基础设施费,DA 与结算费用则按用量结算。
// 发链后第一件该做的事:确认升级权限在谁手里
contract ProxyAdmin {
address public owner;
function upgrade(address impl) external {
require(msg.sender == owner, "not owner");
// 若 owner 是服务商多签,链并不真正属于你
}
}
8. 共享排序与跨 Rollup 互操作
8.1 共享排序器
排序器决定交易的顺序,因而掌握 MEV 的分配权。共享排序器让多条 Rollup 共用同一套排序基础设施,既摊薄成本,又为跨链原子操作提供统一的时间线。如果两条链由同一个排序器网络排序,理论上可以在同一批次内完成跨链交换。
共享排序的代价是引入了额外的信任方。排序器可以延迟或重排交易以提取价值,除非有强制包含机制保证用户可以直接向 L1 提交交易。
强制包含的实现通常是「延迟窗口」:用户把交易提交到 L1 的收件箱合约,若排序器在 N 个区块内没有包含它,任何人都可以强制其进入序列。这保证了抗审查性,但也意味着排序器必须在延迟窗口内响应,否则会失去排序费。
共享排序器的经济模型也值得推敲:它靠排序费与 MEV 返利获利,若多条链的交易量不足以覆盖运营成本,排序器就可能退出或合并,导致链重新退回到单排序器模式。
8.2 跨 Rollup 互操作与原子性
跨 Rollup 消息传递通常依赖轻客户端证明或乐观验证,延迟从几分钟到数小时不等。要在多条链之间实现原子性,需要共享的结算层或共享排序器作为协调点,否则只能退化为「先锁定、后释放」的两阶段流程。
工程上更现实的做法是把跨链交互限制在可容忍延迟的场景,对高价值操作使用共享结算层提供的原子交换,而不是试图在任意两条独立 Rollup 之间实现强原子性。
跨链桥的流动性也是一类隐性风险:如果某条链的桥储备被单笔大额提款抽干,用户的资产会被延迟数小时甚至数天。为桥设置提款限额与延迟,是模块化栈中常见的最后一道防线。
跨链消息的验证方式也分档:轻客户端验证最安全但成本最高,多签见证最便宜但信任最集中,乐观验证介于两者之间。选择哪种方式,取决于单笔跨链金额与团队对信任方的容忍度。
9. 信任假设与风险矩阵
9.1 信任假设矩阵
| 组件 | 信任对象 | 作恶后果 | 缓解手段 |
|---|---|---|---|
| 排序器 | 运营方 | 审查或重排交易 | 强制包含、去中心化排序 |
| DA 层 | DA 验证者集 | 数据不可用导致资产冻结 | 采样验证、DA 逃逸舱 |
| 结算层 | 结算链共识 | 状态根被错误裁定 | 欺诈或有效性证明 |
| 桥接合约 | 多签或验证者 | 资产被盗或冻结 | 延迟提款、分级多签 |
| 升级权限 | 治理多签 | 合约被恶意升级 | 时间锁、不可变合约 |
9.2 攻击面与常见陷阱
最常见的陷阱是把「成本低」误读为「安全等价」。使用外部 DA 层并不继承以太坊的安全,它只是把安全预算转移到了另一个验证者集。第二个陷阱是忽略排序器的强制包含能力:没有强制包含,用户无法绕过审查,抗审查性只是口号。
还有一个容易被忽略的假设是「至少一个诚实方在线」。乐观 Rollup 的欺诈证明依赖有人真的去挑战,如果挑战的收益低于成本,或者所有人都认为别人会去挑战,作恶就可能无人制止。这种协调问题在小额链上尤其突出。
第三个陷阱是升级权限。大量 Rollup 部署后仍由部署者多签控制代理合约,一旦私钥泄露,整条链的资产可被瞬间转移。发链时必须显式检查代理管理员的 owner 是谁,并设置时间锁。
第四个陷阱是数据承诺与数据内容不一致。如果排序器提交的 dataHash 与 DA 层实际发布的数据不匹配,用户无法重建状态,而合约层面可能看不出异常。桥接合约应当在挑战期内提供验证数据一致性的入口,并对不一致设置罚则。
// EIP-4337 风格的账户抽象可缓解部分密钥风险
interface IEntryPoint {
function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external;
}
10. 工程实践与选型建议
10.1 选型决策树
先回答三个问题:应用是否需要自定义执行环境、可接受的单笔交易成本上限、以及团队能否承担独立的安全审计。如果只需要 EVM 兼容且成本敏感,选择成熟的 RaaS 组合并用外部 DA 降低费用;如果需要定制虚拟机或特殊 gas 模型,则准备自建执行层并独立设计证明系统。
DA 层的选择取决于信任偏好。追求与以太坊一致的安全边界就使用 blob,接受独立验证者集以换取成本优势则选择 Celestia 或 EigenDA,并在桥接合约中实现数据不可用时的逃逸路径。
结算层的选择则取决于对最终性时间的要求。乐观证明的提款周期通常为 7 天,有效性证明可以缩短到小时级,但生成成本更高。若应用需要快速跨链,就要么接受长提款期,要么引入第三方流动性提供者并承担其信任假设。
10.2 工程实践清单
发链后立即执行:把代理管理员移交到自己的多签并加时间锁、关闭服务商的默认升级权限、验证排序器的强制包含入口是否可用、对 DA 承诺做抽样验证、为跨链桥设置提款延迟与限额。上线前用 Foundry 对桥接合约做完整的模糊测试与不变量测试,覆盖数据不可用与排序器作恶两类极端场景。
成本优化上,优先提高批次压缩率与提交频率的平衡点:批次越大单笔成本越低,但延迟越高。用 EIP-4844 的 blob 提交替代 calldata 可以显著降低成本,但要注意 blob 有独立的定价市场与过期机制。
监控与告警同样不可省略:排序器存活与延迟、批次提交间隔、DA 提交成功率、桥储备余额、以及升级权限是否被意外变更。这些指标中的任何一个异常,都可能在数小时内演变成资产冻结事件。把可观测性做在发链之前,而不是事故之后。
最后是文档与演练。把「DA 层失效时如何触发逃逸」「排序器下线时用户如何强制包含」「升级多签如何轮换」写成可执行的手册,并定期演练。模块化栈的故障模式分散在多个组件,只有把处置流程固化,才能在真实事故中保持响应速度。
工具链上也要留出退路:为排序器、DA 适配器与桥接合约分别准备可替换的接口层,避免把某个服务商的 SDK 直接耦合进核心业务逻辑。当需要从 blob 切换到独立 DA、或从自建排序器切换到共享排序时,接口层能让迁移只改配置而不改合约。
10.3 速查表与一句话记忆
| 层次 | 职责 | 代表实现 | 关键风险 |
|---|---|---|---|
| 执行层 | 状态转换与虚拟机 | OP Stack、Arbitrum Nitro | 排序器审查 |
| 结算层 | 争议解决与最终性 | 以太坊 L1、共享结算 | 状态根误裁 |
| DA 层 | 数据发布与采样验证 | Celestia、EigenDA、EIP-4844 blob | 数据不可用 |
| 排序层 | 交易排序与 MEV 分配 | 共享排序器 | 重排与提取价值 |
| 桥接层 | 资产跨链转移 | 规范桥、第三方桥 | 多签被盗 |
一句话记忆:模块化不是免费的可扩展性,它把单链的整体信任拆成若干显式合同,每一层都要单独审计、单独定价、单独承担作恶后果。
延伸阅读
- /blockchain-data-availability/ — 数据可用性的定义、采样与逃逸机制
- /blockchain-rollup-architecture/ — Rollup 的批次提交与证明系统结构
- /layer2-scaling/ — L2 扩容路线的整体对比
- /blockchain-staking-restaking/ — 再质押的经济安全与罚没条件
- /consensus-mechanisms/ — 共识机制与最终性的基础
- Web3 区块链专题 — 区块链 Web3 专题
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。