深度调查:新公链们为何频现宕机事故?

链捕手

    迈入1月,Solana、Harmony、Arbitrum等多条公链/Layer2出现停止出块的网络宕机现象,以太坊侧链Poygon则出现严重拥堵现象,用户反映长时间内无法发起交易或提币。
    
    上述公链多以「高性能」作为主打口号,但却在相近时间内不约而同开始「罢工」。在此之前,Solana、Arbitrum、BSC、Fantom也已多次暴露出类似问题。
    新公链集体停摆,反映的是一场广泛存在、影响深远的基础设施危机。链捕手通过采访当事方Harmony团队,以及Conflux等国内公链的专业人士,试图还原这场危机,并厘清值得重视和深思的问题。
    作者?|?Richard Lee
    编辑?| 龚荃宇
    01
    为什么「公链宕机」值得重视?
    Web 3.0以同时结合了Web 1.0的开放性和Web2.0的经济效益著称,是加密圈对下一代互联网浪潮的统称。这一旧术语重新成为热词,除了它给加密经济赋予的合法性外,更因为它象征了区块链和加密技术的大规模采用。
    公链赛道在2021年迎来爆发式发展,Solana的登场是原因之一:号称每秒数万的TPS,致力于给用户带来更快、更低廉的链上使用体验。SBF、美国银行等多个名人或机构都将Solana看作促进大规模加密采用的「门户」。
    在链上应用有望进一步出圈的未来,公链作为最底层的基础设施,其安全与稳定性至关重要。以Solana为代表的新公链计划向以太坊发起挑战,并成为很多新用户进入加密行业的第一站,但相继遭遇宕机等尴尬状态,反映出这些新公链在快速发展过程中也逐渐暴露出自身的弊端。
    上述公链网络动辄瘫痪长达数小时的现象如不能及时得到解决,势必将给新入场的主流用户带来糟糕的使用体验和印象,成为制约加密经济大规模发展的重要瓶颈。
    毕竟,公链作为分布式节点维护的去中心化网络,如果还像基于中心化服务器的平台一样频频宕机、卡顿,如何令主流人群信服?
    02
    流量失控:新公链们「停摆」根因
    「DDoS攻击」是项目方在解释网络性能下降时,最常用到的术语之一。DDoS攻击的全称是「distributed denial-of-service attack」,指的是通过使用多个来源的流量,让流量超出系统的处理范围,从而使真实用户无法及时获得所需的网络服务或资源。攻击者通常通过向某一网络发送超出网卡处理能力的流量,或向某一应用发送超出其管理能力的请求数量,来达到效果。
    据区块链白帽黑客组织Halborn介绍,传统DDoS的做法通常是造成系统中的固定单点故障,比如一台 Web 服务器出现故障,访问者可能无法访问由其运营的网站。也因此,对 DDoS 攻击的抵抗力通常是区块链技术的主要卖点之一——区块链网络中没有一个节点是必不可少的,单一节点下线并不会导致整个网络瘫痪。
    不过这并不意味着区块链就能免受DDoS的影响。Halborn指出,攻击者可以发送大量垃圾交易(spam),让其充斥整个区块链网络,从而减少「合法用户」的使用机会和空间资源。在真实场景中,通常所谓的「攻击」不是真的有预谋的「攻击」,而是在热门项目IDO、GameFi交易或市场大行情下,真实用户借助计算机程序「开挂」,实施的作弊行为。
    那么,持续提高节点服务器的内存容量,可以解决这一问题吗?答案是否定的。这由大多数区块链网络共有的特性决定:大多数区块链都有固定容量,它们会定期创建具有特定大小限制的区块,节点在打包区块时,任何不适合当前块的内容都将存储在「内存池」中,等候下一个区块打包。
    因此,这一根本属性也决定了公链网络都需面对的普遍问题:特殊情况下,可能触发如洪水般泛滥的交易请求。
    如何应对这一难题,以及应对措施是否有效,是考察各大网络近期表现的重要指标。
    Solana用户可能对「交易泛滥」的体验最为熟悉。追溯至去年9月14日,Solana全网中断17小时,所有链上服务都无法使用,官方后续报告称是由于去中心化社交网络协议Grape Protocol 在 Raydium 平台上的IDO活动火热,许多用户通过编写的机器脚本发送大量交易,这些交易造成「内存溢出」,导致验证节点崩溃,最终整个网络无法达成「共识」而离线(也即,无法产出新区块)。
    
    而根据Solana Status公告,Solana网络从去年12月初出现、延续至今的拥堵现象,也与「9·14」宕机事件暴露的问题有关。Solana Status是Solana基金会运营的发布网络性能公告的推特账户。
    据区块链公司Laine分析,近期市场行情波动性大,DeFi项目中的许多杠杆仓位都达到清算标准。执行DeFi清算的人会收到奖励,任何人都可以申请充当清算人。因此这也开创了一个市场,许多人竞相清算来争夺赏金,其中有不少人使用的是自行开发的自动化程序(也即通常所说的「机器人」),为了确保能「赢得」比赛,这些「机器人」会发送几十次、甚至上百次相同的交易请求。
    「我们看到每秒有接近200万个事务(交易或其他类型的请求)到达同一节点,其中90%以上是完全相同的重复。」Solana联合创始人Anatoly Yakovenko 1月27日凌晨在Twitter Space活动中表示。
    针对宕机原因,边界智能研究院院长胡智威则进一步向链捕手表示,由于 Solana 将共识消息也作为一种特殊的事务消息在验证节点间传递,大量的消息堵塞导致了共识消息无法正常传递,而使得共识无法正常进行。
    
    Solana TPS的结构组成? 来源:solana beach
    「同时 Solana 的一些特性被针对性的利用导致了网络宕机。例如为了并发处理事务的写入锁定(write-lock)在很多重要地址上被锁定,使得事务变成顺序执行而非并发,极大的影响了对消息的处理能力;节点为处理分叉,不断保留了可能的分叉信息,导致内存溢出等。」胡智威说。
    国内知名公链Conflux的CTO 伍鸣向链捕手分析,在Solana网络中交易过多导致网络拥塞的情况下,区块的转发(广播)延迟就会增加,账本随之容易出现分叉;当账本分叉情况严重时,共识算法的压力就会增加,如果处理不好,最终就会导致系统彻底崩溃。
    「这里面一个很重要的问题是,节点不应该无节制地转发成本很低的垃圾交易,Solana应该是在这方面的流控(流量控制)没有做好。」伍鸣表示。
    Anatoly Yakovenko也在上述Twitter Space活动中承认了该问题。他称,主要问题在于,原先的程序设计中,「重复交易检查」是在签名验证之后进行,因此所有的重复数据都必须先经过签名验证,才会被检查是否属于「垃圾交易」。此外,在节点客户端升级前,Solana用于删除重复数据、清除网络冗余的程序运行得非常缓慢,需耗时几百微秒。
    为避免下次大行情期间,「机器人」交易再度干扰网络,Anatoly Yakovenko 称接下来将在Solana 主网 beta 的 1.9 版本中引入「实际的流量控制(actual flow control)」。
    另一条热门公链Harmony也面临类似问题。1月15日,Harmony网络中断数小时,团队官方将基础gas费提高到30 gwei,来提高发送垃圾交易的门槛。
    Harmony社区发布的事后分析显示,网络的领导节点(leader node)收到了大量垃圾流量(spam),再加上验证节点的旧版客户端对高流量情况的处理不佳,内、外部的因素综合导致了这一「宕机」事故的发生。
    Harmony CTO Rongjian Lan 对链捕手表示,点对点网络(p2p)数据包重复发送,造成了p2p网络的拥堵,正常的共识消息无法顺利发送,网络因此无法达成「共识」。其中内部原因在于,Harmony p2p网络的参数存在潜在bug,因而发生了上述现象。
    「新的Web3基建需要更好的流量监测和流量限制的机制,才能杜绝网络被滥用。」Rongjian Lan称,Harmony对p2p网络协议层参数进行优化后,将开展长期性的系统改良工程,在共识、网络和RPC层都进行优化。
    此外,以太坊二层扩容网络Arbitrum One曾分别在去年9月14日和今年1月9日出现网络中断现象,但从官方公告来看,这与流量失控没有直接关系,主要还是与该网络由于仍在测试阶段而特意保持的较高中心化程度有关。
    据悉,Arbitrum One首次事故的原因是其Sequencer存在bug,而最近一次掉线则是由于主Sequencer节点出现硬件故障,同时备份Sequencer未能及时生效,导致网络「罢工」数小时。
    「虽然我们通常有冗余,可以让备份 Sequencer 无缝控制,但由于正在进行软件升级,这些功能未能生效。结果就是,Sequencer 停止处理新事务。」Offchain Labs称。
    据悉,序列器(Sequencer)是Arbitrum 开发团队 Offchain Labs运营的一个全节点。序列器具有一定特权,可控制收件箱中每笔交易的排序,来保证用户的交易结果能够立即被确定。
    Offchain Labs在上述公告中表示,一旦 Arbitrum 完全去中心化,最有力的保证就会到来。
    03
    提高「作恶」门槛是最终解吗?公链稳定性的未来在哪里?
    事实上,在一定动机激励下,编写脚本、「开挂」作弊,是互联网用户长期以来的自然行为,随着链上交互的增多,「交易泛滥」和「机器人」困扰不可避免地会进入区块链空间。
    同期网络运行状态遭遇「恶评」的还有Polygon网络。1月初,因Polygon上的P2E游戏Sunflower Farmers火爆,参与玩家发送了大量事务请求,一时间内该款链游的智能合约Gas消耗,一度占据了整个Polygon网络的41.8%,导致Polygon上的其他类型交易被暂时搁置,网络呈现高度拥堵状态,平均Gas价格数日内上涨近7倍。
    
    Polygon 近三个月平均Gas价格走势? 来源:Polygonscan
    Polygon长期为「交易泛滥」所困,网络拥堵现象不时发生。此前在去年10月,Poygon已经将节点客户端的最低 gas 价格调高30倍(由1 Gwei 调至30 Gwei),以应对海量的「垃圾交易」。
    这一应对方式与Harmony采取的应急措施一致。但调高基础 gas 价格一方面提高了用户「开挂」的成本,另一方面也会给用户体验带来影响。
    对于项目方的这一惯用操作,伍鸣对链捕手分析表示,调高基础gas作为一种「流控」方式肯定是有效的,这一措施的本质是降低了系统所能支撑的吞吐率。
    但他也指出,「如果想要做得更好,需要在系统本身下功夫,提高系统自身能支持的最大吞吐率,就会涉及到共识算法、网络转发算法、存储和执行优化等多方面的改进。」
    Solana联合创始人Anatoly Yakovenko 披露的「流量控制」改进中,就涉及到引入新的协议机制。Anatoly Yakovenko 称,新升级中将引入按质押权重的 qos 流控机制,这一机制由「Quic Protocol」实现,据称这一协议由谷歌开发,已有5-6年的历史。通过这一协议,Solana可以对发件人实施「评级」限制。
    其中,如何决定如何在不同的区块之间分配带宽是开发团队最需攻克的命题——这一过程需要验证者接收来自网络其余部分的消息流,并根据这些消息的来源权重,对服务质量和拥塞控制进行优先级排序。
    Anatoly Yakovenko在推特表示,上述「流控」措施将在接下来4-5周内推出。
    胡智威则表示,对于流量攻击,公链还可以采取对于验证人的网络流量保护措施,如采用哨兵节点(注:能够在主节点发生故障时通过一系列的机制实现选主从切换,实现故障转移的节点)。对于 TPS 更高的解决方案,除了在本链进行优化外,还可以考虑跨链+应用专有链的扩展处理方式。
    而这也是BSC正在探索的方案。近日,BSC官方在其年度总结中承认其运行机制存在诸多挑战,包括「网络拥塞和节点运营商面临管理其完整节点以与最新区块同步的困难」,这导致BSC在去年曾多次短期宕机情况。
    对此,BSC表示这是因为大区块的设定导致验证节点需要较多存储空间和时间来同步区块,将在2022年向多链和跨链发展,推出BSC 应用侧链 (BAS) 和 BSC 分区链 (BPC)?,以减少主链的数据存储量。
    
    BSC今年的技术规划? 来源:BSC博客
    技术改进和去中心化程度提高,就能保障公链网络运行的稳定性吗?
    针对这一问题,也有网友效仿区块链「可扩展性」的「不可能三角」,提出了「交易质量」的选择困境:交易泛滥(spam)、抗审查性(censorship resistance)和低费用(low fees)三者之间,实现其二,剩下的另一目标就必定不能实现。
    
    实际是否如此,在上述项目团队实施改进措施前,尚属未知。
    但无论如何,公链宕机现象都给予启示:未来很长一段时间内,公链作为底层基础设施都还处在早期阶段,还需迎接在网络稳定性、生态完善性等层面的更多考验,特别是需要采取更多措施应对交易激增等特殊情况,避免对普通用户的使用体验造成负面影响。