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

平行链上线技术系列五—平行链通过 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:

https://wiki.acala.network/build/development-guide/composable-chains/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

详情请参考:

Dora Factory支持去中心化DAO研究组织DAOrayaki

对DAOrayaki第一阶段的回顾--去中心化媒体的先驱

DAOrayaki |DAOrayaki 开启去中心化治理2.0时代

DAOrayaki |风险投资的范式转移:无限主义基金和无限游戏

DAOrayaki |DAOrayaki dGov 模型:基于Futarchy的正和游戏

更多关于DAO的文章,关注Dorafactory,查看往期文章。

Category:

DAOrayaki

DAOrayaki is a decentralized media and research organization that is autonomous by readers, researchers, and funders.