Transfer tokens from Axelar to centrifuge through moonlight related contract interconnection contract_今日财经_转赚网

Transfer tokens from Axelar to centrifuge through moonlight related contract interconnection contract

转赚网 0 0

transferringtokensfromAxelartocentrifugethroughmoonlightrelatedcontractinterconnectioncontract

2023-01-2515:40-reading

-喜欢

-评论

月光社区

粉丝:141篇文章:330

关注

。与Axelar通用消息(GMP)结合,它可以实现其他链可以实现的独特交互';t未完成。。阅读本文,了解ConnectedContractsinterconnectcontract如何通过仅与单链交互的Axelar的EVM链向DeFi并行链(如离心机)发送令牌。

这篇文章相对更深刻。如果你不熟悉Axelar,请阅读Axelar的概述文章和Moonbeam最近发表的关于AxelarSDK解释的文章。

axelar合同概述

Axelar是一种连接不同区块链并提供安全跨链通信的区块链。每个Axelar网络的验证器在链上运行Axelar支持的轻型节点。这个动态验证器通过监控每个链的Axelar网关契约来达成共识。确认消息从一个链传输到另一个链。Axelar网关契约是我们将在后续演示中与之交互的两个Axelar契约之一。

图片来自Axelar网

我们将使用的另一份合同是Axelar气体接收器微服务。当您使用Axelargateway发送跨链交易时,IAxelarGasReceiver将允许您支付目标链上的后续交易。虽然不是必须的但是,这允许最终用户只发送一个事务来自动更新目标链,并用他们持有的源链令牌支付事务费。

非博卡链与平行链之间的转移

Axelar将帮助我们从非博卡链到月光链获得令牌。但是这些桥接令牌将如何从Moonbeam转移到其他并行链呢?

Moonbeam允许开发人员创建所谓的可铸造XC-20跨链(XCM)资产,该资产可以通过Boca'XCM消息格式。这些XCM资产就像月光网络上普通的ERC-20资产一样。,可以通过智能合约进行铸造、销毁和转让。使用XTokens预编译智能合约,开发人员可以使用典型的Solidity智能合约将这些令牌发送到其他链。

Axelar专门为Moonbeam写了一个智能契约,并将其桥接令牌打包成一个可铸造的XC-20,让Axelar'通过月光到达博卡生态系统的其他部分。。这个契约还没有被部署到主网络,但是它可以作为一个例子来展示如何使用打包契约来桥接资产。

如前所述,Axelar是一个交换桥,允许用户在链之间传输令牌。。Axelar'的通用消息传递允许开发人员连接链之间的契约,用户可以通过单个事务调用智能契约,即使他们不在同一链上。最重要的是你可以同时使用这两个功能。

在单个交易中,您将从一个链向MoonbaseAlpha发送令牌,将其打包成可转换的XC-20,最后使用XTokens预编译进行跨链传输。在本例中,您将把资产转移到由离心机处理的测试网络。。请注意,离心机仅在本例中用作示例。

互联契约

互联契约需要两个角色:源链上的发送者和目标链上的接收者。。许多dapp可能希望在链之间来回发送相同类型的消息,也就是说,无缝地提供跨链的替代流动性。这些dapp需要在同一个契约中包含发送方和接收方组件。

在本例中只有一条链(MoonbaseAlpha)具有接收功能,因为Axelar连接的其他链都不是boca平行链。因此,将有两个智能契约来分别处理发送和接收逻辑。

ReceiveCrossChainxToken

首先,让';让我们看看月球基地的合同,因为它规定了我们想要得到的信息。

ReceiveCrossChainXToken从IAxelarExecutable继承,这允许通过Axelar网关调用它。父合同包含两个功能。、_execute和_executeWithToken,这将允许开发人员在契约收到来自Axelargateway的契约调用时更改逻辑。两个函数有相同的输入。,但是_executewitToken还将包含tokenSymbol和amount来描述跨链传输的令牌。智能合约希望接收令牌,以便将其打包到XCM资产中。,所以这将覆盖_executeWithToken函数。

这个函数接收很多信息,但是在这个例子中,我们只需要考虑Axelar提供的两个部分:负载和接收的令牌数。

发送给接收方的智能合约的负载

Axelar是来自发送方的基本信息';它被序列化为一个动态字节对象。智能协定将加载解码为两个结构和一个uint64,这将在后续的XTokens预编译中使用。

逻辑的其余部分在不同的函数wrapAndSendxUSDC中。没有必要将逻辑分离到另一个函数中,但它允许用户在源代码链上打包并发送可转换的XC-20。

你需要注意的是,这个合同只需要aUSDC。。更一般的合同可能需要使用Axelar提供的附加参数。

现在您已经从跨链消息中整理出了初始信息,让';让我们看看大部分的逻辑。

首先,,合同批准Axelar包装合同使用AxelaraUSDC。然后,在记录了一些事件的进展后,契约允许打包契约将aUSDC打包到xUSDC中。最后,在另一个事件被触发后,根据博卡的特殊性进行调整。,契约尝试使用xTokens预编译和发送XCM消息,并将xUSDC传输到另一个并行链。

Boca的系统要求像xUSDC这样的本地资产至少有一个"单位"xUSDCto"保持帐户活跃"。。这就是为什么如果协定中的xusdcs数量等于或小于要发送的数量,智能协定将保留1"单位"xusdcs的。这种特殊性是由于Boca的安全功能,它来自于一个保证用户不会意外丢失所有资产的系统。但在这个例子中,它是一个小障碍。

这是智能合约在接收端的完整分解。下一份合同会更简单。

sendcroschainxtoken

月基合同中要接收的内容已经确定,现在你需要写一个合同来发送这部分数据。查看目标链合同。

sendcroschainxtoken中只有一个相关函数。,sendxUSDCToParachain,它将与AxelarGateway进行交互,发送带有令牌的跨链消息。这也将使用IAxelarGasService契约以便自动支付目标链上的执行费(gas)。

这个函数与预编译的xTokens采用相同的参数,因为调用者实际上是从不同的链中调用的。

然后,契约转移调用方';saUSDC从调用方到合同,以便Axelar'的网关合同可以在以后从SendCrossChainXToken中删除aUSDC。请注意,呼叫者必须在这项工作之前批准合同。其实可能只需要操作一次。

接下来,契约将有效载荷编码到一个字节对象中,以便在目标链中进行后续解码。编码和解码顺序相同,请自行检查!

下一步就是交目标链上的气费。。我们的计划是从目标链发送aUSDC和自定义数据(load),所以契约必须同时支付发送Token的契约调用费。在这个实现中,契约将以源链的原始令牌作为目标链来支付交易。

本地令牌是用户用来支付汽油费用的令牌。比如我用Fantom测试网做源码链,原生令牌是FTM。。可以使用原生令牌按照目标链原生令牌和月基阿尔法原生令牌之间的换算率来支付目标链的燃气费。,则转换率将基于其对应的主网络(本例中为Fantom到Moonbeam)。

综上所述,因为智能合约是发送包含Token的智能调用,用DEV支付目标链的燃气费。因此,协定将使用paynativegasforcontractcallwithtoken函数。请注意,合同中使用的链名是"月光"而不是"月球基地",因为Axelar需要主网络的名称。

最后,契约允许网关契约从契约中获取令牌并发送跨链消息。

部署Axelar关联合同

在设置代码库之前,需要准备一些先决条件。您将需要访问一个具有以下设置的soliditywallet:

DEV

,从MoonbaseAlpha的水龙头获得。

Axelar支持的另一个EVM链原生令牌(如下图)

从axelar的Discord水龙头获得的原生令牌可以替代aUSDC

下表列出了Axelar支持的一些EVM链,包括其测试网络水龙头的链接:

最后,您可能希望创建一个测试网络离心机钱包。。因为您可以向任何预先存在的wallet发送令牌并监控产生的交易,所以建议您控制目标wallet,以便以后切换回令牌。离心机提供了一个连接到月球基地阿尔法的平行测试网链。你可以在polkadot.js上与它互动,如果你没有';如果你不知道如何在离心机上创建一个钱包,你可以看这个视频来学习如何使用polkadot.js扩展。

设置帐户后,,您将需要获得十六进制格式的地址。最简单的方法是复制缩短地址(以kA开头),打开ShawnTabrizi网站,将缩短地址复制到AccountIdtoHex工具栏。

如果你不';如果不想操作这个过程,可以直接使用下面的帐号:

`

0x6a5a0C5de2400F2f0ECCfaf65c765c40BD85af4e370e7da51f36942ed3546f24

`

设置代码库

现在,您已经有一个资金充足的钱包,并选择了Axelar支持的EVM链来发送跨链消息。现在你可以开始学习代码了!

复制下面的代码库:

`

gitclone

`

在您刚刚复制的代码库的文件夹中,您将根据以下格式使用您的wallet私钥创建一个secrets.json文件:

`

{

";私钥":"您的私人密钥"

}

`

现在,您已经完成了所有的设置,可以开始部署了!

使用脚本部署

为了帮助契约部署,在scripts文件夹中有两个脚本,destDeploy.js和originDeploy.js这两个脚本与ethers.js的部署非常相似如果你熟悉使用hardhat,,您可能已经完成了部署。本文将不讨论代码。

首先,通过运行项目主目录中的destDeploy.js脚本,在MoonbaseAlpha上部署目标链契约:

`

npxhardhatrunningscript/destdeploy.jsnetworkmoonbase

`

Youwillseethefollowing.。请务必复制要部署的地址,并将其粘贴到安全的地方,以备将来使用。

现在,您可以在由您选择的Axelar连接的EVM上部署源代码链契约。代码库的hardhat.config.js文件中有很多可用的网络。上面已经列出了各种水龙头。以下命令将部署在测试网络上,并批准已部署的100个测试网络的aUSDC合同。

`

npxhardhatrunningscript/origindeploy.jsnetworkmoonbase

`

Youshouldseethefollowingattheoutput.Remindagain请确保复制您的部署地址。

如何在并行链之间传送非袖珍令牌

现在让';让我们看看并行链之间的非袖珍令牌传输方案。或者说,启动它的脚本。

相关脚本位于脚本文件夹中,并命名为axelarSend.js

步骤1,配置。你将需要改变脚本的顶部,把你的目标链地址(月球基地阿尔法';sReceiveCrossChainXToken)和你的源链地址(SendCrossChainXToken)。。这就是为什么在前一节中保存了两个地址!

您还需要以十六进制格式输入您的离心机地址,这是您在部署期间查找先决条件时获得的。

该脚本使用AxelarSDK来预测目标链条气费。作为一个开发人员,需要对目标链上耗费的气体量进行估算,因为很难预测只能由特定契约调用的函数。在这个例子中,天然气被高估了200,000。。在真实的生产环境中,您可能希望对消耗的气体量进行基准测试。然而,如果你最终确实高估了很多,你将从Axelargasservice获得退款。

axelarSDK提供的estimateGasFee函数会找到源链的本地令牌和目标链的本地令牌之间的转换,从而找到发送到目标链的正确数量。

如果你看下面的案例截图,为什么要使用辅助函数testnetToMainnetChainName?因为Axelar更想要主网名(Moonbeam)而不是测试网名(比如MoonbaseAlpha)。

现在,查看发送到源码链的事务:

乍一看,这些输入看起来很奇怪,但是理解一下。,有必要简单解释一下Substrate(工具链Pocahontas的并行链就是在上面构建的)和xTokens是如何在MoonbaseAlpha上预编译的。

Substrate允许开发人员构建模块化区块链,Boca就是这样获得并行链的。这些在不同区块链上提供不同功能的模块被称为托盘。当构造平行链时,每个货盘都有一个ID:palletid。

波形卡允许每个并行链通过XCM技术相互通信。每个并行链都需要一个身份:并行链ID。

xTokens预编译,即ReceiveCrossChainXToken协定与之交互的预编译协定,不包含任何solidity代码。它实际上应用于平行链,并直接与xTokens托盘交互。。需要Substrate理解的数据都可以操作(如果你是Solidity开发者,这可能和你习惯的不太一样)。由xTokens预编译管理的每个资产都有自己的资产ID。

综上所述,发送方签订合同,使用Axelar的GMP将xTokens预编译所需的数据从EVM链发送到MoonbaseAlpha。下一步将分析xTokens发送的预编译数据。

ReceiveCrossChainXToken中使用的xTokens预编译函数是transferMultiasset。它使用多位置结构来表示资产。,一个uint256表示您要发送的金额,另一个Multilocation结构表示我们发送资金的位置,一个uint64表示重量。

It';理解如何构建多位置有点难。因此,月光';的文档提供了专门的介绍。让';我们来看资产参数的第一个多位置结构:

`

值为0表示位置是相对于当前并行链的。这是正确的。因为xUSDC是最初在MoonbaseAlpha上注册的令牌,而不是其他平行链。

对于字节数组,每个条目的前四个字节(十六进制字符)表示如何解释消息的其余部分。

因此,第一个条目的0x04表示该条目是托盘ID。0x24等于36,因此该分录表明该资产与MoonbaseAlpha的第36个托盘相关,即xTokens托盘。

第二个条目的

0x05表示一个通用索引,它与xTokenspallet结合使用是有意义的。剩余的条目0xfd9d0BF45a2947a519a741C4b9e9EB6表示xUSDC的资产ID。,所以是xUSDC的通用指标。

另一个参数比较简单。30000xUSDC等于30点。但是你需要仔细看目标链信息:

`

`

比较资产参数。值为1表示位置不是相同的平行链。这是正确的,因为如果只在本地发送xUSDC,将会违背这个项目的目的。

字节数组第一个条目的0x00表示该条目是一个并行链ID。。0x000007EF等于2031,是月基Alpha测试中继链上离心机的并联链ID。

第二个条目0x01表示一个32字节的地址,这是离心机使用的地址。因此,离心机_帐户变量直接附加在后面。另一个0x00符合格式要求。

权重参数类似于EVM链上气体的权重参数,但有一些细微的差别,这里不讨论。如果你对此感兴趣,可以查阅Boca文档。这里用1000000000就可以了。

的最后两个参数与xTokens预编译无关。你发送ReceiveCrossChainXToken的月球基地Alpha地址。以便协定知道将消息定向到哪里。最后,您通过交易发送的价值将用于通过Axelar'支付源链上的汽油费用。s气体接收器。

发送和监视事务

现在,您已经理解了事务并正确配置了脚本。,请继续发送交易。

您可以使用两种浏览器来监控事务。一个是Axelar测试网络浏览器,它将提供您在MoonbaseAlpha上的相关活动和源代码链的深度数据。。另一个是polkadot.js,它将允许您查询离心机链状态的变化。

以下是交易的格式。,网络名称是您选择的网络(检查要在hardhat.config.js文件的网络配置中使用的测试网络的可能名称):

`

npxhardhatrunningscript/axelarsend.jsnetworknamenetwork

`

Aftersendingthetransaction,,您应该在控制台上看到以下内容:

请复制事务哈希以监视您的事务。打开Axelar测试网络浏览器,在右上角的搜索栏粘贴交易哈希,检测交易状态。如果所有步骤顺利,交易最终完成。

打开polkadot.js上的离心机测试网络,并连接到MoonbaseAlpha。如果你在阿尔法月球基地执行消息前这么做。,您可能会捕获一个xcmpQueue事件。

请检查所有操作是否正确,否则';看不到xcmpQueue事件。,您可以检查链状态或确保您已收到令牌。

在“开发人员”选项卡下查找链状态。您可以使用ormlTokens托盘查看您的代币余额。现在,xUSDC被用作ID为2的ForeignAsset。请注意,产生的金额可能与您最初发送的金额(300,000)不符,因为它还涉及到平行链转移中的费用。

假设以上步骤全部成功。,您已经完成了平行链之间的转移!该模板也可以重复用于其他使用Axelar资产的并行链,并为生态系统之间的无缝资产转移打开了大门。

如果您需要任何帮助,请联系MooonbeamDiscord的团队。。

了解有关跨链互连合同的更多信息

尽管离心机不会在其主网络上使用XC-20中打包的aUSDC,但随着Boca生态系统中新资产需求的增加,可能会更多地使用这种技术。

如果读者有兴趣编写自己的互连合同和Axelar'sGMP,他们可以积极尝试更多的用例。

您可以在Axelar网站上了解更多信息。。您还可以了解互连合同如何将Moonbeam定位为区块链互操作性的领导者。

本文为本人原创。禁止转载或摘抄本文

操作指南

月光。

相关内容

标签: 测试网络 目标链上 中使用

Transfer tokens from Axelar to centrifuge through moonlight related contract interconnection contract文档下载: PDF DOC TXT