解锁平行链机制详解:Unlock a Parachain(Polkadot SDK)
Polkadot的平行链锁定机制(ParachainLock)通过多方权限约束保障网络去中心化。解锁流程需严格遵循:1)通过Polkadot.js查询锁定状态;2)构造registrar.removeLock调用;3)计算执行weight;4)为主权账户充值;5)构建包含WithdrawAsset、BuyExecution等指令的XCM消息;6)通过Root权限提交XCM。关键注意事项包括准确估算
原文作者:PaperMoon团队
平行链锁定机制(Parachain Lock) 是 Polkadot 生态中的一项重要安全设计,用于在平行链生命周期的早期阶段防止潜在的中心化风险,从而维护网络的去中心化特性。
在平行链刚上线运行时,如果控制权过度集中于单一账户或管理者,容易带来安全与治理风险。锁定机制通过多方权限约束,确保平行链在关键阶段受到合理约束。
锁定系统遵循以下明确规则:
• 中继链治理(Relay Chain Governance)有权锁定任意平行链
• 平行链可以锁定自身
• 平行链管理者(Parachain Manager)有权锁定平行链
• 当平行链成功生成第一个区块时,系统会自动加锁
对应地,解锁流程也受到严格控制:
• 中继链治理可以解锁任意平行链
• 平行链可以解锁自身的锁定状态
本文将介绍:
• 如何查询平行链的锁定状态
• 如何从平行链侧通过 XCM 安全执行解锁操作
• 如何准备解锁调用与资金
• 如何构造并发送解锁用 XCM 消息
检查平行链是否被锁定
在执行解锁操作前,必须先确认当前平行链的锁定状态。可以通过 Polkadot.js Apps 进行查询。
查询步骤
1. 打开 Polkadot.js Apps,连接到中继链(Relay Chain)
2. 进入 Developer → Chain State
3. 查询锁定状态:
• 选择 registrar
• 选择 paras
• 输入要查询的平行链 ID(例如:2006)
• 点击 + 执行查询
返回字段说明
查询结果中包含以下关键字段:
• manager:为该平行链注册并提供押金的账户
• deposit:注册时预留的保证金数量
• locked:是否处于锁定状态,若为 true 表示当前无法由 manager 控制

通过该字段可确认是否需要执行解锁操作。
如何解锁平行链
解锁平行链需要向中继链发送一条 XCM(Cross-Consensus Message),并以 Root 权限执行解锁调用;或者通过中继链治理系统执行 Root 调用。
如果使用 XCM 方式:
• 发起方必须具备足够授权
• 通常通过 sudo pallet(测试环境)或治理系统(生产环境)实现
本文以启用了 sudo 的平行链为示例进行说明。若使用治理系统,则需相应调整 XCM 的提交方式。
准备解锁调用
在发送 XCM 之前,需要先构造将在中继链上执行的解锁交易,即 registrar.removeLock extrinsic。
构造 removeLock 调用步骤
1. 在 Polkadot.js Apps 连接中继链
2. 进入 Developer → Extrinsics
3. 构建 registrar.removeLock:
• 选择 registrar pallet
• 选择 removeLock extrinsic
• 填写 parachain ID(例如:2006)
• 复制 encoded call data(编码后的调用数据)

校验编码数据
可以参考官方提供的 removeLock 解码示例进行比对,确保你的编码数据格式正确。
计算交易 Weight
需要估算执行该调用所需的 weight:
• 使用 transactionPaymentCallApi.queryCallInfo
• 输入刚才获得的 encoded call data

该 weight 将用于后续 XCM 中的执行参数配置,是保证 XCM 成功执行的关键参数。
为主权账户准备资金
为了让 XCM 成功执行,你的平行链在中继链上的 Sovereign Account(主权账户) 必须具备足够余额用于支付交易费用。
该账户地址由平行链 ID 确定性派生而来。
获取 Sovereign Account 的方式
可以通过以下方式获取:
方式一:Runtime API
调用:
locationToAccountApi.convertLocation
将平行链 Location 转换为中继链上的账户地址。
方式二:Substrate Utilities
使用工具直接计算 ParaID 对应的 sovereign account。
Use the "Para ID" to Address section in Substrate Utilities with the Child option selected.
方式三:手动计算
按照官方规则计算(适用于高级用户场景)。
Identify the appropriate prefix:
For parent/child chains use the prefix 0x70617261 (which decodes to b"para").
Encode your parachain ID as a u32 SCALE value:
For parachain 2006, this would be d6070000.
Combine the prefix with the encoded ID to form the sovereign account address:
Hex: 0x70617261d6070000000000000000000000000000000000000000000000000000
SS58 format: 5Ec4AhPW97z4ZyYkd3mYkJrSeZWcwVv4wiANES2QrJi1x17F
充值方式
可以从中继链任意账户向该 sovereign account 发起普通转账。
具体充值金额需参考 XCM Payment API,并结合后续构造的 XCM 消息确定。
构造并提交 XCM
当解锁调用准备完成、主权账户已充值后,即可从平行链向中继链发送 XCM。
该 XCM 需要按顺序完成以下操作:
1. 从 sovereign account 中提取 DOT
2. 支付执行费用
3. 执行 registrar.removeLock
4. 将剩余资金退回 sovereign account
示例:以 Astar(Parachain 2006)为例提交 XCM
以下示例展示如何使用 Polkadot.js Apps 构造解锁 XCM。
Root 权限说明
本示例使用 sudo pallet 进行 Root 执行,仅适用于测试环境。
生产链应通过治理系统发起 Root 调用。
步骤一:构造 sudo.sudo + polkadotXcm.send
1. 在 Polkadot.js Apps 连接平行链
2. 进入 Developer → Extrinsics
3. 构造调用:
• 使用 sudo.sudo
• 内部执行 polkadotXcm.send
• 选择 polkadotXcm pallet
• 选择 send extrinsic
• 将 dest 设置为 Relay Chain

步骤二:构造 XCM 指令并提交
按照以下顺序构造 XCM:
1)WithdrawAsset
• 提取 DOT 资产
2)BuyExecution
支付执行费用:
• fees:
• id:用于支付费用的资产 Location(示例中使用中继链原生资产)
• fun:选择 Fungible,数量与 WithdrawAsset 相同
• weightLimit:设为 Unlimited
3)Transact
执行解锁调用:
• originKind:使用 Native
• requireWeightAtMost:使用前面计算的 weight
• call:使用之前复制的 encoded call data
4)RefundSurplus
退回多余费用
5)DepositAsset
将剩余资金转回 sovereign account

特殊说明
如果 WithdrawAsset 中提取的金额正好等于执行费用,则可以省略步骤 4 和 5。
提交交易
确认参数无误后,点击 Submit Transaction 提交。
验证解锁是否成功(Verification)
交易完成并最终确认后,需要重新检查平行链状态。
验证方式
重复第二节中的查询流程:
• Developer → Chain State
• registrar → paras
• 输入 parachain ID
如果 locked 字段为 false,说明解锁成功。

异常处理建议
若仍显示锁定状态:
• 检查 XCM 是否成功执行
• 查看相关事件日志
• 核对 weight 参数是否正确
• 检查 sovereign account 是否余额不足
• 确认 XCM 指令顺序与参数格式
必要时重新构造并提交 XCM。
总结与实操要点
解锁平行链的关键流程包括:
1. 查询锁定状态(registrar.paras)
2. 构造 registrar.removeLock 调用并获取 encoded data
3. 计算执行 weight
4. 为 sovereign account 充值
5. 构造 XCM:WithdrawAsset → BuyExecution → Transact → RefundSurplus → DepositAsset
6. 通过 Root 权限提交 XCM
7. 验证解锁状态
核心注意事项:
• 解锁必须使用 Root 权限
• Weight 估算必须准确
• Sovereign Account 余额必须充足
• XCM 指令顺序不可错误
• 生产环境应通过治理系统提交
原文链接:https://docs.polkadot.com/parachains/runtime-maintenance/unlock-parachains/
更多推荐


所有评论(0)