Solana发布关于6月1日网络中断的问题报告,报告称,因为持久nonce交易被设计为不会过期,所以它们需要不同的机制来防止双重交易,并且是串行处理的。此类交易使用特定于每个帐户的链上值,每次处理持久的nonce交易时都会轮换该值。值轮换后,相同的持久nonce交易应该无法再次处理。 在处理失败的交易之后,但在再次使用nonce之前,用户重新提交了相同的交易进行处理。这次重新提交激活了运行时中的错误。 1. 失败的持久随机数交易被重新提交到集群;2. 区块生产者错误地将这笔交易接受到它正在构建的区块中,因为链上的nonce值没有被推进;3. 当验证者验证该区块时,一部分人发现新区块包含之前已处理的交易,这是由包含此持久随机数交易引起的;4. 一组验证者拒绝了该区块,而另一组则接受了该区块,因为之前的交易实例不再在他们最近处理的缓存中;5. 至关重要的是,超过33%的验证者接受了该区块,但这个数字低于调和不确定性所需的66%。
此外,Solana目前在v1.9.28/v1.10.23版本中已禁用了持久随机数交易功能,以防止网络在再次出现此类问题。