Moonbeam与Hyperlane之间的跨链互连合约

news2024/11/30 12:47:59

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

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

 

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

Hyperlane合约概览

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

图片来源于Hyperlane

跨链消息通过Hyperlane的发件箱(Outbox)和收件箱(Inbox)智能合约进行路由。收件箱(Inbox)是接收和处理消息的智能合约。每个Hyperlane连接的链都部署了多个收件箱,因为每个收件箱仅连接到另一区块链。发件箱也是一个智能合约,可以通过它将消息发送到其他链。每条链上只会部署了一个发件箱。为帮助管理收件箱和发件箱智能合约,Hyperlane有一个当前名为AbacusConnectionManager的合约(Hyperlane过去被命名为Abacus)。此外,为帮助管理目标链上的Gas支付,Hyperlane还有另一个名为InterchainGasPaymaster的合约。

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

连接SimpleGeneralMessage合约

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

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

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

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

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

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

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

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

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

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

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

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

通过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提供者。

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

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

注册远程路由

如先前所述,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中进行交易和确认。

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

通过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中确认。

追踪跨链消息

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

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

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

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

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

深入了解跨链互连合约

Moonbeam对成为可互操作网络中心的愿景不止于此。您可以在Hyperlane网站上了解更多信息,包括Hyperlane文档中的如何发送跨链消息。您也可以阅读了解互连合约是如何将Moonbeam定位为区块链互操作性的领导者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中可用于监视磁盘使用情况的命令行实用程序

df命令 df是一个Linux命令行实用程序,用于监视Linux磁盘使用情况。df命令显示文件系统磁盘使用情况详细信息的完整摘要。通过-hT选项,它以易于阅读的格式显示有关文件系统、类型、磁盘总大小、已使用容量、剩余容量,使用率以及磁盘安装位置等…

基于DOA联合TDOA时间积累的二维GDOP仿真分析

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 无人机(UAV)因其体积小,灵活性高,成本低等优势得到快速发展并被广泛应用于军事战争,城市管理,民用,地质,抢险救灾等各个领域,与此同时,无人机定位技术也得到了深入研究,其中无线电探测与定位技术备受众多学者关…

liunx常用命令 适用了centos stream9

最近刚好需要重新再学习一下Linux然后开始学习大数据,就重新再温习一下Linux,然后需要把个人所有的编程环境和数据库变成linux版本,虽然一直以来都是用win系统做数据,但是liunx系统的安全和快速最近试了一下确实令我着迷。 liunx常…

[附源码]Nodejs计算机毕业设计基于web的教学资源管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

JSP ssh流量充值系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh流量充值系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myec…

Spring MVC学习 | 使用域对象共享数据

文章目录一、回顾域对象二、在request域共享数据2.1 使用ServletAPI2.2 使用ModelAndView对象2.3 使用Model对象2.4 使用ModelMap对象2.5 使用Map集合2.6 Model、ModelMap和Map的关系2.7 使用域对象的底层原理三、在session域共享数据四、在application域共享数据学习视频&…

SpringBoot 替换 if 的参数校验

简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如Email、Length等。 Spring Validation是对hibernate validation的二次封装,用于支持spring…

Windows 禁用驱动签名方式

Windows 禁用驱动签名方式1. Windows开启测试模式2. 强制禁用2.1 Win7、Win82.2 Win103. 开机选用强制开启禁用签名模式3.1 Win72.3 Win8、Win10及Win113. 参考1. Windows开启测试模式 以管理员模式启动cmd,输入以下命令: 开启系统的测试模式 bcdedit …

来自飞桨社区开发者的礼物,《动手学深度学习》飞桨版上线!

近几年,各行各业已经逐渐开始基于AI技术启动企业智能化转型,AI技术的广泛应用催生了对AI应用人才的需求。如何不断夯实自身的AI技术能力,提升自己的职业竞争力?飞桨社区的开发者给大家带来一份神秘礼物。李沐老师的《动手学深度学…

web前端网页设计期末课程大作业:旅游网页主题网站设计——紫色的旅游开发景点网站静态模板(4页)HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

股票l2接口的委托数据有什么作用?

股票l2接口的委托数据有什么作用? 委托队列返回数据:Level 2 行情将真实的每笔成交和成交量以明细数据呈现给用户。 用户可通过查看明细成交数据,判断出委托是属于大单、中单、小单并以此推断出是机构、大户、散户等所为,查明主…

国内外远程办公软件现状

我们说的远程办公通常指狭义上的远程办公,是指通过远程技术,或远程控制软件,对远程电脑进行操作办公,实现非本地办公,如在家办公、异地办公、移动办公等远程办公模式。这种技术的关键在于:穿透内网和远程控制的安全性。…

软件工程期末复习

文章目录一、单选、多选、判断二、简答题1、MVC体系结构2、软件风险的分类3、测试准则(教材P111- 5.2.3)4、结构化分析的方法5、面向对象设计的原则(SOLID)(1)单一职责原则(2)开放/闭…

arduino-ide ESP32 开发

本来想用vscodePlatformIO 一直安装不成功,网不行。先用Arduino(后来用手机开热点,安装成功了,电信的局域网真差) 我的ESP开发版是CP2102驱动芯片,需要先安装驱动 CP210x USB to UART Bridge VCP Driver…

剑指 Offer 62. 圆圈中最后剩下的数字

文章目录题目思考代码和注释总结题目 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组…

技术创新,她不断进取!冲在前端,开发是她!

单从数字比例上来看,前端开发工程师的女性占比相对整个行业来说较高。成为优秀的前端开发工程师,不论男女,你都可以!本期工作坊就想跟你聊聊,想要成为一名优秀的前端开发应该具备怎样的能力?女性的哪些独特…

还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!

我们平时开发项目的时候,经常会需要远程调用下其他服务提供的接口,于是我们会使用一些HTTP工具类比如Hutool提供的HttpUtil。前不久SpringBoot 3.0发布了,出了一个Http Interface的新特性,它允许我们使用声明式服务调用的方式来调…

Grafana 集成 Prometheum

参考文章: linux 上搭建grafana_摸鱼第一人的博客-CSDN博客_linux安装grafana 目录 一、安装 Grafana 二、安装 Prometheus 三、Prometheus 集成 Grafana 一、安装 Grafana 1、从官网下载rpm包 Download Grafana | Grafana Labs 2、将下载好的包上传到linu…

开源博客项目Blog .NET Core源码学习(2:数据库结构分析)

项目采用17张表以支撑博客内容展示及后台管理功能,本文结合数据库表中的存储数据,学习每张表的用途及其中字段的意义(有部分字段暂时还不明白,后续学习代码时再逐步完善)。 序号表名用途1CategoryInfo保存文章栏目的定…

vulntarget靶场系列-a-writeup

网络配置外网WIN7:ip1: 192.168.127.91/255.255.255.0 ,gw:192.168.127.2 (NAT模式)ip2:10.0.20.98-vmnet1(仅主机模式)域主机成员:10.0.20.99-vmnet1(仅主机模式)10.0.10.111-vmnet2(仅主机模式)域控:10.0.10.110-vmnet2(仅主机模式)密码配置…