为什麽最近 Solana 上的交易常常会失败而且还很雍塞?

近期许多用户在 Solana 网路上提交的交易常常失败且雍塞,研究员 @nishil 针对此议题作出科普的说明,指出源自於网路层 QUIC 协议的设计问题,并表示许多开发者已经在着手改善此问题。

内容目录

Toggle

背景知识:Solana 网路现况Solana 网路用户交易失败率超五成

在 Solana 网路上提交的交易,通常会有三种结果:

其中,自去年 11 月以来,Solana 的交易失败率一直维持在 50% 左右,也就是有一半的交易结果是第二或是第三种情况。

广告 – 内文未完请往下卷动

Solana 网路用户交易失败率

不过这两种失败情况仍有差异需要厘清。

交易被执行却失败:交易条件改变、机器人套利

交易被执行却失败的原因,通常是因为执行条件改变而不符合该交易的执行需求。例如铸造一个已经被抢先铸造完的 NFT,或者是交易滑价超过设定最大值等等。这失败原因在其他区块链网路也很常发生。

而 Solana 网路因为费用便宜,因此充满大量的套利机器人与垃圾交易资讯。为了套利,机器人会大量释出多个交易内容,很容易因为执行条件改变而失败,也就是抢输其他机器人。根据数据,这种套利机器人发起的交易失败率达 98%。

Solana 网路中套利交易失败率为 98%

不过这些机器人的交易失败,并不是影响 Solana 用户本次使用体验糟糕的主因,因此也不是本文要讨论的重点。用户提交的交易失败原因来自上述的第三种情况 — 交易遗失。

交易遗失:因为网路层设计

交易遗失的问题正是造成 Solana 网路上用户交易频频失败的主因。交易遗失代表该交易没有成功传递给出块者,该角色在 Solana 生态被称为区块领导者 (block leader),负责在该 slot 接收并执行交易内容。

@nishil 表示造成 Solana 网路上交易遗失的原因出自於网路层,而非共识层或是执行层,跟区块链技术较无关。

网路层是网路的通讯层,用於将资料包传输。例如 TCP、UDP、QUIC 等协议。Solana 网路近期为了避免区块领导者短时间内接收太多交易需求而当机,将网路层通讯协议改为 QUIC。

HTTP 与 QUIC 传输协议差异示意图

QUIC 使区块领导者能够根据特定需求,停止某些用户的连线,或是对其进行传输速率限制,可以降低高峰使用期间的网路当机风险 (虽然会降低网路运行效率但总比当机好)。

不过由於「选择要限制哪一个客户端连线的逻辑」目前设定的很差且存在错误。Solana 目前的做法是随机丢弃交易,而不是按照特定的标准丢弃交易,例如丢弃所有费用低於 x 的交易。

这会造成用户发送更多垃圾交易。为了要让交易可以被成功执行,会鼓励用户发起大量的交易,但这麽作同时就会让失败率再次被提升,且网路会变得更雍塞,造成恶性循环。

为了提升交易被选中的机率,机器人在 Solana 网路上批次发送大量交易,使得用户的交易被成功执行的机率更低

最後,因为 Solana 网路的设计并没有 mempool,因此被丢弃的交易就遗失,进而导致交易失败。

展望未来

目前生态主要的客户端团队包含 Firedancer、Anza 与 Solana 官方,都已经在着手处理此问题,预计这问题将在未来几周内得到解决,不过仍然需要看更新後的执行状况决定。且还是需要解决因为调整传输机制造成的雍塞问题。

另一方面,Solana 仍然有因为燃料费用便宜而充斥垃圾交易的问题需要解决。

推荐阅读:机构分析 Solana 四项技术发展:SOL 生态确实变得更好了
推荐原因:该文章说明 Solana 近期与用户体验较相关的技术发展,其中也有涵盖关於燃料费用便宜导致大量垃圾交易的解决方案,可对於 Solana 近年发展更有掌握。

或许这些问题解决後,将可以看到真正稳健的 Solana 网路,不过似乎还有许多工作需要完成。

nishilQuicSOLSolana交易 衍伸阅读

Leave a Reply

Your email address will not be published. Required fields are marked *