Moonbeam网络于2022年1月11日正式启动。启动时,转账和EVM功能被启用,同时移除SUDO访问权限。Moonbeam是首个在波卡上完成启动流程的平行链,因此这是首个提供通用智能合约功能的基于Substrate的复杂平行链实现之一。Moonbeam的启动还引入了很多基于Substrate的创新功能和波卡技术,从而Moonbeam开发者与Moonbeam基金会共同决定开发和部署一个自初始发布以来称为维护模式(Maintenance Mode)的独特安全功能。
维护模式pallet是一个模块,是所有Moonbeam runtime的其中一部分,旨在应对少数极端情况下发生的网络威胁。此模式可迅速暂停所有处理中的交易和EVM执行,但网络的区块生产依然正常进行,不受任何影响。治理和质押操作不受影响。维护模式(Maintenance Mode)是由Moonbeam基金会和早期开发者社区活跃成员任命的技术委员会(Technical Committee)发起,下文将进一步展开描述细节。
该功能设计为支持网络上的紧急更新。由于中继链和平行链升级系统的工作方式,网络更新一般在公告发布和实行之间有1个小时的延迟期。在存在威胁的情况下,网络在此期间将很容易受到攻击。启动维护模式将升级网络的同时阻止任何试图利用披露的网络漏洞攻击网络的行为。
维护模式的另一个用例是在复杂的Runtime迁移期间会要求区块链在多个区块期间迁移数据。如果其他交易包含在同一个区块内,像这样的迁移会有一定风险。在这些区块期间启用维护模式旨在避免风险。
维护模式激活后,runtime将自动阻止执行余额转账、智能合约调用等(查看完整的执行列表:https://github.com/PureStake/moonbeam/blob/master/runtime/moonbeam/src/lib.rs#L90)。另外,收集人节点将拒绝添加交易至区块以阻止收集失败交易的费用。
维护模式只能通过技术委员会至少三分之二的成员通过Moonbeam治理的投票才可启用。目前,技术委员会由来自Moonbeam基金会和PureStake的五位成员组成。
维护模式的启用和禁用由技术委员会确认后发起。
在紧急情况下,技术委员会召集成员共同讨论问题并评估网络风险。其中至少有4位成员需出席参加。如果事故被评估为网络遭受严重威胁且其他选项均用尽的情况下,则将考虑维护模式。届时,将提交启用维护模式的提案,当三分之二的技术委员会(目前情况下为5位中的4位)投票通过此提案才可激活维护模式。
预计在Kusama和波卡上的Governance v2功能正式部署之后,此流程将被弃用,Governance V2功能将集成到Moonbeam中。Governance v2将进一步将Moonbeam网络上的治理去中心化。
2022年6月27日,Moonbeam基金会收到一个通过Immunefi bug bounty平台提交的漏洞报告,此报告提出Frontier库存在漏洞,可能会导致runtime和EVM环境之间的严重不一致性。利用该漏洞在网络上铸造不安全的资产。Frontier库由波卡生态系统开发并由Parity进行维护。此库已被众多波卡上的平行链所采用,从而导致这些平行链同时存在受到攻击的可能。Moonbeam开发者通知Parity和受影响的平行链项目并决定尽可能开发和部署一个修复程序。
漏洞披露约4个小时后,其中一个受影响的平行链项目无意间在公共Github代码库中分享了此问题的详细信息,而Moonbeam仍存在漏洞。在这种情况下,维护模式将被激活来防止由于意外泄漏而导致越来越多未受保护的网络遭受影响。几个小时后,通过网络runtime升级和维护模式的结束完成了漏洞的修复。网络恢复正常运行。
报告显示部署在Moonbeam网络上的第三方跨链桥应用Nomad使用的智能合约发生了异常交易。
由于影响较为广泛,且问题根本原因尚不明确,因此激活维护模式。在发现漏洞来源于第三方跨链桥Nomad本身而非Moonbeam代码库后,维护模式结束,网络恢复正常运行。
关于Moonbeam
Moonbeam是一个智能合约平台,用于构建跨链互连应用程序,能够访问任何链上的用户、资产和服务。通过将来自以太坊、Cosmos、波卡等功能整合到一个平台中,Moonbeam解决了当今用户体验碎片化的问题,解锁了真正的互操作性,并为下一代应用程序奠定基础。Moonbeam平台使用集成的跨链信息传递,允许开发者创建访问多个远程区块链服务的智能合约。通过此方式结合Moonbeam的开发者友好型EVM平台、各类工具支持和Substrate架构,为构建互连应用程序提供理想化的开发环境。
更多 Moonbeam 信息
官网: Moonbeam | Polkadot Smart Contract Platform
微博:Sina Visitor System
twitter: https://twitter.com/MoonbeamNetwork
Telegram: https://t.me/moonbeam_CN
Discord: https://discord.gg/skPfXvJWG7
中文电报群助手:@MoonbeamSister
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl
我经常迷上ruby的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:my_array=[1,[2,3,[4,5,[6,7]]]]我想创建一个方法,可以将数组展平为[1,2,3,4,5,6,7]。我知道.flatten可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子-因此我试图找到一个更可重用的解决方案。简而言之-我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏 最佳答案 递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情
这应该是一个简单的问题,但我找不到任何相关信息。给定一个Ruby中的正则表达式,对于每个匹配项,我需要检索匹配的模式$1、$2,但我还需要匹配位置。我知道=~运算符为我提供了第一个匹配项的位置,而string.scan(/regex/)为我提供了所有匹配模式。如果可能,我需要在同一步骤中获得两个结果。 最佳答案 MatchDatastring.scan(regex)do$1#Patternatfirstposition$2#Patternatsecondposition$~.offset(1)#Startingandendingpo