原文作者:Nishil Jain(Biconomy 生态合作负责人) 编译:Odaily 星球日报 Azuma 为什么当前 Solana 之上的交易总是在失败? 让我们从最基本的概念开始逐步解析。 从用户的角度来看,当我们在 Solana 上进行交易时,本质上会出现三种潜在结果: 交易执行成功,一切正常; 交易执行失败,用户已支付 gas 费用,但执行结果返还错误。当交易未满足条件时,就会发生这种情况,例如用户尝试购买的代币已售罄,或者价格波动过快(超出了预设滑点)等等; 交易丢失(Dropped):交易无迹可寻,即交易未能抵达“区块领导节点”(Odaily 注:每 4 个区块轮值一次的当值节点)。这是当前大多数用户正在遇到的情况,本质上这是一个网络层的问题,而非共识层或执行层的问题。 现在你可能会问,什么是网络层?交易为什么会丢失?为什么说它们才是当前 Solana 拥堵的主要原因? 我们暂且把这些最重要的问题抛在一边,先来看看那些执行失败的交易(即第二种情况),并解释为什么说执行失败的交易并非拥堵的主因。 结合链上数据可见,所有执行失败的交易中,只有约 8% 系由真实用户提交,剩余的都是链上机器人所发起的套利交易。 套利者之所以会持续不断地发起“垃圾”交易,是因为与成功套利可所得的潜在利润相比,频繁发起交易的成本可以说是微乎其微。 具体而言,套利者可以在一天时间内持续不断地发起交易,这么做的成本大概是每天几百美元(因为 Solana 的网络费用较低),但只要能成功一笔,就可能赚到数十万美元级别的利润。 需要注意的是,这些失败的交易并不意味着 Solana 网络出现了故障,区块链依旧在正常运行,这些只不过是一些因为条件未达成而失败的机器人交易。这也不是 Solana 当下体验糟糕的主因。 实际上,自去年 11 月以来,Solana 的交易失败率一直保持在大约 50% 左右。 现在,让我们来讨论一下 Solana 在过去几天里拥堵的真正主因——“交易丢失”。 如前文所述,这些都是未能抵达“区块领导节点”的交易,而交易之所为未能到达,是因为它们在网络层中被丢弃了。 网络层是互联网的通信层,它被用来将数据包从一个端点发送至另一个端点,常见的网络层协议包括 TCP、UDP、QUIC(由谷歌开发) 等等。Solana 此前将其网络层协议升级成了 QUIC,这有助于在用户与“区块领导节点”之间建立连接。 由于 Solana 采用了连续出块机制,且不存在用以暂存未确认交易的 mempool,这意味着一旦连接丢失,交易将再也不会被包含至某个区块之内。 QUIC 协议的优势在于,“区块领导节点”可借此获得一种新功能:根据特定的标准来切段某些用户的连接,或限制它们的数据传输速率。 这一功能的意义在于,当网络需求高峰期出现时,“区块领导节点”可以主动切断某些连接,从而防止了 Solana 会因网络活动增加而完全宕机。 你可能又要疑惑了,如果 QUIC 协议的设计这么完善,为什么 Solana 现在还是这么堵呢? 真正的问题在于,尽管“区块领导节点”现在可以选择主动调节某些连接,但决定哪些连接需要被调节的逻辑却存在问题。 为了更具象地理解这一问题,我们可以脑补这么一种情况,每个“区块领导节点”都有着 X 个可以进行通信的连接,可当网络需求高峰期出现时,该节点所接受到的连接请求是其承载能力的 10 至 100 倍……这时该节点就需要去选择切断某些连接。然而当前的情况是,如何选择将被切断的连接并没有一套既定的标准(比如切断所有费用低于 xxx 的连接),所有连接是否会被切断都是随机性的…… 说到底,当前情况下如果你想要交易被确认,你能做的就是发送更多的交易请求,但由于有许多机器人也会不断地向网络发送大量的连接请求,普通用户建立连接并完成交易就变得越来越困难。 这就是 Solana 现在所面临的问题。 当下,Jump (Firedancer 客户端开发团队)、Anza(Agave 客户端开发团队)、Solana Labs 等团队正致力于对网络层进行修复。修复补丁将在本周逐步推出,据悉在未来几周内还会有一些重量级的更新发布。 这能够有效解决问题吗?Solana 会再次“ to da moon”吗……这并没有绝对答案。 为什么当前仍存在着许多不确定性,主要有三个原因: 一是关于即将的修复补丁究竟能否生效,没有人能够保证。只有在它实际运作起来后,我们才能观察实际情况。 二是 Jump 开发的 Firedancer 客户端看起来似乎能够解决问题,但它要到今年年底才能正式发布。 三是关于“垃圾”交易的问题,Solana 的经济机制使得该网络很难阻止恶意行为者对链持续进行“垃圾”交易攻击。 最后,我想呼吁大家认识到一件事:我相信 Solana 正在为做出正确的权衡(Odaily 注:因指设定合理的连接切段标准)而战斗,就像以太坊曾经摆脱了诸多问题一样,Solana 也终会摆脱这些问题。执行问题并非拥堵主因
真正的主因:交易被丢弃于网络层
如何修复?需要多久?