区块链开发必看!上手就会,在 Polkadot 中与系统平行链建立 HRMP 通道

原文作者: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 的跨链资产能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值