7 点讲透 Solana 成为首个 Web 规模区块链的野心

了解使Solana的50,000 TPS区块链网络成为可能的技术突破
Solana是在2017年构想出来的,当时它的创始人Anatoly Yakovenko找到了一种方法,让分散的节点网络与单个节点的性能匹配。任何一个主要的区块链都不能实现这一特性。这就是建立Solana的指引。
比特币和以太坊等共识机制支持大约每秒10笔事务(TPS)。实用的拜占庭式基于容错(PBFT)的权益证明(PoS)系统,如Tendermint,支持大约1000个TPS和100-200个节点。Solana是一个类似于PBFT的PoS区块链,在当前的测试网迭代中支持超过200个节点的50,000个TPS,使其成为性能最好的区块链和世界上第一个网络规模的去中心化网络。
自成立以来,Solana团队——由高通、英特尔、网景和谷歌的技术先驱组成——一直致力于构建Solana实现这些突破性性能标准所需的技术。
为了创建一个分散的、无许可证的网络,以匹配单个节点的性能,Solana团队开发了7项关键技术:
历史证明 (POH):共识之前的时序;
Tower BFT:PBFT 的 PoH 优化版本;
Turbine:区块传播协议;
Gulf Stream :快速事务转发协议;
Sealevel :并行智能合约运行时;
Cloudbreak :水平缩放的帐户数据库;
复制器 :分布式帐本存储
在本文中,我们将简要地解释以上每一种方法。如果你想了解更多,我们也写了详细的解释,你可以点击上面的链接。
历史证明(POH)
如果区块链网络作为一个整体要匹配单个节点的性能,这意味着带宽不是瓶颈,而是计算。为了实现这一点,我们需要首先优化网络中的节点如何通信。
无线蜂窝网络与基于区块链的网络有许多相似之处,长期以来一直致力于优化网络通信。从规模上看,没有哪一个无线发射塔有足够的带宽让每部手机都有自己的无线频率来传输,因此电信公司需要“多址技术”来在同一频率上塞入多个电话。
时分多址(TDMA)是实现蜂窝网络大规模可扩展性的主要技术之一。TDMA指定发射塔将每个无线电频率划分为时间段,并将这些时间段分配给每个电话呼叫。通过这种方式,计算单元塔为网络提供了一个全局可用的时钟。这极大地提高了有限带宽的可伸缩性,允许每个频率支持多个同步数据通道,并减少来自多个手机在同一频率上同时广播的干扰。
当今基于区块链的网络存在时钟问题。每当一个新的区块产生,他们的时钟都会报时。对于以太体来说,这种情况每15秒发生一次,而在一个块中只能容纳这么多信息。对于基于区块链的网络,TDMA等效的时钟粒度应该小于秒,所有验证节点都同意这种粒度,这样它们就可以更有效地处理事务。
Solana的核心创新是“历史证明”(Proof of History, POH),这是一个全球性的、免许可的时间来源,可以在达成共识之前在网络中运行。POH不是一个共识协议或反西比尔机制。相反,POH是时钟问题的一个解决方案。
其他区块链要求验证器相互通信以确认时间已经过去,而每个Solana验证器通过将时间通过编码为一个简单的SHA-256序列哈希可验证延迟函数(VDF)来维护自己的时钟。Solana没有为随机性使用VDF。相反,每个验证器使用VDF来维护自己的时钟。因为每个验证器维护自己的时钟,所以在整个历元中提前安排了leader的选择。就像Tendermint一样,大纪元的时间表可以持续数千个街区。然而,与Tendermint不同的是,网络从不等待失败的节点。每个验证器运行VDF,以证明它获得了传输块和验证器的插槽。每个验证器都会因为这样做而得到补偿,因为块生成器会因为生成块而获得奖励。
有了PoH,leader者继续轮换,网络作为一个整体,不管网络状况如何,都在进步。这意味着网络永远不会停止。网络可以在没有任何验证器相互通信的情况下决定旋转验证器。这是一个微妙而深刻的转变。没有其他区块链具有类似的机制。在其他每个链中,验证器必须进行通信才能做出决策。在Solana中,leader者的轮换决策是异步做出的。
这一核心创新打开了向上堆叠的设计空间。除了提供用于时间印记的时钟之外,POH还允许Solana优化网络上可用的块时间(800ms)、块传播(log200(n)、吞吐量(50K-80=K TPS)和分类存储(pb)。
塔BFT
在PoH的基础上,Solana运行塔共识机制,这是一种类似PBFT的共识算法,专门用于利用同步时钟。与PBFT不同,塔共识机制更喜欢活力而不是一致性。与PBFT一样,节点会成倍地增加超时时间以达成协议,但由于分类帐也是一个不可靠的时间源,节点可以观察和检查网络中所有其他验证器的超时时间。为了更好地理解,我们来看一个例子:
假设你在一个岛上,一个瓶子带着一个U盘漂浮着。驱动器内部是一个Solana分类帐。如果您只查看分类账本身,您将看到每个节点都可以计算当前验证器的数量、每个验证器的状态,以及关键的一点,每个验证器向网络中的任何块提交的超时。仅根据数据结构,不需要任何对等消息,验证器就可以做出投票决定,网络就可以达成共识。
Turbine
由于Solana 共识机制层不依赖于对等消息,所以Solana能够独立于共识机制优化块在网络中传输的方式。Turbine,Solana的块传播技术,借鉴了大量的BitTorrent。当一个块被流化时,它与擦除码一起被分解成小数据包,然后在一组随机的大对等点上散开。使用扇出200个,网络的第二层可以覆盖40,000个验证器。因此,验证器能够传播对最终结果具有log200(n)影响的块。对于所有实际目的,如果每个连接都是100 ms,那么对于40,000个节点网络,复制可以在400 ms内完成,最终完成只需500 ms。
扇出机构必须能抵抗故障。因此,验证器使用Reed-Solomon擦除代码编码数据,提供一定程度的容错。
Gulf Stream
在高性能网络中,内存池管理是一种新的问题,其他链并不需要解决这个问题。Gulf Stream的功能是通过推送事务缓存和转发到网络边缘。因为每个验证器都知道Solana体系结构中即将到来的leader者的顺序,所以客户端和验证器会提前将事务转发给预期的leader者。这允许验证器提前执行事务,减少确认时间,更快地切换leader人,并减少来自未确认事务池的验证器的内存压力。
客户端(如钱包)签署引用特定块哈希的事务。客户端选择一个最近才被网络完全确认的块哈希。块大约每800ms被提议一次,并且需要指数级增长的超时来展开每一个额外的块。使用我们的默认超时曲线,在最坏的情况下,完全确认的块哈希是32块旧的。假设块时间为800毫秒,则等于25.6秒。
一旦事务被转发到任何验证器,验证器就会将其转发给即将到来的leader者之一。客户端可以订阅来自验证器的事务确认。客户端知道块哈希在有限的时间内过期,或者事务由网络确认。这允许客户端签署保证执行或失败的事务。一旦网络通过回滚点,使得事务引用块哈希过期,客户端就可以保证事务现在是无效的,并且永远不会在链上执行。
Sealevel
为了利用Solana的高性能网络,我们构建了Sealevel,这是一个超级并行的事务处理引擎,旨在横向扩展到GPU和SSD。注意,所有其他区块链都是单线程计算机。Solana是在单个切分中支持并行事务执行(而不仅仅是签名验证)的惟一链。
这个问题的解决方案很大程度上借鉴了操作系统驱动程序技术(称为散点-聚集)。事务预先指定它们在执行时将读取和写入的状态。运行时能够找到在一个块中发生的所有非重叠状态转换函数,并并行地执行它们(称为并行执行),同时优化如何跨RAID 0 SSD数组调度对状态的读写。
尽管Sealevel本身是一个调度事务的VM,但它实际上并不在VM中执行事务。相反,Sealevel使用业界验证过的名为Berkeley Packet Filter (BPF)的字节码在硬件上本地执行事务,该字节码专为高性能数据包过滤器设计。这个字节码从90年代早期就已经进行了优化,并已部署到全球数百万个交换机的生产环境中,以便在一个40千兆比特的网络上每秒处理6000万个数据包。
每次Nvidia将SIMD可用线程的数量增加一倍,我们的网络的计算能力就会增加一倍。实际上,所有其他区块链(按设计是单线程计算机)都无法以这种方式伸缩。
使用与WASM目标相同的编译器LLVM,我们为开发人员提供了一组很棒的工具,可以用C/ c++和Rust编写高性能智能合约,并在GPU上执行合约。虽然Solana没有使用WASM,但只需要很少的修改,开发人员可以在Solana编译器中重新编译为WASM编译器编写的C语言和Rust代码。因此,开发人员可以很容易地从其他主要的WASM链(如Dfinity、EOS、Polkadot和Ethereum 2.0)迁移他们的应用程序。
以太坊曾因其软件架构出现过一些漏洞。举两个相关的例子:
通过委托调用导致多个 Parity 钱包攻击
通过「调用」导致 DAO 重入漏洞
编写安全的 Solidity 代码是完全可能的,就像可以用 C 语言编写复杂的软件而不需要内存保护一样。但是,只要不安全行为易于添加且难以检测,验证复杂软件行为的难度就会几何级增长。Solana 和 Libra团队都很早就认识到这个问题,并开发了在不同模块之间保持严格状态分离的架构。
Move 语言引入了资源 (Resources) 和脚本作为高阶概念。两者都可以很自然地适应 Solana Pipeline 运行时以及我们的本地程序设计。我们的目标是支持将 Move 作为第一层语言,这样资源就可以像原生 Solana 程序一样运行,并且可以通过 Move 或我们自己的原生 Rust ABI 进行开发和组合,而不会对性能或安全性造成任何影响。
Cloudbreak — — 水平伸缩内存
光是可伸缩计算还不够。用于追踪帐户的内存很快就会在大小和访问速度方面成为瓶颈。比方说,一般认为,许多现代区块链使用的本地数据库引擎 LevelDB 不能支持超过 5,000 TPS。
一个略天真的解决方案是在 RAM 中维持全局状态。然而,指望消费级计算机拥有足够的RAM来存储全局状态,这也不太合理。对于Solana,我们设计了Cloudbreak,这是一种状态架构,它针对分散在 SSD RAID 0配置中的并发读写进行了优化。每个新增磁盘都增加了链上程序可用的存储容量,并增加了在执行时可执行的并发读写程序次数。
与我们的事务设计相结合,这个架构支持事务的提前 (Ahead Of Time, AOT) 执行。一旦验证者观察到事务,Pipeline 虚拟机就可以开始从磁盘预取所有帐户并准备运行时执行。验证者和区块生产者甚至可以在将事务编码到区块之前开始执行事务,这便于我们进一步优化区块时间和确认延迟。
复制器
以 1GBPS 的速度,区块链网络每年将为账本生成 4 PB 的数据。存储数据将很快成为主要的中心化向量,这与区块链实现的目的背道而驰。
在 Solana 上,存储的数据从验证者下载到称为复制器 (Replicator) 的节点网络。复制器不参与共识。状态历史被分割成许多部分,并执行纠删代码。复制器存储状态的一小部分。每隔一段时间,网络就会要求复制器证明它们还在存储其应该存储的数据。Solana 使用的复制证明 (PoRep) 理念主要借鉴自 Filecoin。
我们能够使用历史证明——达成共识之前的时钟——来优化 PoReps 的创建方式。复制器节点不参与共识,使用 PoH 生成轻量级的证明,通过这种证明可以复制分类账的各个部分,而且验证者能够跨 GPU 批量验证它们。
复制器可以是轻量级节点(例如笔记本电脑)。通过纠删代码,复制器网络可以提供超过 AWS 或 GCE 所希望提供的任何数据的可用性保证。
小结
由于这 7 项重大创新,Solana 网络是一个快如闪电的快速分布式账本技术,而且将永远保持运行。它不会因为共识而放缓。此外,该系统优化了数据传播,大量利用并行 GPU 进行事务处理,并且不会因为大量链上历史数据存储而对验证者造成负担。
Solana 软件设计的指导原则是不应妨碍硬件,方便硬件以最大容量运行。因此,Solana 可以自然地扩展带宽、SSD 和 GPU 内核。它是唯一实现上述目标的区块链,正是通过以上创新,得以令 Solana 在全球 200 个物理上不同的节点网络上实现 50,000 TPS。
想要更深入地了解使 Solana 网络成为可能的 7 大创新,请参考以下博文:
历史证明 (POH):共识之前的时序;
Tower BFT:PBFT 的 PoH 优化版本;
Turbine:区块传播协议;
Gulf Stream :无内存池事务转发协议;
Pipeline 虚拟机:并行智能合约运行时;
Cloudbreak :水平缩放的帐户数据库;
复制器 :分布式帐本存储
网络状态
Solana 的测试网现已上线。可以点击 testnet.solana.com 查看。出于成本考虑,我们只运行少数几个节点。但是,我们已经在许多实例上将它扩展到超过 200 个不同的物理节点(不在共享硬件上),这些节点跨越了 AWS、GCE 和 Azure 上的 23 个数据中心,以进行基准测试。
目前网络运行正常,开发人员现在就可以在测试网上部署代码。他们可以用 C 语言构建智能合约,我们还在积极地开发 Rust 工具链。Rust 将成为 Solana 智能合约开发的旗舰语言。作为 Solana Java SDK 的一部分,Rust 工具链是公开可用的,我们正在进一步迭代软件开发工具包。
Solana 将很快推出一个公开测试版,鼓励验证者通过 Tour de SOL 运行节点——类似于 Cosmos 的 Game of Stakes ——这向公众提出了一个挑战,即在获得代币的同时测试 Solana 网络的极限。
<- CLOUDBREAK – SOLANA的水平缩放状态架构 SOLANA完成了由MULTICOIN CAPITAL ->牵头的2000万美元融资
更多信息请访问SOLANA.COM
关注SOLANA博客
订阅实时通讯
在TELEGRAM上讨论
在DISCORD上联系
在TWITTER上访问