在这篇博文中,我们将探讨湾流(Gulf Stream),Solana的高性能对抗性网络(adversarial network)的内存管理解决方案。
内存池
内存池是一组已经提交的交易,但尚未被网络处理。你可以看到比特币和以太坊的内存池现在的情况。
以字节为单位的30天比特币内存池
以交易为单位的30天以太坊内存池
对于比特币和以太坊,未确认的交易数量通常在20K-100K之间,如上图所示。内存池的大小--最常以未确认交易的数量来衡量--取决于对区块空间的供需。即使在区块链时代的这些早期,当内存池中的未确认交易数量上升时,这也会导致整个网络的重大瓶颈效应。
那么,Solana如何做得更好?在不增加网络吞吐量的情况下,Solana验证器可以管理100,000的内存池大小。这意味着,在网络吞吐量为50,000 TPS的情况下,100,000个交易的内存池在几秒钟内就能执行。这就是让Solana成为世界上性能最强的公链的原因。
令人印象深刻,对吗?但是这个简单的分析忽略了很多重要的因素...
以太坊和比特币中的内存池在随机节点之间以点对点的方式使用Gossip协议进行传播。网络中的节点定期构建一个代表本地内存池的Bloom过滤器,并向网络中的其他节点请求任何不符合该过滤器的交易(以及其他一些交易,如最低费用)。将单个交易传播到网络的其他部分至少需要log(N)步,消耗带宽、内存和过滤所需的计算资源。
当benchmark客户端开始每秒产生100,000个交易时,Gossip协议就会被淹没。计算过滤器的成本,以及在机器之间应用过滤器,同时在内存中保持所有的交易,都会变得非常高。领导者(区块生产者)还必须重新传送区块中的相同交易,这意味着每笔交易至少要通过网络传播两次。这既不高效也不实用。
Gulf Stream
我们对Solana网络上的这个问题的解决方案是将交易缓存和转发推到网络的边缘。我们称之为湾流。由于每个验证者都知道即将到来的领导者的顺序,客户端和验证者提前将交易转发给预期的领导者。这使得验证者可以提前执行交易,减少确认时间,更快地切换领导者,并减少未确认交易池对验证者的内存压力。这种解决方案在具有非确定性领导者的网络中是不可能的。
那么它是如何工作的呢?客户端,如钱包,签署引用特定区块哈希的交易。客户端选择一个已经被网络完全确认的最近的区块哈希。区块大约每800ms提出一次,每增加一个区块都需要指数级增加的超时来展开。使用我们默认的超时曲线,一个完全确认的区块哈希在最坏的情况下是32个区块。该交易只在被引用区块的子代中有效,并且只对X个区块有效。虽然X还没有最终确定,但我们预计一个区块哈希的TTL(生存时间)大约为32个区块。假设区块时间为800毫秒,这相当于24秒。
一旦一个交易被转发到任何验证器,验证器就会将其转发到即将到来的领导者之一。客户端可以订阅来自验证者的交易确认信息。客户端知道区块哈希在有限的时间内过期,或者交易被网络确认。这允许客户签署交易,保证执行或失败。一旦网络过了回滚点,使交易引用的区块哈希已经过期,客户就可以保证交易现在是无效的,永远不会在链上执行。
在这个架构中,有一些固有的积极的副作用。首先,在负载下验证器可以提前执行交易,并放弃任何失败的交易。其次,领导者可以根据转发交易的验证器的权重来优先处理交易。这允许网络在大规模的拒绝服务期间优雅地退化。
到目前为止,我们已经很清楚地看到,区块链网络的功能只有在其内存池最小的情况下才会发挥作用。当交易吞吐量有限的网络试图改造全新的扩展技术来解决不断增长的内存池时,Solana从一开始就通过历史证明、湾流和Sealevel等优化设计来解决第一代区块链网络的问题,并实现巨大的交易吞吐量。这是在全球范围内从一开始就有的惊人速度,也是为世界各地的企业、经济和人民创造高度功能的分散式基础设施的一个巨大贡献。