Optimism 安全审计全景:从 Rollup 到 Cannon 的历次安全评审清单与源码实证
Optimism 安全审计全景从 Rollup 到 Cannon 的历次安全评审清单与源码实证【免费下载链接】optimismOptimism is Ethereum, scaled.项目地址: https://gitcode.com/GitHub_Trending/op/optimism自 2020 年 10 月起Optimism本仓库op/optimism围绕其智能合约、Rollup 协议与故障证明Fault Proofs虚拟机持续引入第三方安全审计并将全部报告归档于 docs/security-reviews 目录。本文以这份安全评审清单为主体逐条梳理审计的时间线、审计方、审查范围、对应代码提交与发布版本并结合仓库内唯一一份 Markdown 格式的审计报告——2024 年 10 月 3DOC 对 CannonF_GETFD系统调用的审计——以及 cannon 与 packages/contracts-bedrock/src 的源码实现讲清这些审计审了什么、发现了什么、落在哪一行代码上。读完本文你将掌握 Optimism 安全治理的完整脉络学会按版本定位审计报告并理解审计结论与源码实现之间的对应关系。审计清单总览六年四十余次安全评审原文档明确说明以下清单罗列了历次安全审计每一次审计聚焦代码库的不同部分、发生在不同的时间点具体细节请以对应报告为准。清单共收录 2020-10 至 2026-08 期间的 40 余条审计记录涵盖三个维度审计时间与审计方从早期 Trail of Bits、OpenZeppelin到中期的 Spearbit、Sherlock 竞赛再到近年以 Cantina 平台为主的竞赛式审计聚焦范围每份报告都标注了明确的审查对象精确到单个合约文件或目录版本锚点多数条目给出审计基准的 commit 哈希与对应的op-contracts或 op-program 等发布版本便于回放审计时的代码状态。下表为原清单的完整内容报告链接均已转换为仓库根目录下的相对路径DateReviewerFocus and ScopeReport Link (仓库内相对路径)CommitSubsequent Release2020-10Trail of BitsRollup2020_10-TrailOfBits.pdf2020-11DapphubECDSA Wallet2020_11-Dapphub-ECDSA_Wallet.pdf2021-03OpenZeppelinOVM and Rollup2021_03-OVM_and_Rollup-OpenZeppelin.pdf2021-03ConsenSys DiligenceSafety Checker2021_03-SafetyChecker-ConsenSysDiligence.pdf2022-05ZeppelinBedrock Contracts2022_05-Bedrock_Contracts-Zeppelin.pdf2022-05Trail of BitsOpNode2022_05-OpNode-TrailOfBits.pdf2022-08Sigma PrimeBedrock GoLang2022_08-Bedrock_GoLang-SigmaPrime.pdf2022-09ZeppelinBedrock and Periphery: All contracts inpackages/contracts-bedrock/contracts2022_09-Bedrock_and_Periphery-Zeppelin.pdf93d3bd411a8ae75702539ac9c5fe00bad21d4104op-contracts/v1.0.02022-10SpearbitDrippie:Drippie.sol2022_10-Drippie-Spearbit.pdf2a7be367634f147736f960eb2f38a77291cdfcadop-contracts/v1.0.02022-11Trail of BitsInvariant Testing:OptimismPortal.sol2022_11-Invariant_Testing-TrailOfBits.pdfb31d35b67755479645dd150e7cc8c6710f0b4a56op-contracts/v1.0.02022-12Runtime VerificationDeposit Transaction:OptimismPortal.sol2022_12-DepositTransaction-RuntimeVerification.pdfop-contracts/v1.0.02023-01Trail of BitsBedrock Updates:SystemConfig.sol2023_01-Bedrock_Updates-TrailOfBits.pdfee96ff8585699b054c95c6ff4a2411ee9fedcc87op-contracts/v1.0.02023-01SherlockBedrock: All contracts inpackages/contracts-bedrock/srcSherlock Bedrock Contest竞赛详情与仓库收录于 Sherlock 平台非本仓库文件3f4b3c328153a8aa03611158b6984d624b17c1d9op-contracts/v1.0.02023-03SherlockBedrock Fixes: All contracts inpackages/contracts-bedrock/srcSherlock Bedrock Contest: Fix Review竞赛详情收录于 Sherlock 平台9b9f78c6613c6ee53b93ca43c71bb74479f4b975op-contracts/v1.0.02023-12TrustSuperchain Config Upgrade:SuperchainConfig.sol、L1CrossDomainMessenger.sol、L1ERC721Bridge.sol、L1StandardBridge.sol、OptimismPortal.sol、CrossDomainMessenger.sol、ERC721Bridge.sol、StandardBridge.sol2023_12_SuperchainConfigUpgrade_Trust.pdfd1651bb22645ebd41ac4bb2ab4786f9a56fc1003op-contracts/v1.2.02024-02Runtime VerificationPausabilityKontrol VerificationKontrol 形式化验证项目说明收录于packages/contracts-bedrock/test/kontrol/README.md2024-02CantinaMCP L1:OptimismPortal.sol、L1CrossDomainMessenger.sol、L1StandardBridge.sol、L1ERC721Bridge.sol、OptimismMintableERC20Factory.sol、L2OutputOracle.sol、SystemConfig.sol2024_02-MCP_L1-Cantina.pdfe6ef3a900c42c8722e72c2e2314027f85d12ced5op-contracts/v1.3.02024-03SherlockFault ProofsSherlock Optimism Fault Proofs Contest竞赛详情收录于 Sherlock 平台2024-08CantinaFault proof MIPS:MIPS.sol2024_08-Fault-Proofs-MIPS_Cantina.pdf71b93116738ee98c9f8713b1a5dfe626ce06c1b2op-contracts/v1.4.02024-08SpearbitFault proof no-MIPS: All contracts in thepackages/contracts-bedrock/src/disputedirectory2024_08-Fault-Proofs-No-MIPS_Spearbit.pdf1f7081798ce2d49b8643514663d10681cb853a3dop-contracts/v1.6.02024-103Doc SecurityFault proof MIPS:MIPS.sol2024_10-Cannon-FGETFD-3DocSecurity.md52d0e60c16498ad4efec8798e3fc1b36b13f46a2op-contracts/v1.8.02024-12MiloTruck (independent)DeputyPauseModule2024_12-DPM-MiloTruck.pdf2f17e6b67c61de5d8073d556272796d201bc740b2024-12Radiant LabsDeputyPauseModule2024_12-DPM-RadiantLabs.pdf2f17e6b67c61de5d8073d556272796d201bc740b2025-01Offbeat LabsIncident Response Improvements2025_01-IRI-OffbeatLabs.pdf984bae9146398a2997ec13757bfe2438ca8f92eb2025-01Spearbit64-bit Multithreaded Cannon:MIPS64.sol2025_01-MT-Cannon-Spearbit.pdfcc2715c3d6ebef374451b598f48980ad817e0a0e2025-01Coinbase Protocol SecurityMulti-thread 64-bit Cannon2025_01-MT-Cannon-Base.pdfb8c011f18c79d735e01168345fc1c6f02fac584f2025-02SpearbitUpgrade 132025_02-Upgrade13-Spearbit.pdf7d6d15437b7580b022f4c8c1ea9c0cd8d2e587e1op-contracts/v2.0.02025-03SpearbitInterop Contracts2025_03-Interop-Contracts-Spearbit.pdf6c80f23ab3074b5c66ff06e390ae2448bd4d22402025-03WonderlandInterop Portal Contracts (u16)2025_03-Interop-Portal-Wonderland.pdf9df1fc15d0bf0dc9464db249ce06424607d5f399op-contracts/v4.0.02025-04Aleph_v (independent)op-program and op-challenger blob preimage handling2025_04-op-program-blob-handling-aleph_v.pdf08d81d98237a3077fbc13fcd4b70f2e8d2e14115op-program/v1.6.02025-04Cantina (contest)Interop Portal Contracts (u16)2025_04-Interop-Portal-Cantina.pdfe4b921c9dbf8cd3a8db20ef4f15e0e2aa495fcc3op-contracts/v4.0.02025-05SpearbitInterop Portal Contracts (u16)2025_05-Interop-Portal-Spearbit.pdf7cd84fed9554193c2dcd683e1ff2d0e2605448f6op-contracts/v4.0.02025-05Coinbase Protocol SecurityCannon updates to support Go 1.23 and Kona2025_05-Cannon-Go-Updates-Coinbase.pdf4c68444bc9b130e892b52cacf67b31f0424fb6d02025-06SpearbitCannon Go 1.23 support fix review2025_06-Spearbit-Cannon-fix-review.pdfffe3d5fed05cabf46a67ea00627a0959c0caa0b5op-contracts/v4.0.02025-06Radiant LabsCannon Go 1.24 support2025_06-Cannon-3DOC.pdf689111fca9a10e6670ba0b5c7f1a549a212c855b2025-05SpearbitUpgrade 162025_05-Upgrade16-Spearbit.pdf另有审计方托管版本见原文档注释54c19f6acb7a6d3505f884bae601733d3d54a3a6op-contracts/v4.0.02025-07SpearbitVerifyOPCM2025_07-VerifyOPCM-Spearbit.pdf另有审计方托管版本见原文档注释731280c6fc0ad184d252e0fb1d0ad12b5f59fd60op-contracts/v4.0.02025-09SpearbitU16a2025_09-U16a-Spearbit.pdf475801690f7a451469ee4da87b5fe3c54c92f372op-contracts/v4.1.02025-10SpearbitU172025_10-U17-Spearbit.pdfaeed7033f7f739d8ecd4bd70a42ff09013bbc91eop-contracts/v5.0.02025-10SpearbitRevenue sharing and FeeVaults2025_10-Rev-Sharing-Spearbit.pdf 与 2025_11-Rev-Sharing-Contracts-Upgrader.pdff1fcd96406d895f37c2d1a422d50ea7dbd03a491op-contracts/v5.2.0l2-fee-splitter-contracts2025-11SpearbitSafer Safes2025_11-SaferSafes-Spearbit.pdfcb54822c5e18925498f48d8677b71992bf402631op-safe-contracts/v1.0.02025-11SpearbitCustom Gas Token2025_11-Custom-Gas-Token-Spearbit.pdf1f888ede1940fce20f71db89fc13039fdd96757eop-contracts/v6.0.02026-01CantinaUpgrade 182026_01-U18-Cantina.pdf87d406db86907833f75d5c8fb26ade3dcb85eb41op-contracts/v6.0.02026-03CantinaPolicyEngineStaking Contract2026_03-PolicyEngineStaking-Cantina.pdf13c74c6d0855caf59b575ccf5fbf74ffe104cb4f2026-03CantinaKona2026_03-Kona-Cantina.pdf86910c9112437bbb849eca28961f813c5450e103Kona 仓库 commit2026-05CantinaUpgrade 192026_05-U19-Cantina.pdf7cbcb58ffb7322343f0ed6b926f65bea7630ce3eop-contracts/v7.0.02026-06CantinaOPCMv2:OPContractsManagerV2.sol、OPContractsManagerMigrator.sol、OPContractsManagerContainer.sol、OPContractsManagerUtils.sol、OPContractsManagerUtilsCaller.sol、VerifyOPCM.s.sol2026_06-OPCMv2-Cantina.pdfa00b39720a3f61276d2fa3991abfb672c9dd35ce2026-06CantinaInterop L2 Contracts (re-review)2026_06-Interop-L2-Contracts.pdffa9974a2cd38d9e7633a12f9024d52f41de55f862026-08CantinaUpgrade 202026_08-U20-Cantina.pdf7799a2464f23b4e19abd5e29843545f960e677beop-contracts/v8.0.0原文档末尾附有一条维护性注释为降低对仓库维护者自觉的依赖应尽可能在可能的情况下附上审计方自行托管的报告链接原文注于清单末尾这也是为何部分条目同时给出审计方托管版本的原因。审计主题的时间演进从 Rollup 到故障证明再到互操作性将上表按主题归并可以清晰地看到 Optimism 安全工作的演进主线早期 Rollup 与 OVM 时代2020-2021Trail of Bits 审计 Rollup 协议、Dapphub 审计 ECDSA Wallet、OpenZeppelin 审计 OVM 与 Rollup、ConsenSys Diligence 审计 Safety Checker。这一阶段针对的是 Bedrock 之前的 OVM 架构。Bedrock 重构期2022-2023Zeppelin 与 Sigma Prime 分别覆盖 Bedrock 合约与 Bedrock GoLang 客户端Trail of Bits 针对OptimismPortal.sol做不变量测试、针对SystemConfig.sol做更新审计Runtime Verification 对存款交易Deposit Transaction做形式化验证Sherlock 以竞赛形式两次覆盖packages/contracts-bedrock/src全部合约Bedrock 及 Bedrock Fixes。这一阶段的成果最终汇入op-contracts/v1.0.0。故障证明Fault Proofs时代2024Sherlock 竞赛审计 Fault ProofsCantina 审计 MIPS 版故障证明MIPS.solSpearbit 审计 no-MIPS 的packages/contracts-bedrock/src/dispute目录3DOC 审计 Cannon 的F_GETFD支持详见下文专节。多线程 Cannon 与互操作性2025Spearbit 与 Coinbase Protocol Security 先后审计 64 位多线程 CannonMIPS64.solWonderland、Cantina、Spearbit 三次审计 Interop Portal 合约u16Aleph_v 审计 op-program/op-challenger 的 blob preimage 处理以及贯穿全年的 Upgrade 13/16/17 等升级审计。合约管理层与平台化2025-2026Revenue Sharing/FeeVaults、Safer Safes、Custom Gas Token、OPCMv2、PolicyEngineStaking、Interop L2 合约复审以及 Upgrade 18/19/20均以op-contracts新主版本v5/v6/v7/v8作为发布锚点。这一演进与仓库源码目录结构高度吻合当前 packages/contracts-bedrock/src/L1 存放OptimismPortal2.sol、SuperchainConfig.sol、SystemConfig.sol等 L1 核心合约src/dispute 存放FaultDisputeGame.sol、PermissionedDisputeGame.sol等故障证明游戏合约src/cannon 存放MIPS64.sol与PreimageOracle.sol。审计范围的收缩与转移正对应着这些目录的增删与重构。审计方与审计形式的多样性清单中的审计方可分为三类每一类的方法论各有侧重专职安全公司Trail of Bits、OpenZeppelin、Sigma Prime、Spearbit、Radiant Labs、Wonderland、Coinbase Protocol Security、3DOC Security。这类审计通常采用人工代码走查 不变量测试/形式化工具组合交付 PDF 报告。竞赛平台Sherlock2023-01、2023-03、2024-03 三次竞赛与 Cantina2024 年起多次竞赛。竞赛模式由平台方组织审计者竞标式审查报告与仓库链接收录于平台侧本仓库清单中仅以文字描述标注竞赛名称。独立研究者Trust、MiloTruck、Aleph_v、Offbeat Labs 等以个人/小团队身份介入聚焦特定模块如 DeputyPauseModule、blob preimage 处理、事件响应改进。值得注意的是2024-02 的 Pausability 审计采用Kontrol 形式化验证相关说明收录于packages/contracts-bedrock/test/kontrol/README.md2022-11 的 Trail of Bits 审计则专门针对OptimismPortal.sol做不变量测试Invariant Testing——这两条说明 Optimism 的安全工作并不局限于静态审查还覆盖了形式化方法与属性测试。审计、代码提交与发布版本的锚定关系清单中最有工程价值的信息是每份报告的Commit与Subsequent Release两列其含义是Commit本次审计所基于的确切代码提交。例如 2022-09 Zeppelin 审计 Bedrock and Periphery 的基准是93d3bd411a8ae75702539ac9c5fe00bad21d4104。需要复现审计现场时可git checkout到该提交后对照报告逐条核对。Subsequent Release该审计完成后相关修复与合入随后的哪个发布版本上线。例如 2024-10 的 3DOC Cannon 审计对应的发布为op-contracts/v1.8.02025-10 的 U17 审计对应op-contracts/v5.0.02026-08 的 Upgrade 20 审计对应op-contracts/v8.0.0。由此可以推导出版本间的安全基线某个op-contracts版本是否涵盖某次审计的修复只需将该版本的 tag 与清单中 Subsequent Release 列交叉比对即可。例如涉及 Interop Portalu16的三份报告Wonderland、Cantina、Spearbit全部指向op-contracts/v4.0.0说明 u16 的互操作性功能是经过三方独立审计后随 v4.0.0 交付的。深度案例CannonF_GETFD系统调用审计及其源码实证在所有清单条目中2024_10-Cannon-FGETFD-3DocSecurity.md 是唯一一份以 Markdown 形式存放的报告也最适合作为报告 → 源码对照学习的样本。该报告由 3DOC Security3DocSec于 2024 年 10 月 2-3 日完成审查对象是 PR #12050 引入的MIPS VM 对F_GETFD系统调用的支持审计基准 commit 为52d0e60c16498ad4efec8798e3fc1b36b13f46a2。审计范围一次 VM 版本升级报告指出该 PR 的核心变更是为 Cannon MIPS VM 增加F_GETFD系统调用支持同时伴随 VM 版本号的提升。这直接对应本仓库 cannon/mipsevm/versions/version.go 中声明的状态版本枚举该变更引入了VersionSingleThreaded2注释明确写道based on VersionSingleThreaded with the addition of support for fcntl(F_GETFD) syscall, tagged at cannon/v1.4.0。至此 Cannon 存在三个版本VersionSingleThreaded、VersionSingleThreaded2与VersionMultiThreaded——这与报告原文的描述完全一致。从源码可见当前版本枚举已演进到 9 个VersionSingleThreaded到VersionMultiThreaded64_v5其中VersionSingleThreaded对应 op-contracts/v1.6.0 中的MIPS.solVersionSingleThreaded2即本次审计引入的、支持fcntl(F_GETFD)的最新 32 位单线程 VMGetCurrentVersion()返回VersionMultiThreaded64_v5即当前默认的 64 位多线程版本。F_GETFD的底层实现F_GETFD的处理逻辑落在 cannon/mipsevm/exec/mips_syscalls.go 的HandleSysFcntl函数中。以 32 位单线程 VM 的实现为例其语义为func HandleSysFcntl(a0, a1 Word) (v0, v1 Word) { // args: a0 fd, a1 cmd v1 Word(0) if a1 1 { // F_GETFD: get file descriptor flags switch a0 { case FdStdin, FdStdout, FdStderr, FdPreimageRead, FdHintRead, FdPreimageWrite, FdHintWrite: v0 0 // No flags set default: v0 MipsEBADF v1 SysErrorSignal } } else if a1 3 { // F_GETFL: get file status flags switch a0 { case FdStdin, FdPreimageRead, FdHintRead: v0 0 // O_RDONLY case FdStdout, FdStderr, FdPreimageWrite, FdHintWrite: v0 1 // O_WRONLY default: v0 MipsEBADF v1 SysErrorSignal } } else { v0 MipsEINVAL // cmd not recognized by this kernel v1 SysErrorSignal } return v0, v1 }要点解读F_GETFDcmd1对标准输入输出stdin/stdout/stderr与 preimage/hint 读写通道返回v00无特殊标志对未知 fd 返回MipsEBADF并置错误信号F_GETFLcmd3区分只读通道O_RDONLY与只写通道O_WRONLY同样对未知 fd 报EBADF其他 cmd统一返回MipsEINVAL即该内核不识别此命令。这一实现同时存在于 64 位多线程 VM 中cannon/mipsevm/multithreaded/mips.go 与 cannon/mipsevm/arch/arch64.go 中均有对应处理并在 cannon/mipsevm/tests/evm_multithreaded64_test.go 等测试中通过arch.SysFcntl进入 EVM 一致性测试矩阵。唯一发现一个被审计方自己推翻的低危问题这份报告的 Summary 表显示High/Medium/Low/Information 四个等级均为 0 个确认发现唯一的Low Risk条目实际上是标为[False positive]误报的讨论项标题为Op-challenger Docker image does not include Cannon embeds。该条目的推理链条值得完整理解op-challenger 通过配置项VmBin调用 Cannon VM本仓库 op-challenger/config/config.go 中Cannon/CannonKona两类 VM 配置均含VmBin与VmType而VmBin指向的是multicannon多路复用器multicannon会从输入状态中读取 State Version再据此选择正确的 Cannon VM 实现报告原文指向cannon/multicannon/exec.go:L81附近的版本分派逻辑审计方用docker run ... find / -name embeds检查make golang-docker产出的 op-challenger 镜像发现文件系统中没有embeds目录却又能执行cannon实际是 multicannon于是怀疑 Docker 部署的 challenger 无法正常工作关键转折Optimism 团队inphi回应指出cannon-2 实现已嵌入 cannon CLI 二进制内部embeds并非 Docker 文件系统中的实体文件而是 Goembed机制提供的内嵌文件系统。这一回应与本仓库源码完全吻合cannon/multicannon/exec.go 中通过//go:embed all:embeds将embeds目录编译进二进制ExecuteCannon运行时先用vmFS.ReadFile读取对应版本vmFilename(ver)返回embeds/cannon-version的 VM 程序再extractTempFile解压到临时目录并赋可执行权限0755后执行。也就是说cannon/multicannon/embeds目录在源码树中只保留占位文件目录当前为空真正的内容以内嵌文件系统形式随二进制分发。审计方随后承认那些内容包含在嵌入式文件系统中我漏看了——这也是该条目被判定为误报、整体审计结论为 0 发现的原因。报告给出的建议将embeds目录纳入 Docker 构建链、用 e2e 测试覆盖 Docker 镜像场景也随之失去必要性。这个案例是理解审计报告应结合源码核实的极佳样本安全报告的结论强依赖审计时的代码形态而 Go 的embed机制正是此类目录看似缺失实则内嵌的典型来源。如何按需使用这份安全审计清单在实际工程与研究中可按以下方式使用 docs/security-reviews/README.md按主题检索关注某个模块如OptimismPortal.sol、MIPS64.sol、Interop 合约时用清单的 Focus and Scope 列定位到相关审计再打开对应报告 PDF/MD 查看细节。例如关注存款交易可读 2022_12-DepositTransaction-RuntimeVerification.pdf关注故障证明可读 2024_08-Fault-Proofs-No-MIPS_Spearbit.pdf。按版本回溯以 Subsequent Release 列为索引确定某个op-contracts版本如 v1.0.0、v4.0.0、v8.0.0上线前经历了哪些审计从而评估该版本的安全基线与遗留风险。复现审计现场使用 Commit 列的哈希检出对应提交结合报告逐条核对修复是否合入、是否引入回归。所有报告文件均可直接在仓库的 docs/security-reviews 目录下阅读无需外部资源。结语从 2020 年的 Rollup 审计到 2026 年的 Upgrade 20docs/security-reviews/README.md 以一张表记录了 Optimism 六年来的完整安全治理轨迹审计对象从 L1 核心合约逐步扩展到故障证明 VM、互操作协议与合约管理框架审计方式从单一公司审计演进为公司审计 平台竞赛 独立研究者 形式化验证的混合矩阵并且几乎每一次重要功能上线前都有对应的审计锚点。结合 cannon、packages/contracts-bedrock/src 与 op-challenger 的源码读者可以将每一行清单条目映射到具体的函数、目录与版本真正把审过变成可验证的工程事实。【免费下载链接】optimismOptimism is Ethereum, scaled.项目地址: https://gitcode.com/GitHub_Trending/op/optimism创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →