ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从独立链到Parachain:Cumulus solo-to-para迁移完全实践指南

从独立链到Parachain:Cumulus solo-to-para迁移完全实践指南 从独立链到ParachainCumulus solo-to-para迁移完全实践指南【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulusCumulus 是构建 Substrate Parachain 的官方框架。本文带你快速掌握 Cumulus solo-to-para 迁移把一条独立运行的 Substrate 链Solo Chain无缝升级为 Polkadot / Kusama 中继链上的 Parachain无需停止服务状态完整保留。什么是 Cumulus solo-to-para 迁移在 Polkadot 生态中很多项目最初以独立链Solo Chain形式开发测试待功能成熟后再接入中继链成为 Parachain。问题在于两条链的运行时Runtime并不相同——Parachain 版本会多出parachain-system、collator-selection、aura-ext等与中继链交互的模块。Cumulus 为此提供了专门的 pallets/solo-to-para/ 迁移工具。它的核心思路在独立链上提交一次受保护的迁移交易仅 root 权限可调用交易携带两份数据新的Parachain 运行时 Wasm和当前链的head data头部状态中继链确认并下发 go-ahead 信号后链在新块自动切换到 Parachain 运行时状态原样保留。工作原理schedule_migration 三步拆解核心实现在 pallets/solo-to-para/src/lib.rs只有一个外部可调用的交易pub fn schedule_migration(origin, code: Vecu8, head_data: Vecu8) - DispatchResult { ensure_root(origin)?; parachain_system::Pallet::T::schedule_code_upgrade(code)?; Self::store_pending_custom_validation_head_data(head_data); Ok(()) }它做了两件事理解这两步就理解了整个迁移调度运行时升级调用parachain-system的schedule_code_upgrade见 pallets/parachain-system/src/lib.rs把 Parachain Wasm 写入PendingValidationCode存储同时通过NewValidationCode通知中继链我要升级了。升级必须与中继链在同一中继链块同步生效。暂存 head data把独立链的头部数据存入PendingCustomValidationHeadData。当parachain-system触发on_validation_code_applied事件即中继链放行、新代码生效的那一刻head data 才被正式应用——保证旧链状态平滑接管为新 Parachain 的初始状态。迁移操作步骤从准备到生效第 1 步编译 Parachain 运行时 Wasm使用 Cumulus 提供的 parachain-template/ 模板构建运行时产出 Wasm 二进制。注意它必须小于中继链HostConfiguration中的max_code_size上限否则会报TooBig错误。第 2 步在独立链上获取 root 权限迁移交易要求ensure_root通常通过pallet-sudo完成这正是该 Pallet 的Config必须依赖pallet_sudo::Config的原因。第 3 步提交 schedule_migration# 伪代码示意通过 CLI 以 sudo 身份提交 sudo sudo_as! 或直接以 root 调用 pallet-solo-to-para schedule_migration parachain-wasm solo-head-data提交成功后会看到CustomValidationHeadDataStored事件中继链放行升级时再看到CustomValidationHeadDataApplied事件迁移即完成。第 4 步验证迁移结果检查链上是否出现CustomValidationHeadDataApplied事件并确认区块头中的 Parachain 状态如ParachainHead与迁移前独立链的 head 一致。如何验证迁移成功Zombienet 端到端测试Cumulus 仓库内置了一条完整的迁移测试用例非常适合学习验证方法网络配置zombienet/tests/0005-migrate_solo_to_para.toml —— 启动一条 Rococo 本地中继链并运行同一个 Parachain ID (2000) 的两套节点eve以正确 genesis 注册为 Parachaindave则以不同 genesis 值模拟独立链自动化脚本zombienet/tests/migrate_solo_to_para.js —— 读取独立链dave的genesis-state将其作为 custom head data 提交到 Parachain然后断言迁移后 Parachain 不会多生产区块说明状态被正确继承而非重置。测试断言定义在 zombienet/tests/0005-migrate_solo_to_para.zndslalice: parachain 2000 is registered within 225 seconds alice: parachain 2000 block height is at least 10 within 250 seconds dave: js-script ./migrate_solo_to_para.js with dave,2000-1,eve within 200 seconds想本地复现可先获取代码git clone https://gitcode.com/gh_mirrors/cum/cumulus迁移排错清单常见错误与解决方案错误原因解决办法ValidationDataNotAvailable独立链阶段还没有来自中继链的 ValidationData确保节点已能获取中继链数据ProhibitedByPolkadot中继链下发了升级限制信号UpgradeRestrictionSignal等待中继链解除限制后再迁移OverlappingUpgrades已有另一个升级在进行PendingValidationCode未清空先等待或撤销上一次升级TooBig运行时 Wasm 超过max_code_size精简运行时依赖、开启skip-metadata优化NoCustomHeadData未设置待应用的 head data确认schedule_migration已成功提交⚠️ 提醒迁移交易一经提交不可逆务必先在本地Rococo-local / 测试网完整演练一遍。相关模块与延伸阅读迁移 Pallet 源码pallets/solo-to-para/src/lib.rs运行时升级核心pallets/parachain-system/src/lib.rsParachain 框架文档docs/overview.md快速上手模板parachain-template/迁移端到端测试zombienet/tests/0005-migrate_solo_to_para.toml掌握 Cumulus solo-to-para 迁移后你的项目就可以从独立 Substrate 链平滑毕业为 Polkadot 生态中的一条正式 Parachain安全、连续、零停机。【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表