近期许多用户在 Solana 网路上提交的交易常常失败且雍塞,研究员 @nishil 针对此议题作出科普的说明,指出源自於网路层 QUIC 协议的设计问题,并表示许多开发者已经在着手改善此问题。
内容目录
Toggle
背景知识:Solana 网路现况Solana 网路用户交易失败率超五成
在 Solana 网路上提交的交易,通常会有三种结果:
其中,自去年 11 月以来,Solana 的交易失败率一直维持在 50% 左右,也就是有一半的交易结果是第二或是第三种情况。
广告 – 内文未完请往下卷动
不过这两种失败情况仍有差异需要厘清。
交易被执行却失败:交易条件改变、机器人套利
交易被执行却失败的原因,通常是因为执行条件改变而不符合该交易的执行需求。例如铸造一个已经被抢先铸造完的 NFT,或者是交易滑价超过设定最大值等等。这失败原因在其他区块链网路也很常发生。
而 Solana 网路因为费用便宜,因此充满大量的套利机器人与垃圾交易资讯。为了套利,机器人会大量释出多个交易内容,很容易因为执行条件改变而失败,也就是抢输其他机器人。根据数据,这种套利机器人发起的交易失败率达 98%。
不过这些机器人的交易失败,并不是影响 Solana 用户本次使用体验糟糕的主因,因此也不是本文要讨论的重点。用户提交的交易失败原因来自上述的第三种情况 — 交易遗失。
交易遗失:因为网路层设计
交易遗失的问题正是造成 Solana 网路上用户交易频频失败的主因。交易遗失代表该交易没有成功传递给出块者,该角色在 Solana 生态被称为区块领导者 (block leader),负责在该 slot 接收并执行交易内容。
@nishil 表示造成 Solana 网路上交易遗失的原因出自於网路层,而非共识层或是执行层,跟区块链技术较无关。
网路层是网路的通讯层,用於将资料包传输。例如 TCP、UDP、QUIC 等协议。Solana 网路近期为了避免区块领导者短时间内接收太多交易需求而当机,将网路层通讯协议改为 QUIC。
QUIC 使区块领导者能够根据特定需求,停止某些用户的连线,或是对其进行传输速率限制,可以降低高峰使用期间的网路当机风险 (虽然会降低网路运行效率但总比当机好)。
不过由於「选择要限制哪一个客户端连线的逻辑」目前设定的很差且存在错误。Solana 目前的做法是随机丢弃交易,而不是按照特定的标准丢弃交易,例如丢弃所有费用低於 x 的交易。
这会造成用户发送更多垃圾交易。为了要让交易可以被成功执行,会鼓励用户发起大量的交易,但这麽作同时就会让失败率再次被提升,且网路会变得更雍塞,造成恶性循环。
最後,因为 Solana 网路的设计并没有 mempool,因此被丢弃的交易就遗失,进而导致交易失败。
展望未来
目前生态主要的客户端团队包含 Firedancer、Anza 与 Solana 官方,都已经在着手处理此问题,预计这问题将在未来几周内得到解决,不过仍然需要看更新後的执行状况决定。且还是需要解决因为调整传输机制造成的雍塞问题。
另一方面,Solana 仍然有因为燃料费用便宜而充斥垃圾交易的问题需要解决。
推荐阅读:机构分析 Solana 四项技术发展:SOL 生态确实变得更好了
推荐原因:该文章说明 Solana 近期与用户体验较相关的技术发展,其中也有涵盖关於燃料费用便宜导致大量垃圾交易的解决方案,可对於 Solana 近年发展更有掌握。
或许这些问题解决後,将可以看到真正稳健的 Solana 网路,不过似乎还有许多工作需要完成。
nishilQuicSOLSolana交易 衍伸阅读