在此博客文章中,我们将探讨用于实现高性能对抗网络的 Solana 的内存池管理解决方案 Gulf Stream。在以后的博客文章中,我们将介绍所有 7 项关键创新。
内存池简介
内存池是一组已提交但尚未被网络处理的交易。请看下方的 Bitcoin[1] 和 Ethereum[2] 内存池。
30 天的 Bitcoin 内存池(以字节为单位)。
对于 Bitcoin 和 Ethereum,未确认交易数通常在 20K-100K 左右,如上所示。内存池的大小(通常以未确认的交易数来衡量)取决于区块空间的供需情况。即使在区块链时代的早期,当内存池增长时,也会导致整个网络产生显著的瓶颈效应。
那么,Solana 如何改善这种情况?在不增加网络吞吐量的情况下,Solana 验证者可以管理大小为 100,000 的内存池。这意味着在 50,000 TPS 的网络吞吐量下,只需几秒钟即可处理一个 100,000 个交易的内存池。这正是 Solana 成为世界上性能最高的免许可区块链的原因。
很了不起,对吧?但是这种简单的分析忽略了许多重要因素……
Ethereum 和 Bitcoin 中的内存池使用流言协议以对等方式在随机节点之间传播。网络中的节点会定期构造一个表示本地内存池的布隆筛选器,并从网络上的其他节点请求与该筛选器不匹配的任何交易(以及其他一些交易,例如最低费用)。将单个交易传播到网络的其他部分将至少需要 log(N) 个步骤,这会消耗筛选它所需的带宽、内存和计算资源。
当基准客户端开始每秒生成 100,000 个交易时,流言协议就会不堪重负。计算筛选器以及在计算机上应用筛选器并且同时在内存中维护所有交易,这些操作的成本会变得非常高。领导者(区块生产者)还必须重新传输一个区块中的相同交易,这意味着每个交易至少在网络中传播两次。这既不高效也不实用。
Gulf Stream 简介
我们在 Solana 网络上解决此问题的方法是将交易缓存和转发推送到网络边缘。我们称之为 Gulf Stream**。**由于每个验证者都知道即将到来的领导者的顺序,因此客户端和验证者会提前将交易转发给预期的领导者。这使验证者可以提前执行交易,减少确认时间,更快地切换领导者,并减少来自未确认交易池的验证者的内存压力。在具有非确定性领导者的网络中,此解决方案不适用。
它的原理是什么?钱包之类的客户端对引用特定区块哈希的交易进行签名。客户端选择在时间上最近的一个已被网络完全确认的区块哈希。大约每 800 毫秒建议一次区块,每增加一个区块,用于展开操作的超时时间以指数递增。根据我们的默认超时曲线,在最坏的情况下,完全确认的区块哈希在 32 个区块之前已经存在。交易仅在所引用区块的子区块中有效,并且仅对 X 区块有效。虽然 X 尚未最终确定,但我们预期一个区块哈希具有约 32 个区块的 TTL(生存时间)。假设区块时间为 800 毫秒,相当于 24 秒。
将交易转发给任何验证者后,验证者会将其转发给即将到来的领导者之一。客户端可以订阅来自验证者的交易确认。客户端知道区块哈希将在一定时间后失效,或者交易已被网络确认。这使客户端能够对必定会执行或失败的交易进行签名。网络过了回滚点后,交易引用的区块哈希便过期,客户端就可以确保交易已无效,并且永远不会在链上执行。
此架构本身具有许多积极的副作用。首先,在负载不足的情况下,验证者可提前执行交易并舍弃任何失败的交易。其次,领导者可以根据转发交易的验证者的权益权重来确定交易处理的优先级。这使网络能够在大规模拒绝服务期间正常降级。
到目前为止,可以很明显地看到,区块链网络只有在其内存池最小的情况下才能发挥作用。虽然许多交易吞吐量有限的网络进行了不懈努力,尝试改造全新的缩放技术以解决内存池不断增长的问题,但 Solana 从创建之初就已计划采用诸如历史证明、Gulf Stream 和 Sealevel 等优化方案来解决第一代区块链网络的问题,并实现了巨大的交易吞吐量。这使得它从一开始就以惊人速度在全球范围内扩展,并在为世界各地的企业、经济体和人民创建一个功能强大的去中心化基础结构方面获得重大发展。