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

探讨七种数据消息传递桥 详解7种数据消息传递桥:机制设计、安全性与差异比较 阅读详情

跨链通信除了作为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包中导入的。该母合约简化了与Inbox和Outbox合约交互的困难,让编写互连合约更加容易。为了简单起见,本文不会深入至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定位为区块链互操作性的领导者。

Metal 一、初识 Metal 及其语言规范 游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。1图形渲染;2高并发计算。苹果文档给出的 Metal 优化:CPU 低消耗、GPU 高利用、连续处理器并行、有效的资源利用Metal 官方文档。 阅读详情

相关推荐

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1820

Moonbeam的多链架构

多链是指项目同时部署在至少两个区块链上,这有助于多个区块链之间的交易通信,最终目标是提升用户体验、提高效率。

Moonbuilder的博客 898

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 441

跨链合约示例

跨链合约编写 可以参照示例合约。 这是一个可以跨链转移 token 的 Token 合约。 相比普通的 Token 合约增加了send_to_side_chain和recv_from_side_chain两个函数用于跨链转 token 。 send_to_side_chain只是在一条链上扣掉一部分 token 。 等交易执行之后,使用 JsonRPC 接口cita_getT...

跨链技术践行者 1万+

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

wuyaqi的博客 509

同济大学824复试全攻略:从笔试到面试的实战解析

本文详细解析同济大学824复试全流程,包括专业课笔试、外语听力与口语、专业外语笔试和专业综合面试的备考策略。重点分享数字信号处理、计算机网络等专业课的高效学习方法,以及专业外语速成和口语面试技巧,助力考生全面提升复试表现。

qq_27496129的博客 1053

Moonbeam 技术解读|Frontier介绍、使用和未来(上)

Polkadot旨在构建一个由不同结构但相互连接的区块链网络,其设计核心是兼容性和互操作性。通过将不同的社区、经济体和企业连接到一个共享的生态系统里,为互联、去中心化网络和DApp的未来铺平了道路。不仅包括以Substrate构建的公共、私有和联盟链,还包括已经存在的区块链网络。 基于Substrate的Wasm原生合约模块有很多好处,包括原生速度、平台独立性以及多种语言编写合约的能力。但以太坊作为世界上第二大的区块链网络,也是最大的智能合约平台,许多开发者通过以太坊和solidity智能合约进入区块..

Moonbuilder的博客 995

matsim教程及其案例

MATSim 是一个强大的交通仿真工具,适合研究交通政策、出行行为优化和城市规划。建议从官方示例入手,逐步尝试修改参数和扩展功能。遇到问题时,优先查阅官方文档和社区讨论。(Multi-Agent Transport Simulation Toolkit)的教程和案例资源整理,涵盖基础入门、核心概念、实际应用案例及学习路径。MATSim 是一个开源的、基于多智能体的交通仿真框架,用于模拟城市交通系统中的出行行为、交通流量和交通政策影响。

weixin_70682362的博客 1092

一文了解Moonbeam互连合约

简单来说,互连合约是通过Moonbeam连接其他区块链上的一个或多个智能合约,其允许目标链上的用户通过跨链消息传递协议在一个应用中操作不同链上的资产或是服务。通过互连合约方案,不同迥异的公链技术架构创新实现了沟通,公链上的应用无需忧虑在新链拓展业务的成本,仅一个应用端即可同时处理多条公链之间的交互。对于用户而言,更是不必承担跨链再来的新学习成本,在同一个应用一键操作立刻实现跨链。对比此前使用者需要在不同链之间手动转移Token、兑换等等,互连合约有着“化繁为简”的神奇,省去了这些中间步骤。举例来说,Prim

Moonbuilder的博客 579

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

多个linux系统安装到一块硬盘(Kylin+UOS+ubuntu)

之前写过一篇类似的文档,笔者把kylin和UOS安装在一块硬盘上上一篇的文档地址多个linux系统安装到一块硬盘(Kylin+UOS)_银河麒麟系统和uos安装成双系统-优快云博客本次记录的是三个系统到一块硬件上银河麒麟:Kylin-Desktop-V10-SP1-Release-2107-arm64统信:uniontechos-desktop-20-professional-1050-arm64乌班图:ubuntu-22.04.5-live-server-arm64。

aggs1990的专栏 565

Moonbeam通过Hyperlane部署扩展跨链能力

添加Hyperlane,给予Moonbeam上的构建者们更多跨链通信能力,同时扩大了连接到Moonbeam的网络数量,赋予开发者更好构建跨链安全通信的一站式应用。

Moonbuilder的博客 487

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2126

月报总结|Moonbeam 10月份大事一览

Moonbeam生态正在积蓄力量,重燃生态活力!由生态项目主导的Moonbeam Ignite活动近期已上线多个defi激励活动。

Moonbuilder的博客 701

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

空圈容错・优快云 站点技术架构信任链诊断

本文为基于公开故障现象的黑箱架构推演报告,聚焦“监控健康但用户访问异常”共性问题。提出C/M/V/P四层可达性分析框架,强调V层需满足数据源、方法、环境三异才具仲裁能力。通过R1–R10探针识别架构风险,揭示同源校验、配置共担、降级粗放等隐患。诊断指出:进程存活≠链路通畅,200状态码≠内容正确。配套8问自测清单与∅_safe分级降级方案,推动从“全好/全崩”到“半坏可控”的可观测跃迁。所有推断假说需依赖图谱与压测验证,不构成线上定论。

Liaiyang66的博客 329

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

什么是加密货币凭证?

本文探讨了加密货币凭证对数字身份管理的变革性影响,强调了其核心优势,如增强的安全性和即时验证。它通过利用区块链的去中心化技术,解决了与凭证伪造、丢失和低效验证过程相关的问题。读者将了解到加密货币凭证如何在教育、专业认证和医疗等领域提供防篡改和全球可访问的解决方案。文章深入探讨了实际应用,展示了像麻省理工学院、项目管理协会和等组织为什么采用区块链凭证来简化流程并提升信任。

2301_77604523的博客 121

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

期货合约还有历史K线,就表示现在还能交易吗?

打开以前保存的期货研究资料,某个合约的K线仍能正常显示,过去的价格、成交量也都在。看着熟悉的图,容易顺势觉得:既然还能看,这个合约应该仍可作为当前交易对象。但图里保存的是过去发生过什么,当前合约状态回答的是它现在处于什么生命周期。历史K线仍在,与合约已经下市可以同时成立。对研究者来说,更有用的处理不是在“继续盯它”和“删掉旧图”之间二选一,而是把历史档案与当前关注对象分开。TqSdk提供的合约下市标志,可以帮助把这层区别标明白。

weixin_49134609的博客 173

【无标题】

随着区块链技术在数字资产管理、DeFi金融、NFT交易和Web3应用中的不断发展,智能合约已经成为链上业务运行的重要基础设施。智能合约通过预设程序自动执行资产转账、交易结算和业务规则,能够提高业务处理效率,但也面临代码漏洞、私钥泄露、异常交易和恶意攻击等安全风险。对于企业级区块链项目而言,智能合约完成开发、测试和部署,并不意味着安全工作已经结束。

2601_96183616的博客 226

微软技术日报 2026-11-03:冒牌 Claude Code 扩展留后门、Fabric 数据工程 agent 进预览、Access IE 控件定退场

微软安全博客在 10 月 30 日复盘了一起扩展市场供应链事件:一个冒用 Anthropic 名字的 Cursor 扩展,在被下架之前挂了约 11 个小时。它做的事情不复杂,装完之后在你机器上开一条反向 SSH 隧道,留三处开机自启,再把主机信息发回一台固定 IP 的服务器。同一天前后,微软在 Fabric 社区大会巴塞罗那站把数据工程 agent(Project Osmos)放进了公共预览,在乌镇拿了一个奖,Access 团队则给一个用了二十年的浏览器控件定了退场日期。

海盗Sharp的博客 395

期货成交额变大,为什么成交手数反而少了?

比较同一期货合约两个交易日的成交情况,可能看到:成交额比前一天高,成交手数却少了。若把成交额大直接理解成“交易得更多”,这两项看起来就会互相打架。其实,金额和手数不是同一把尺子。手数描述成交数量,金额还包含成交价格及相应计量口径的影响。两者反向变化并不构成逻辑矛盾。用TqSdk整理这类观察,关键不是挑一个看起来更大的数,而是把原始量、额及各自口径留下来,回答不同的问题。

shinnyringo的博客 139

热重分析仪TG 309 Libra Classic

同时供应T3Ster SI热阻测试仪、POWERTESTER功率循环测试设备、LMS振动噪声测试系统、TMA热机械分析仪、DMA动态热机械分析仪、DSC差示扫描量热仪、STA同步热分析仪、TGA热重分析仪、旋转流变仪、LFA闪射法导热仪、热流法导热系数测量仪,面向汽车电子、消费电子、电力电子、新能源、材料领域,提供软件方案、测试仪器、系统集成、设备调试与工程咨询服务。仪器提供多种不同质地、不同尺寸的坩埚以满足试验的需要,包括氧化铝坩埚、铂铑坩埚、铝坩埚、石墨和石英坩埚等。温度范围:RT(10)…

HOLLYSW的博客 199

山寨币与比特币之间的关系

山寨币是“alternative”和“coin”的合成词。简单来说,山寨币指的是除比特币以外的任何加密货币。尽管比特币在市值和知名度方面仍然是最著名和主导的加密货币,但山寨币已经开辟了自己的市场领域,每种山寨币都有其独特的特点、用途和技术创新。自比特币在2009年推出以来,已经创造了成千上万种山寨币,新的山寨币也在不断涌现。

2301_77604523的博客 253

理解Layer 1区块链协议

了解Layer 1区块链协议的基本原理,它们通过管理交易处理、验证和共识机制,作为去中心化网络的支柱。本文揭示了以太坊、Solana、Cardano和Polkadot等领先L1网络的复杂性,突出了它们在可扩展性、安全性和去中心化方面的独特方法。探索工作量证明和权益证明等共识机制如何确保网络的完整性。理解Layer 1与Layer 2解决方案在区块链实用性和可扩展性方面的对比。适合寻求全面了解区块链基础设施的区块链爱好者和科技投资者。

2301_77604523的博客 188

期货复盘选了一个月,究竟覆盖多少个交易日?

复盘表写着“一个月”,不表示里面一定装着整个月的期货样本。月份有多少个自然日、日历里有多少个交易日、你的资料实际覆盖了多少天,是三个不同的数。如果一个月的结果来自完整日期范围,另一个月却少了几天,直接比较总信号数或总盈亏,就可能把样本覆盖差异也算进了策略表现。看月度结果之前,值得把这三个数并列看清。

lisiccwss的博客 130

【量化实战】VeighNa 全图谱:从零到一,由浅入深打通多品种量化

本文系统梳理了VeighNa量化平台的四阶进阶路径:从接口与数据分离(第一阶段),到策略逻辑对齐(第二阶段),再到数据平替与自动化执行(第三阶段),最终拓展至多市场实战(第四阶段)。针对新手常见痛点,提供免费数据源(如AKShare、天勤)、交易规则避坑指南及参数配置建议,强调A股仅支持做多、乘数需匹配品种特性。最后给出可落地的行动路线图,助力用户由浅入深打通全市场量化体系。

qq_72758246的博客 246

美股行情API遇上冬令时:盘前盘后时间怎么对齐?

摘要:负责美股行情页和开盘提醒的产品经理,冬令时切换后需要一起核对交易时段、北京时间和交易日期。本文结合TickDB交易时段、交易日历的真实返回,解释盘前盘后怎样换算,为什么凌晨收盘仍属于美国前一个交易日,并提供时间对照表、可运行换算示例与页面检查清单,处理半日交易等容易遗漏的例外。

2511_94663557的博客 249
上一篇: Moonbeam 布局应用链 | 浅析应用链的开发潜力和市场前景
下一篇: Moonbeam生态说|聊聊平行链Bifrost及其与Moonbeam集成最新动态
Web3 MoonBuilder
博客等级 码龄5年 568粉丝 381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值