尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Cumulus Runtime 升级机制深度揭秘:Parachain 如何与 Relay Chain 协同完成 WASM 升级
Cumulus Runtime 升级机制深度揭秘Parachain 如何与 Relay Chain 协同完成 WASM 升级【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulusCumulus 是构建 Substrate Parachain平行链的核心框架其 Runtime 升级机制是 Parachain 开发者必须掌握的关键能力Parachain 无法像独立链一样热替换WASM Runtime而是必须与 Relay Chain中继链严格协同通过提交代码 → 中继链确认 → GoAhead 信号 → 写入 :code的完整流程完成安全升级。本文将完整拆解这套机制的 5 个关键步骤、核心存储字段与安全保障设计帮助新手快速理解 Parachain Runtime 升级的底层原理。为什么 Parachain 的 Runtime 升级不一样在独立链上调用sudo_set_code提交新的 WASM 二进制下一区块即可生效。但 Parachain 的 Runtime也称Validation Function验证函数会被 Relay Chain 的验证节点拿去校验候选区块Candidate因此升级必须满足一个铁律Relay Chain 上的验证函数 与 Parachain 状态中的 Runtime必须在同一个 Relay 区块高度同步替换。如果两边不同步可能出现Parachain 已用新 Runtime 出块而 Relay Chain 仍用旧 Runtime 校验的致命分叉。Cumulus 的解决方案位于 pallets/parachain-system/src/lib.rs 中的cumulus-pallet-parachain-system它承担了文档中明确列出的职责之一coordinating upgrades with the Relay Chain与 Relay Chain 协调升级。升级流程全景图5 个关键步骤步骤 1在 Parachain 上提交新 WASM 代码Parachain 的frame_system的OnSetCode被替换为ParachainSetCode见ParachainSetCode的SetCodetrait 实现位于 pallets/parachain-system/src/lib.rs它不会直接写入代码而是调用schedule_code_upgrade做三重检查检查项失败错误含义Relay Chain 未下达升级禁令ProhibitedByPolkadotRelay Chain 通过UpgradeRestrictionSignal禁止了本次升级没有进行中的升级OverlappingUpgrades已有一个PendingValidationCode等待执行代码体积不超过max_code_sizeTooBigWASM 编译产物超出 Relay Chain 允许的体积上限此外Cumulus 还支持两阶段授权升级适合无法直接把完整 WASM 放入链上交易的场景Root 调用authorize_upgrade(code_hash, check_version)仅登记新 Runtime 的哈希任何人调用enact_authorized_upgrade(code)提交完整代码前像校验哈希一致若check_versiontrue还会通过can_set_code校验 spec name 未变且 spec version 递增通过后才真正调度升级。该交易还支持ValidateUnsigned验证允许以无签名交易提交。检查通过后触发ValidationFunctionStored事件升级进入已存储状态。步骤 2双份写入——同时通知 Relay Chain 与自身schedule_code_upgrade的核心是两处同步写入notify_polkadot_of_pending_upgrade(code)写入NewValidationCode存储并置位DidSetValidationCode。Collator 在构建候选区块时会通过collect_collation_info读取NewValidationCode并填入CollationInfo.new_validation_code最终由 client/collator/src/service.rs 随候选区块一起提交给 Relay Chain——这就是通知 Polkadot的实际通道。PendingValidationCode::put(code)在 Parachain 本地暂存新代码等待 Relay Chain 的许可才会真正替换 Runtime。步骤 3Relay Chain 排期与冷却期Relay Chain 收到携带新验证函数的候选区块后会按其自身的升级排期包含validation_upgrade_delay延迟期与validation_upgrade_cooldown冷却期见HostConfiguration字段在指定 Relay 区块执行升级。在这段窗口期内其他 Parachain 的升级可能被UpgradeRestriction信号暂时禁止防止升级风暴你的schedule_code_upgrade会因ProhibitedByPolkadot直接失败。步骤 4等待 GoAhead 信号自动生效每个 Parachain 区块都包含set_validation_data固有交易inherent它携带 Relay 父区块的状态证明。在 pallets/parachain-system/src/lib.rs 的该交易处理逻辑中Runtime 会从状态证明中读取UpgradeGoAhead信号GoAhead取出PendingValidationCode调用put_parachain_code将新 WASM 写入存储中的:code键sp_core::storage::well_known_keys::CODE触发on_validation_code_applied钩子并广播ValidationFunctionApplied { relay_chain_block_num }事件——从下一个区块起新 Runtime 正式生效Abort删除PendingValidationCode广播ValidationFunctionDiscarded事件升级被取消无信号维持等待状态。on_finalize中还会清理UpgradeGoAhead与UpgradeRestrictionSignal标记为 ephemeral不会持久化保证信号不跨区块残留。步骤 5验证升级是否成功通过事件链即可全程审计UpgradeAuthorized → ValidationFunctionStored → ValidationFunctionApplied若在等待期被 Relay Chain 叫停则看到ValidationFunctionDiscarded。相关存储字段还包括LastRelayChainBlockNumber、HostConfiguration等均可通过链上查询接口核对。核心存储字段速查表存储字段作用NewValidationCode通知 Collator/Relay Chain 的新代码每区块开始时清理PendingValidationCode本地暂存的待生效代码收到 GoAhead 后写入:codeUpgradeGoAheadRelay Chain 放行/中止升级的镜像信号临时值UpgradeRestrictionSignalRelay Chain 的升级禁令镜像临时值AuthorizedUpgrade两阶段授权升级中登记的code_hash与check_versionDidSetValidationCode标记本区块是否已通知 Relay Chain 有待升级代码存储版本的迁移逻辑如LastUpgrade字段被信号机制取代的历史见 pallets/parachain-system/src/migration.rs。实战验证Zombienet 自动化测试 项目内置了完整的升级端到端测试测试脚本 zombienet/tests/0004-runtime_upgrade.zndsl 的执行流程非常直观注册 Parachain → 出块 → 用 spec version 递增后的 WASM 执行 upgrade → 确认链继续正常出块并配合 zombienet/tests/runtime_upgrade.js 校验升级结果。这为新手提供了可复现的升级演练环境。常见失败原因与排查现象原因TooBig新 Runtime 编译产物超过 Relay Chain 的max_code_size需精简依赖OverlappingUpgrades上一次升级尚未结束未收到 GoAhead/Abort先等待信号落地ProhibitedByPolkadotRelay Chain 处于升级限制窗口稍后重试Unauthorizedenact_authorized_upgrade提交的代码哈希与authorize_upgrade登记的不一致总结Cumulus 的 Runtime 升级机制用本地暂存 双端同步 信号确认三步曲优雅解决了 Parachain 与 Relay Chain 的升级一致性问题✅schedule_code_upgrade统一入口 三重校验杜绝非法升级✅NewValidationCode/PendingValidationCode双存储分别面向 Relay Chain 与自身✅ GoAhead/Abort 信号驱动保证同一 Relay 区块高度原子化切换✅ 全程事件可审计ValidationFunctionStored→ValidationFunctionApplied支持两阶段授权升级降低提交风险。理解这套机制后你就能安全、可验证地为 Parachain 规划每一次 WASM Runtime 升级了。【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

用SimuPy BlockDiagram做闭环控制仿真:PID控制器手把手教程

用SimuPy BlockDiagram做闭环控制仿真:PID控制器手把手教程

用SimuPy BlockDiagram做闭环控制仿真:PID控制器手把手教程 【免费下载链接】simupy A framework for modeling and simulating dynamical systems 项目地址: https://gitcode.com/gh_mirrors/si/simupy SimuPy 是一个开源的 Python 动态系统仿真框架&#x…

📅 2026/9/8 5:12:47
为什么别直接问AI“买什么股“:Chokepoint Atlas与普通AI选股问答的5个核心区别

为什么别直接问AI“买什么股“:Chokepoint Atlas与普通AI选股问答的5个核心区别

为什么别直接问AI"买什么股":Chokepoint Atlas与普通AI选股问答的5个核心区别 【免费下载链接】chokepoint-atlas 项目地址: https://gitcode.com/gh_mirrors/ch/chokepoint-atlas Chokepoint Atlas(卡脖子美股战法)是一个…

📅 2026/10/11 20:30:48
00后街头求职现象解析:技术人才如何突破招聘算法

00后街头求职现象解析:技术人才如何突破招聘算法

1. 现象观察:当街发简历的求职新现象上周五傍晚的西二旗地铁站出口,一个穿着格子衬衫的年轻人站在人流密集处,手里举着自制纸板,上面打印着"00后求职,全栈开发,随时到岗"的字样。他面前的地上整齐…

📅 2026/9/14 3:42:02
MORE NEWS

更多资讯

📰

营销技能实战拆解:洞察、内容、数据、渠道的组合拳

这些年带团队,陆陆续续面试过很多做营销的年轻人,几乎每个人都会在简历上写“具备良好的市场洞察力”“熟悉主流投放渠道”“擅长内容策划”。但真到了实战里,能扛事儿的往往没几个。问题不在态度,也不在努力程度,而在…

📰

系统接口设计对接方案:协议选型、规范设计与安全验收

简介:围绕系统与外部系统之间如何对接这一工程难题,这份系统接口设计对接方案面向系统架构师、后端开发与集成实施人员,梳理从对接方式选型到接口规范落地的完整思路。内容以SOA体系架构与服务总线为主线,依次说明服务目录标准&am…

📰

蒙泰图像输出方案:从色差到精准输出的全链路解析

1. 从一张打样图说起:这套方案到底在解决什么问题做图像输出这行的人都有一个共同的痛:屏幕上看着完美的一张图,送到设备上打出来,颜色偏了、尺寸歪了、边缘糊了,客户站在旁边皱着眉,你只能一边赔笑一边重新…

📰

QT5 Linux下读写2003 Excel:Excelformat源码修改与中文路径实践

简介:在Linux环境下用Qt5读写Excel 2003(xls)文件时,中文路径是许多开发者的痛点,日文、韩文等非英文路径也同理,根源往往出在wcstombs和mbstowcs两个转换函数对宽字符长度的错误计算上。这份ExcelFormat第…

📰

HC32LXXX MCU晶振匹配实验:负载电容与起振可靠性实测

1. 项目背景与核心问题拆解1.1 为什么晶振匹配实验值得单独拿出来说但凡做过MCU硬件设计的人,大概率都遇到过这样一种情况:板子焊好之后,程序烧进去,跑起来一切正常,但偶尔就是会莫名其妙复位一下,或者串口…

📰

机器学习前置知识配套数据集:从CSV到模型训练全流程指南

简介:面向机器学习入门者的《1. 机器学习前置知识》配套数据集,围绕前置知识章节设计了多个真实业务场景,涵盖电影评分、新闻标题、星巴克门店、股票行情与出行记录等常见数据形态,适合初学者在接触建模算法前,先系统练…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬