原文作者:PaperMoon团队
一、背景与原理
在 Polkadot 网络中,跨链通信依赖 XCM(Cross-Consensus Messaging),而底层真正承载链与链之间消息传递的机制是 HRMP(Horizontal Relay-routed Message Passing) 通道。
通常情况下:
普通平行链之间建立 HRMP 通道需要 两步流程:请求 + 接受(request → accept)
但系统平行链(System Parachain) 是一个特殊例外。什么是系统平行链?
系统平行链是 Polkadot 网络中承担“基础设施功能”的链,而不是普通业务链。典型例子:
|
系统链 |
功能 |
|---|---|
|
Asset Hub |
跨链资产转移、Token 管理 |
|
Bridge Hub |
连接外部网络(如以太坊、其他生态) |
由于它们承担网络核心功能,Polkadot 对其通信流程进行了优化。
与系统平行链建立 HRMP 的关键区别
|
类型 |
HRMP 建立方式 |
|---|---|
|
普通平行链 ↔ 普通平行链 |
双方各发送一次交易 |
|
平行链 ↔ 系统平行链 |
只需要一次 XCM 消息 |
也就是说:任意平行链只需向 Relay Chain 发送 一个 XCM 消息,即可自动建立双向通信通道。
二、建立通道前的准备条件
你需要准备如下环境:
网络结构
必须包含:
• 一个 Relay Chain
• 一个 Parachain(你的链)
• 一个 Asset Hub 系统链
钱包
你需要一个钱包,并在 每条链上都有足够余额 用于支付手续费。
三、示例场景
本教程示例:
|
链 |
ID |
|---|---|
|
你的平行链 |
2500 |
|
系统链 Asset Hub |
1000 |
|
Relay Chain |
Rococo Local |
目标:在 Parachain 2500 与 Asset Hub(1000)之间建立 HRMP 双向通信通道。
步骤 1:为平行链 Sovereign Account 充值
什么是 Sovereign Account?
在 Polkadot 中,每条平行链在 Relay Chain 上都有一个“主权账户”(Sovereign Account)。
该账户用于:
• 支付 XCM 执行费用
• 发送跨链交易
如果它没钱 → XCM 会直接失败。
操作流程
1. 打开 Polkadot.js Apps
2. 连接到 Relay Chain
3. 从你的账户向
Parachain 2500 的 Sovereign Account 转账

要为某条平行链生成其 Sovereign Account(主权账户)地址,需要按照以下步骤进行:
1. 判断该平行链属于哪种链关系(相对当前链):
• 上/下级链(父链或子链,up/down chain)使用前缀 0x70617261(解码为 b"para")。
• 兄弟链(sibling chain)使用前缀 0x7369626c(解码为 b"sibl")。
2. 计算平行链 ID 的 u32 SCALE 编码值:
例如,平行链 2500 会被编码为:c4090000
3. 将前缀与平行链 ID 编码拼接,形成完整的 Sovereign Account 地址:
平行链 2500 在 Relay Chain 上的 Sovereign Account 为:
0x70617261c4090000000000000000000000000000000000000000000000000000
该地址对应的 SS58 格式为:5Ec4AhPSY2GEE4VoHUVheqv5wwq2C1HMKa7c9fVJ1WKivX1Y
另外,你也可以通过 Substrate Utilities 中的 “Para ID → Address” 功能来完成这一转换。
步骤 2:创建建立系统通道的 Extrinsic
进入 Extrinsics 页面
1. 连接 Relay Chain
2. 打开
Developer → Extrinsics

构造调用
选择:
pallet: hrmp
extrinsic: establish_channel_with_system
填写参数:
target_system_chain = 1000
该调用的编码数据应为:
0x3c0ae8030000
这是一段 SCALE 编码后的调用数据,后面要嵌入 XCM 中。
步骤 3:构造并发送 XCM 消息
现在要做的不是直接在 Relay Chain 执行,而是:
由 Parachain 2500 向 Relay Chain 发送 XCM 来触发建立通道。
操作
1. 使用 Polkadot.js 连接 Parachain 2500
2. 构造 XCM
3. 在 call 字段填入刚才的编码:0x3c0ae8030000
4. 填写 beneficiary(接收账户)
5. 点击 Submit Transaction

⚠ 注意
不同本地网络或自定义链的参数格式可能略有不同,请以实际链配置为准。
四、提交后会发生什么?
提交成功后,Relay Chain 会触发:
HrmpSystemChannelOpened
并且 触发两次事件。
含义:
• 通道请求已经被接受
• 但还没真正生效
真正生效时间:
下一次 Session 开始时(Session Rotation)

五、验证 HRMP 通道是否成功建立
等待一个 Session 后进行查询。
查询步骤
1. 连接 Relay Chain
2. 打开
Developer → Chain state

选择:hrmp → hrmpChannels,点击 + 查询。

正确结果示例
你会看到类似输出:
[
[
[
{
"sender": 1000,
"recipient": 2500
}
],
{
"maxCapacity": 8,
"maxTotalSize": 8192,
"maxMessageSize": 1048576,
"msgCount": 0,
"totalSize": 0,
"mqcHead": null,
"senderDeposit": 0,
"recipientDeposit": 0
}
],
[
[
{
"sender": 2500,
"recipient": 1000
}
],
{
"maxCapacity": 8,
"maxTotalSize": 8192,
"maxMessageSize": 1048576,
"msgCount": 0,
"totalSize": 0,
"mqcHead": null,
"senderDeposit": 0,
"recipientDeposit": 0
}
]
]
sender: 1000 → recipient: 2500
sender: 2500 → recipient: 1000
这表示:
|
通道 |
状态 |
|---|---|
|
Asset Hub → 你的链 |
已建立 |
|
你的链 → Asset Hub |
已建立 |
也就是:成功建立 双向 HRMP 通道。
六、通道建立后意味着什么?
现在你的平行链已经可以:
• 接收 Asset Hub 的消息
• 向 Asset Hub 发送 XCM
• 跨链转移 Token
• 调用系统链逻辑
本质上你已经接入了 Polkadot 的资产层基础设施。
总结
建立系统平行链 HRMP 通道的核心要点:
1. 给 Sovereign Account 充值(最容易忽略的步骤)
2. 在 Relay Chain 构造 establish_channel_with_system
3. 将编码嵌入 XCM
4. 从 Parachain 发送 XCM
5. 等待一个 Session
6. 在 hrmpChannels 查询验证
最重要的理解是:
普通 HRMP 是“双方握手”,
系统 HRMP 是“单向请求自动建立双向连接”。
这也是为什么任何链只要接入 Asset Hub,就可以立刻获得 Polkadot 的跨链资产能力。
329

被折叠的 条评论
为什么被折叠?



