平行链上线技术系列五—平行链通过 orml-xcm 打开 hrmp

实验环境

两条平行链 - 链A(2008)和链B(2009)

一条中继链

实验目的

通过 orml-xcm 打开链A和链B之间的 hrmp channel

前提准备

平行链代理账户需要一定的中继链token,所以需要在中级链通过xcmPallet.limitedReserveTransferAssets()向指定的平行链发送代币

下图例子(向链A-2008,转一定的中继链token)

平行链代理账户,这是通过paraid生成的账户,他是确定的账户。

para-id=2115的平行链代理账户是:5Ec4AhNzgnZ7jXzsdUAEbGBWu2GNfwppYZdf6P1JqNq6BntW

Open HRMP

开通 HRMP channel 的步骤:

  1. 发送方平行链发送一个初始化开放通道请求。

  2. 接收方平行链接受请求。

两条链需要互相交替进行操作,因为hrmp是单向的,如果需要进行跨链资产转账就需要打开双向的hrmp通道。

下面通过链A为Sender,链B为Recipient,以打开链A->链B的Hrmp channel为例

链A Sender 2008

1. 在中继链构造hrmp.hrmpInitOpenChannel()的结构体,并获取encoded call data(0x1700d907000008000000e21f0000)。

这里有三个参数

  • Recipient 接收者的Para Id

  • proposeMaxCapacity 也是个限制的值

  • proposeMaxMessageSize xcm消息的大小限制

其中proposeMaxCapacity proposeMaxMessageSize的值不能设置的太大,必须要比中继链规定的最大配比要小,要不然会出错。通过中继链ChainState下的configuration.activeConfig()方法查找这项约束。

2.回到平行链,通过sudo构造ormlXcm.sendAsSovereign()

ormlXcm.sendAsSovereign(  dest: XcmVersionedMultiLocation  {    V1: {      parents: 1      interior: Here    }  }    message: XcmVersionedXcm  {    V2: [      {        WithdrawAsset: [          {            id: {              Concrete: {                parents: 0                interior: Here              }            }            fun: {              Fungible: 1,000,000,000,000            }          }        ]      }      {        BuyExecution: {          fees: {            id: {              Concrete: {                parents: 0                interior: Here              }            }            fun: {              Fungible: 40,000,000,000            }          }          weightLimit: Unlimited        }      }      {        Transact: {          originType: Native          requireWeightAtMost: 1,000,000,000          call: {            encoded:           }        }      }      {        DepositAsset: {          assets: {            Wild: All          }          maxAssets: 1          beneficiary: {            parents: 0            interior: {              X1: {                Parachain:               }            }          }        }      }    ]  })

-hex-call>为上面我们构造的encode call data:0x1700d907000008000000e21f0000

为我们当前平行链的para id:2008

交易成功之后,会在中继链执行encode call data的函数。

链B Recipient 2009

1. 在中继链构造hrmp.hrmpAcceptOpenChannel()的结构体,并获取encoded call data。(0x1701d8070000)

其中参数中的sender为发送者的paraid,也就是对应链A的paraid(2008)

2. 回到平行链,通过sudo构造ormlXcm.sendAsSovereign()

ormlXcm.sendAsSovereign(  dest: XcmVersionedMultiLocation  {    V1: {      parents: 1      interior: Here    }  }    message: XcmVersionedXcm  {    V2: [      {        WithdrawAsset: [          {            id: {              Concrete: {                parents: 0                interior: Here              }            }            fun: {              Fungible: 1,000,000,000,000            }          }        ]      }      {        BuyExecution: {          fees: {            id: {              Concrete: {                parents: 0                interior: Here              }            }            fun: {              Fungible: 40,000,000,000            }          }          weightLimit: Unlimited        }      }      {        Transact: {          originType: Native          requireWeightAtMost: 1,000,000,000          call: {            encoded:           }        }      }      {        DepositAsset: {          assets: {            Wild: All          }          maxAssets: 1          beneficiary: {            parents: 0            interior: {              X1: {                Parachain:               }            }          }        }      }    ]  })

为上面我们构造的encode call data:0x1701d8070000

为我们当前平行链的para id:2009

发起交易后,在中继链可以查看到执行成功的日志。

检查是否成功打开HRMP Channel

1. 查看中继链存储hrmp.hrmpOpenChannelRequestList()

2. 观察中继链页面中parachains的in/out内容(如果是1就说明打开了)

参考链接

Open HRMP Channel:


通过 DAO,研究组织和媒体可以打破地域的限制,以社区的方式资助和生产内容。DAOrayaki将会通过DAO的形式,构建一个代表社区意志并由社区控制的功能齐全的去中心化媒体。欢迎通过文末方式提交与DAO、量子计算、星际移民、DA相关的内容,瓜分10000USDC赏金池!欢迎加入DAOrayaki社区,了解去中心化自治组织(DAO),探讨最新话题!

官方网站:https://daorayaki.org

Media:https://media.daorayaki.org

Discord server: https://discord.gg/wNUPmsGsa4

Medium: https://medium.com/@daorayaki

Email: daorayaki@dorafactory.org

Twitter: @daorayaki_

微信助手:DAOrayaki-Media

小宇宙:DAOrayaki

Subscribe to DAOrayaki
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.