垃圾交易悖论,为什么你的 Solana 交易总会失败?
要想自己的交易被打包,就必须比其他人发送更多垃圾交易,从而加剧恶性循环。
撰文:nishil
编译:Frank,Foresight News
相信不少用户还不清楚,为什么最近他们在 Solana 上的交易总是失败?
让我们从最基础的内容开始分析——从用户的角度来看,当我们进行交易时,基本上会发生三件事:
交易成功执行,没有任何错误;
执行失败,譬如支付了 Gas 费,但执行过程中返回错误,这通常发生在未满足执行条件的情况下,例如尝试 Mint 的代币已经铸造完毕,或者由于价格波动导致滑点超过设置值等;
未送达交易,此类交易不会出现在任何地方,说明交易尚未到达「区块领导者」(Block Leader,Foresight News 注,某个时间段里负责处理交易的验证者)那里,这正是许多用户当前遇到的情况,这属于网络层问题,而非共识 / 执行层面的问题;
你可能会疑惑,网络层是什么?
放心,稍后我们就会讨论这些未送达的交易,以及它们为何是当前 Solana 拥堵的主要原因。在此之前,让我们来聚焦那些失败的交易,因为理解为什么失败的交易不是主要问题这一点,很重要。
如果仔细观察,你可能会惊讶地发现,这些失败交易中只有大约 8% 来自真实用户,其余的都是链上机器人执行套利交易失败的案例:套利者会向 Solana 大量发送垃圾交易,因为与成功套利带来的回报相比,发送垃圾交易的成本微不足道。
例如,他们可以每天多次向 Solana 发送垃圾交易,这将花费他们几百美元(因为 Solana 的费用很低),而他们只需要完成一笔交易就可以赚取高达 10 万美元的利润。
因此,重要的一点是,这些失败的交易并不意味着 Solana 的活跃度出现问题——Solana 网络正在按预期运行,所以这些失败的交易只是由于 Bot 们的交易条件不满足而最终导致的,并不是目前 Solana 用户体验不佳的主要原因。
事实上,自去年 11 月以来,Solana 的交易失败率一直保持在 50% 左右,如果你回顾一下我上面列出的失败与成功图表,你会发现之前的情况也差不多。
那现在就让我们讨论一下过去几天 Solana 拥堵的主要原因——「未送达的交易」,正如前面提到的,这些交易未能到达「区块领导者」,并且由于网络层的问题而被丢弃。
网络层是互联网的通信层,用于在不同的连接之间发送数据包,例如:TCP(传输控制协议)、UDP(用户数据报协议)、QUIC(由谷歌设计)等。
而 Solana 最近刚刚升级 QUIC 作为其网络层,它有助于在用户和「区块领导者」之间建立连接,而且由于 Solana 具有持续的区块生产能力并且没有内存池,因此丢失连接将意味着交易不会写入区块。
QUIC 使「区块领导者」能够根据特定标准切断某些用户的连接或限制其速率,因此,「区块领导者」现在可以在链上需求高企时放弃某些连接,也就是说,这种新架构可防止 Solana 在网络活动增加时停止运行——虽然网络这时可能会非常拥挤,但至少不会停下来。
所以你可能会问,如果 QUIC 的一切都设计得如此好,为什么 Solana 现在这么糟糕?
因此问题是,即使「区块领导者」现在可以限制某些连接,但具体「要限制哪些连接」的逻辑却执行得很差,而且存在缺陷。
为了更好地理解,让我们想象一下,如果正常情况下每个「区块领导者」都有 X 个可以对话的连接,那在活动高峰期,「区块领导者」就会开始接收 10-100 倍数量的连接请求……