使用 XCM 传输资产
Please read Substrate to Polkadot SDK page first.
在打开消息传递通道中,您了解了如何通过向中继链发送消息来在链之间打开双向通信通道。 您可以使用类似的策略来发送允许本地链管理远程链上帐户的消息。 在本教程中,平行链 B 将资产转移到平行链 A 的中继链上的主权帐户。
本教程的结果类似于使用 balances 模块中的 transfer
函数,只是在这种情况下,转移是由平行链启动的,并演示了在执行 WithdrawAsset
和 DepositAsset
XCM 指令时如何使用持有寄存器。
开始之前
在开始之前,请验证以下内容:
- 您已使用 Zombienet 或使用
rococo-local
链规范的本地中继链设置了平行链测试网络。 -
您已设置了两个本地或虚拟平行链用于测试目的。
在本教程中,平行链 A 的唯一标识符为 1000,平行链 B 的唯一标识符为 1001。
- 两个本地平行链都可以使用 Sudo 模块。
- 您已打开消息传递通道以允许平行链 B 和平行链 A 之间的通信。
配置 XCM 指令
为了说明两条链之间的交互,在以下示例中,平行链 B 发送 XCM 指令以将资产存入平行链 A 上的帐户。
- 使用Polkadot/Substrate 门户连接到平行链 B (1001) 的端点。
- 点击开发者并选择外部函数。
- 选择sudo,然后选择sudo(call) 以使用 Sudo 模块执行特权交易。
- 选择polkadotXcm,然后选择send(dest, message)。
-
指定目标参数以指示要传递消息的相对位置。
- 用于指定目标位置的 XCM 版本:V1
- 中继链是消息的目标,因此父级位置:1
- 在父级的上下文中,内部设置:Here
- 指定消息的 XCM 版本 (V2)。
- 点击添加项目以构建要执行的消息。
WithdrawAsset 指令
要将资产移动到虚拟持有寄存器:
- 选择WithdrawAsset作为此消息的第一个指令。
- 点击添加项目以标识要提取的链上资产。
- 选择具体以使用资产的位置来标识要提取的资产。
- 将父级:0 和内部:Here 设置为从中继链上的平行链 B 主权帐户提取资产。
- 选择可替代以将资产标识为可替代资产。
-
指定要提取的可替代资产总数。
例如,本教程使用 12000000000000。
BuyExecution 指令
要使用存入持有寄存器的资产支付执行费用:
- 点击添加项目以选择BuyExecution作为此消息的第二个指令。
- 选择具体以使用资产的位置来标识要用于支付执行 XCM 指令的资产。
- 将父级:0 和内部:Here 设置为使用从中继链上平行链 B 主权帐户提取的资产。
- 选择可替代以将资产标识为可替代资产。
-
指定要使用的可替代资产总数。
例如,本教程使用 12000000000000。
-
选择无限以跳过为该指令设置权重限制。
DepositAsset 指令
要在支付费用后将持有寄存器中的资产存入特定帐户:
- 点击添加项目以选择DepositAsset作为此消息的第三个指令。
- 选择通配符以允许存入不确定的数量的资产。
- 选择全部以允许在支付费用后存入所有剩余资产。
-
将要从持有寄存器中删除的唯一资产的最大数量设置为 1。
在本教程中,只有一个资产实例可供删除。
-
指定接收已存入资产的受益人。
您可以将剩余资产存入平行链 A 的主权帐户或特定帐户。 对于本教程,资产是使用先前未注资的帐户 KRIS-PUBS 的特定帐户地址存入的。 要选择此受益人,DepositAsset 指令如下所示:
如果您想将资产存入平行链 A (1000) 的主权帐户,则可以使用以下设置指定受益人:
- parents: 0,
- interior: X1,
- X1 junction: Parachain
- Parachain index: 1000
配置好要执行的所有 XCM 指令后,您就可以提交交易了。
提交交易
要提交交易:
- 点击提交交易。
- 点击签名并提交。
-
点击网络并选择资源管理器以验证消息是否已发送。
如果您展开事件,则可以查看消息指令。 如果您点击包含交易的区块的链接,则可以查看其他详细信息
检查中继链上的事件
要检查中继链上的结果:
- 打开Polkadot/Substrate 门户并连接到中继链。
-
点击网络并选择资源管理器以查看 XCM 消息的事件。
-
点击记录更改的区块编号以查看详细信息。
检查已存入的资产
要验证已存入帐户的资产:
- 打开Polkadot/Substrate 门户并连接到中继链。
-
点击帐户,然后查看已将资产(减去交易费用)存入帐户。
例如:
如果您已将远程转移到平行链 A (1000) 的主权帐户而不是 KRIS-PUBS 帐户,则应点击帐户,然后选择地址簿以查看从平行链 B 主权帐户提取的资产已存入平行链 A 主权帐户。