Moonbeam 与 Hyperlane 之间的跨链互连合约
2022-12-14 04:15
PolkaWorld
2022-12-14 04:15
订阅此专栏
收藏此文章


跨链通信除了作为 Moonbeam 的核心,也是为何另一个跨链协议 Hyperlane 部署于 Moonbeam 之上的原因。与先前介绍的跨链协议AxelarLayerZero类似,Hyperlane 允许开发人员编写可以跨区块链通信的智能合约,并让开发人员可以在 Moonbeam 上构建,这些应用程序可以利用波卡、以太坊、Avalanche 等公链提供的功能。


多链 dApp 目前作为跨多个不同 EVM 协议的整合接口。协议将能够使用 Hyperlane 的通用消息传递将其合约进行跨链整合,从而实现多链部署,在原先孤立的生态系统之间实现进阶的互操作性和功能。

为展示互连合约的强大功能,此演示将会把一个字符串自一个 EVM 测试网发送并存储至另一个 EVM 测试网。该演示需要一个已添加 Moonbase Alpha 网络的 MetaMask 帐户,您可以通过访问 Moonbeam 文档页面来完成此操作:https://docs.moonbeam.network/cn/builders/get-started/networks/moonbase/


1

Hyperlane 合约概览

Hyperlane 是 PoS 链协议的委托证明,通过可配置的共识函数验证和保护跨链通信。Hyperlane 网络中的每个验证人都将负责验证 Hyperlane 连接到的每条链。Hyperlane 协议包含可验证的欺诈证明,可由其 Watchtowers 网络计算,以证明验证人提供的跨链消息是否有效。这些证明将根据 dApp 希望使用的共识函数(PoS 权益证明、多签等)进行调整,然而大多数 dApp 会默认使用权益证明(PoS)。

图片来源于 Hyperlane


跨链消息通过 Hyperlane 的发件箱(Outbox)和收件箱(Inbox)智能合约进行路由。收件箱(Inbox)是接收和处理消息的智能合约。每个 Hyperlane 连接的链都部署了多个收件箱,因为每个收件箱仅连接到另一区块链。发件箱也是一个智能合约,可以通过它将消息发送到其他链。每条链上只会部署了一个发件箱。


为帮助管理收件箱和发件箱智能合约,Hyperlane 有一个当前名为AbacusConnectionManager的合约(Hyperlane 过去被命名为 Abacus)。此外,为帮助管理目标链上的 Gas 支付,Hyperlane 还有另一个名为InterchainGasPaymaster的合约。


作为开发人员,您将部署与所有这些合约交互的智能合约,尽管大部分智能合约代码将打包到母智能合约中供您使用,您在使用时无需查看实现细节。


2

连接SimpleGeneralMessage合约

Hyperlane 目前建议您使用其快速入门指南来了解他们的协议,这是了解跨链消息是如何发送和接收的重要指南。本指南部分使用 Hyperlane 范例项目进行开发,这将有助于读者理解如何部署和编写跨链互连合约。


本指南将不会设置整个 Git 库,而是使用流行工具 Remix 来部署合约并与之交互。要了解您在做什么,请查看将部署的合约(已在 Github gist 中提供),您也可以通过此 Remix 链接访问。


此合约的母合约为 Router,它是从 Hyperlane 包中导入的。该母合约简化了与 Inbox 和 Outbox 合约交互的困难,让编写互连合约更加容易。为了简单起见,本文不会深入至 Router 合约,但其中有两点对于理解整个部署步骤很重要。


首先,请注意智能合约开发人员可以覆盖一个_handle函数。当Inbox合约收到一条指向一个智能合约的消息时,它将调用一个名为handle的外部函数。该handle函数将在数次检查后调用_handle,因此_handle函数实际上是智能合约接收和回应跨链消息的地方。


其次,有一个路由注册系统会充当每个合约的白名单。一个 Hyperlane 连接的合约无法向另一个未注册的合约发送消息(如果目的地使用Router合约)。Router合约将有许多外部函数,而这些函数将应用onlyRemoteRouter修饰符,以调用上述白名单系统。

在部署时,您必须与路由注册系统进行交互,以便让互连合约知道向哪个合约发送消息。


但在您部署之前,请先查看SimpleGeneralMessage智能合约中的sendMessage函数。如果您看过我们先前介绍AxelarLayerZero的博客,您将能猜到这个函数类似于跨链发送消息。Hyperlane 的路由合约提供了可能是当前可用的最简化版本,只需要目标链的域名(Hyperlane 版本的链 ID)和有效载荷来启动跨链消息。


第一行将消息发送者和字符串消息打包成一个字节物件,此为大多数跨链通用消息系统用来发送和接收数据的格式。第二行将消息发送到本地链的 Outbox 合约,并使用InterchainGasPaymaster支付消息在目标链的执行费用。


请注意,该消息是需要付费的。由于_dispatchWithGas函数的调用包括msg.value作为其第三个参数,因此交易的全部价值将作为 Gas 发送,以支付在目标链上的执行费用。而之所以需要二次 Gas 支付,是因为交易执行时支付的 Gas 仅针对源链,需要发送额外的价值来支付目标链的执行才能完成一次完整的跨链消息。

现在您可以查看互连合约是如何接收消息的。当Inbox合约收到一条指向互连合约的消息时,它将调用该合约的外部handle函数并传入相关数据。您的互连合约继承自的The Router函数包括此handle函数。连同额外的幕后逻辑,它调用内部和可覆盖的_handle函数(如下所示),它将允许开发人员在接收消息时自定义他们的智能合约逻辑。


在这种情况下,_handle函数做的第一件事就是解码由远程合约的sendMessage函数打包的消息。接着在第二行存储要读取的结果消息。

代码相对简单,所以现在您将部署合约!实践是最好的学习方式,因此请您尝试跟随此教程,自己在 Moonbase Alpha 上部署和执行消息传递。


3

通过 Remix 在 Moonbase Alpha 上

进行部署

部署一个 Demo 合约最简单的方式是通过 Remix。而在 Moonbase Alpha 上部署需要 DEV,如果您尚未拥有 DEV,您可以从我们提供的 Faucet 获取。


要部署脚本,您首先可以将合约复制并粘贴到 Remix 中,或者直接从此 Remix gist 链接打开它。然后在Solidity Compiler标签中编译。同时,请确保您的 MetaMask 已连接到 Moonbase Alpha 网络。然后,在 Remix 的Deploy & Run Transactions标签中,将环境设置为Injected Web3。这将使用 MetaMask 作为 Web3 提供者。


要在每条链上部署,您将需要上述提及的两个合约的本地实例地址:AbacusConnectionManagerInterchainGasPaymaster。此外,您将需要 Hyperlane 域名以用于后续步骤。下表为选定测试网的所有相关数据。您可以在 Hyperlane 的文档页面上找到其他网络的终端。


在 Moonbase Alpha 上部署合约后,确保复制其地址并使用连接到 Hyperlane 的任何其他 EVM 测试网之一重复该过程,以便它可以跨链发送消息。

4

注册远程路由

如先前所述,Router 母智能合约附带了一个白名单安全系统。如果您曾阅读LayerZero 博客文章,您会注意到他们在设置信任的远程地址时也有一个类似的系统。


路由合约目前只允许每条链有一个智能合约作为注册的远程路由,因为它假设每条链上只有一个部署相互通信。但这不是网络本身的限制:您可以编写自己的自定义 Router 智能合约。


要注册互连 Router 合约,您须调用以下函数。只有合约所有者(在本例中为部署者)才能设置信任的远程地址。_domain参数是合约应从中接收消息的链的 Hyperlane 域名标识符,其中一些列于上表中(其余在 Hyperlane 的文档页面上)。_router参数是互连合约的地址,您应从该地址接收消息。除外,该地址与域名标识符存在于同一链上。

您可能会注意到_router参数是 bytes32 而非一般地址。这是为了支持未来的非 EVM 链而设计。在 Remix 中提供输入时,您需要在地址中额外填充 24 个零。例如,如果我连接的合约地址是 0xaf108eF646c8214c9DD9C13CBC5fadf964Bbe293,我会在 Remix 中输入以下内容:

0x000000000000000000000000af108ef646c8214c9dd9c13cbc5fadf964bbe293


现在我们将继续使用 Remix 来确保您的两个互连合约相互信任。您必须对已部署的两个合约执行此操作。要在不同链上的合约之间切换,请通过 MetaMask 连接到目标网络。确保您处于Injected Provider环境中,并且合约仍然为SimpleGeneralMessage。然后将目标合约的地址粘贴到At Address输入框中。


要添加信任的远程地址,请在SimpleGeneralMessage合约中找到enrollRemoteRouter函数并将其打开。


当您在 Moonbase Alpha 上时,将_domain设置为您选择的其他 EVM 测试网的 Hyperlane 域名标识符(可在他们的文档或上表中找到)。将_router设置为您在其他 EVM 测试网上部署的合约,并确保为格式正确(用 24 个零填充)的地址。之后,在 MetaMask 中进行交易和确认。


当您在备用 EVM 测试网上时,将_domain入框设置为 Moonbase Alpha 的 Hyperlane 域名标识符 (0x6d6f2d61)。将_router输入框设置为您在 Moonbase Alpha 上部署的合约,并确保为格式正确的地址。最后,在 MetaMask 中进行交易和确认。

在本部分教程中,您应该已经在两条链上发送了两笔交易,以在两个合约中设置信任的远程地址。之后,您应该可以在互连合约之间发送交易。


5

通过 Hyperlane 从 Moonbase传送

跨链消息

要发送带有自动目标链交易的跨链消息,您必须使用 Hyperlane 终端消息支付额外的 Gas 以抵消目标链的 Gas 成本。这种额外的 Gas 支付以您包含在交易中的原生 Token(GLMR、ETH 等)形式出现,并被设置为消息的值。


Hyperlane 有一个易用的 SDK 来帮助估算跨链交易的 Gas 费用,但对于这篇博客来说超出了范围。为了简单起见,最好使用跨链消息发送一笔较大数额的原生 Token,比如 300000000 Gwei。注意,请勿在生产环境中发送如此大数额的 Token,并且这种高估 Gas 的方法仅用于测试网的演示目的。截至本文撰写时,Hyperlane 的 Gas 退款功能仍在开发中,任何多出的 Gas 将由中继器保留。


现在您可以使用 Remix 接口操作。此范例将向 Avalanche Fuji 测试网发送跨链消息,但您可以用 Gas 数值和链名称替换您想要的任何 EVM 网络。


接着,检查以下事项:

  • 环境为Injected Provider – Web3 on network 1287(Moonbase Alpha)

  • 您的钱包里有来自 faucet 的大量资金,以支付交易成本和目标链 Gas 包含的 DEV

  • 您在上一步中将 Gas 费用设置为 300000000 Gwei 后输入

  • 在 sendMessage 调用的消息输入中输入您选择的短消息(在本例中为“hello from moonbase alpha”)

  • 将目标链的 Hyperlane 域名标识符放在sendMessage调用的_destinationDomain输入框中


当您完成上述步骤,请执行交易并在 MetaMask 中确认。


6

追踪跨链消息

在您发送交易后,您应该能够进入 Moonbase Alpha 区块浏览器使用其交易哈希查看交易。如果一切顺利,交易应当能够被成功确认,而当您以 UTF-8 格式查看时,您将能够在最底部看到交易输入的痕迹。

在一般的交易中,交易的状态和数据将可在一个浏览器的页面上看到。但是,由于这是跨链消息传递,因此实际上在两条链上发生了两笔 EVM 交易。


如果一切顺利,交易将被批准,您将能够看到跨链交易成功后在源链中更新的 lastMessage!如果它没有自动更新,请不要担心。一般来说,交易完成大约需要 30 秒到一分钟的时间。


如果您想查看储存在合约中的消息,您可以通过 Remix 操作。首先,通过 MetaMask 连接到目标网络。接着,确保您处于Injected Provider环境中,并且选择的合约仍然是“SimpleGeneralMessage”。然后,获取目标合约的地址,并将其粘贴到At Address输入栏中。点击后,您应该可以使用获得的合约结果查看最后一条消息。

如果您没有看到消息的结果,Hyperlane 有一个浏览器来追踪交易,您可以使用第一个源链消息的交易哈希来追踪跨链消息的状态。


7

深入了解跨链互连合约

更多信息,包括 Hyperlane 文档中的如何发送跨链消息:

https://docs.hyperlane.xyz/hyperlane-docs/introduction/readme


阅读关于 Moonbeam 如何成为区块链互操作性的领导者,请访问 Moonbeam 的 Connected Contracts 页面:https://moonbeam.network/builders/connected-contracts/


Moonbeam 是一个智能合约平台,用于构建跨链互连应用程序,能够访问任何链上的用户、服务。通过将来自以太坊、Cosmos、波卡等功能整合到一个平台中,Moonbeam 解决了当今用户体验碎片化的问题,解锁了真正的互操作性,并为下一代应用程序奠定基础。


Moonbeam 平台使用集成的跨链信息传递,允许开发者创建访问多个远程区块链服务的智能合约。通过此方式结合 Moonbeam 的开发者友好型 EVM 平台、各类工具支持和 Substrate 架构,为构建互连应用程序提供理想化的开发环境。


如需了解更多信息,请访问:

https://moonbeam.network/

Moonbeam

欢迎加入Moonbeam 社区

期待与您携手打造去中心化跨链世界 ~

△ 获取 Moonbeam 官方最新资讯

更多Moonbeam信息

官网: https://moonbeam.network

Twitter: https://twitter.com/MoonbeamCN

Telegram: https://t.me/moonbeam_CN

Discord: https://discord.gg/skPfXvJWG7

中文电报群助手:@MoonbeamSister

相关Wiki

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

在 App 打开
hyperliquid
wal
jellyjelly
particle
空投
香港
以太坊
rwa
movement
bera
monad
sui