与币安钱包合作的高性能公链Solana是如何提速的?

in #sct4 years ago

❖写在前面❖

TVB最近注意到这样一则新闻:根据Trust Wallet Core Github代码库显示,币安官方钱包Trust Wallet正在开发支持高性能公链Solana的存储、转账和质押等基础功能。9月有20日,加密货币交易所 Coinbase 表示,正在评估上线Solana等17种代币。Coinbase 表示,目标是上线并支持所有符合其技术要求和合规要求的代币。

这个可以与币安合作、受到Coinbase青睐的项目Solana,是如何实现高性能的呢?TVB经过了一周的研究,终于弄清了Solana的原理。


❖历史证明(POH)序列❖

Solana高速的关键因素之一是历史证明(POH)。POH是Solana的核心特色,也是Solana创造性和优势的表现。

虽然历史证明(POH)听上去像是共识算法,但是它不是一种共识机制,而是一种区块链的解决方案。

(POH)是一种创新的区块链序时方案,如下图:

历史证明序列

每次记录事件(或记账),通过加密哈希函数对事件(或交易)数据进行加密计算,输出相应的哈希值,同时输出记录的时间戳。

而输入的哈希值和时间戳,将作为下一次记录事件(或记账)的输入值。例如上图中,上一个输出结果哈希值M和时间戳M成为下一个加密哈希函数的输入值,与新的数据N一同输入,再次经过加密哈希函数的计算,输出新的哈希值N和时间戳N。

而事件(交易)数据,可以是元数据,也可以是带有元数据数据的哈希值。数据在加密时,与前面的数据和时间戳相关联。

这样,每一次记录事件(或记账),本质上都记录了历史事件的数据以及时间戳。所以这个序列被称为历史证明序列。


❖Tower BFT共识算法❖

Solana的Tower BFT共识算法是一种使用POH优化的PBFT共识算法。

我们知道共识算法的一个核心是解决谁来记账这个问题的。在Solana的Tower BFT共识中,由两种角色参与。一种是领导者(区块生产者),另一种是验证者。领导者就是负责记录数据(或记账)的,而验证者则是负责对数据(或交易信息)进行验证的。

在Tower BFT共识算法中,Solana每一个工作纪元被划分为若干时隙,而领导者也会被安排成为一个时间表,每个领导者在指定的时隙内工作。

通俗地说,领导者们排好队,轮流出块。而验证者对区块信息进行确认。有超过2/3的验证者验证通过,就可以确认该区块的信息。

DBFT通过拜占庭容错算法来完成共识。DBFT共识算法具有1/3的容错性,只要有2/3以上的领导人达成共识,就可以完成出块。每一个区块都有最终性,不会产生分叉。领导人轮流记账,不需要像POW那样通过大量的工作量来竞争记账权。

另一方面,它使用了历史证明序列的方式来提速。在其他区块链中,某一个区块的确认出现了延迟,那这个区块其后的交易处理和数据存储都会延迟,必须要等到上一个区块信息确认完成以后,才可以继续后面的信息处理。

而在Tower BFT算法中,验证者可以明确知晓下一个区块的领导者,那么当验证者收到新的交易信息以后,可以直接与下一个区块的验证者进行信息确认。也就是说,Solana中的出块和信息确认都是异步进行。记录一个块的信息,不需要等待上一个块的完成。


❖内存池流动❖

矿工或节点出块以后,其他矿工需要对块信息进行确认,在确认完成之前,块信息中的交易或事务就是区块链的内存池。对于比特币和以太坊,未确认交易的数量通常在20K-100K左右。而当内存池上升时,这会对整个网络造成严重的瓶颈影响。

Solana的特色之一就是处理内存池问题。在不增加网络吞吐量的情况下,Solana验证者可以管理100,000个内存池。

具体是如何实现的呢?由于Solana使用了历史证明序列,每一个区块的信息在等待验证时形成了一个内存池。Solana的公链程序中会存储当前的领导者序时列表,用户也好、验证者也好,可以知晓下一个领导者是哪一个节点。因此,用户和验证者可以提前将交易转发给预期的领导者。换句话说,待处理的事务会流动到下一个区块的内存池中了。

历史证明序列的引入,改变了Solana的内存池结构。在其他公链上,所有的待确认信息处于同一个内存池,而在Solana由于信息在写入区块时,时间与信息会共同加密存储,这样信息的储存不会乱套,仍然可以分清谁先谁后。Solana每一个区块可以形成独立的内存池。解释是将事务缓存和转发推到网络边缘。事实上,是Solana是将确认的信息推到一个内存池的边界,流动到下一个区块的内存池之中,从而进行并行的处理。这使验证者可以提前执行事务,减少确认时间,更快地切换领导者,并减少来自未确认事务池的验证者的内存压力。

这个机制的官方称呼为Gulf Stream,翻译成为中文是湾流。TVB仍然不太能理解,TVB觉得,这相当于内存池事务流向了新的内存池,称之为内存池流动似乎更形象。


❖验证者的树型传播❖

如果在验证区块信息时,领导者要与每一个验证者通讯,那么这个效率可想而知。

因此,Solana引入了Turbine块传播机制。这个词翻译成涡轮机,TVB表示不太理解。所以就称之为树型传播吧。

验证者在传播待验证信息时,Solana解决方案是借鉴了BitTorrent的技术针对流进行了优化,仅使用UDP传输数据。首先,将待验证信息划分为若干小块,最大数据块为64KB;接下来,领导者将这些小数据块发送给一些验证者;然后验证者再按照树型结构将数据传输给更多的验证者。这个数型结构是随机生成的路径。这样,在验证时,不需要领导者与所有的验证者进行交互,验证者也不需要完全1对1进行验证,这样可以提高块信息验证时的效率。

Solana

如果每个验证者将数据传给下层的200个验证,那么从根部的领导者到最终的3层网络的40000个验证者,每层传输耗时100毫秒,那么整个传输大约只需要200毫秒。


❖其他❖

➤多线程虚拟机:Sealevel

Solana智能合约运行的虚拟机机环境是多线程的,这与EVM和EOS的单线程 虚拟机有所不同。Solana能够并行处理事务的原因是Solana事务描述了在执行过程中事务将读取或写入的所有状态。这不仅允许非重叠事务同时执行,而且还允许仅读取相同状态的事务也同时执行。多线程虚拟机,允许Solana可以同时运行更多的智能合约。

➤可伸缩内存解决方案:Cloudbreak

这是一个硬件方案。我们知道在EOS中,账户相关的一些信息是存储在内存(RAM)中的。但是EOS只有少量的节点,对于节点众多的区块链而言,如果不进行分片,那么如何能快速的获取账户相关信息,这是一个难点。最理想状态当然是把账户信息全部置于RAM之中,但是这要么会要求计算使用高昂的RAM,要么是无法满足用户的需要。

比内存更慢一些的是SSD,SSD虽然比HDD要快很多,但是和RAM还是具有一定差距的。如何在性能和成本之间进行权衡成为一个难题。

Solana使用的是一种可伸缩内存的解决方案Cloudbreak。Cloudbreak有些类似于虚拟内存,账户索引信息保存在RAM中,账户的具体信息则形成内存映射文件随机随储在SSD中,账户信息发生变化时,随机生产新的映射文件写入SSD,同时更新RAM中的账户索引信息。

➤复制器节点网络(Replicator)

为了减少节点的存储压力,在Solana公链之下,还设有一个复制器节点网络,复制器从验证者那里下载数据,并且状态历史被分割成许多部分进行存储。每隔一段时间,复制器节点参与复制证明(PoRep),证明自己还在存储自己应该存储的数据文件。

在复制器节点的助力之下,Solana公链的验证者可以随时退出公识,而Solana的网络数据也仍然可以完整、安全的保存。

❖Solana的技术特色❖

从Solana的技术原理上来看,多线程虚拟机、可伸缩内存和复制器节点网络可以提高Solana公链的性能。但是多线程虚拟机是提高智能合约的运行效率,可伸缩内存和复制器节点是从物理上提高和保障Solana性能的。

Solana公链的主要特色和优势表现在块信息确认。

使用过区块链钱包或在数字货币交易所中充值提现的用户都知道,区块链交易所需要一个确认时间。有时候网络发生拥堵,待确认交易很多会拥挤在起一起。

第一,Solana在出块时无延误。而Solana公链引入了历史证明,将时间戳与交易数据(或者事件信息)共同加密,从而来确定事件发生的前后。这样的话,不需要上一个块信息确认,就可以继续下一个区块。而负责主导记账的领导者,按照时间进行排序,每个领导者被分配到一个固定的工作时隙。因此在记账时(或者说记录信息和处理事务)时,领导者可以序时进行记账、出块,不需要理睬上一个区块的确认情况。

做个比喻,Solana的领导者们,就像是高铁的火车,它们会被按时间作好调度,它们在各自的时间上工作,彼此衔接且没有冲突。不需要等到上一辆高铁到站,下一辆高铁就可以出发。

第二,Solana在块确认时无拥堵。由于Solana领导者按时序排好,所以在处理交易或事务时,不需要等待上一个区块完成,直接联络下一个领导者就可以了。

还是这个高铁的例子。验证者们像是高铁的乘客,他们明确知晓下一辆车的时间,如果赶不上这一辆就赶上一班车即可。因此,Solana公链可以像高铁一样高速。

第三,Solana在块确认中高效传递信息。验证者之间是一个树型结构,验证信息被分割沿树型结构进行传递和确认,从而形成了高效的信息验证。

仍然是以高铁来比喻。Solana的树型验证传播,就像是高铁上与乘客之间抄写和确认一个长篇规章。高铁车长如果等每个乘客抄一遍,估计高铁到站也没抄完。所以,高铁的车长将这个长篇规章分成20段(假如有20个车厢),让20个车厢的乘客代表来抄写,然后20个乘客代表互相抄写。抄完以后,乘客代表再回到各自的车厢中,把规则再分成20段,让车厢中的乘客去抄写……这样很快就可以完成全篇的抄写了。

还是用高铁的比喻来总结一下。其他的区块链必须要上一辆车到达终点,下一辆才可以发车。而Solana是一个具有精确时间调度的高铁,每一辆车按时发车,因此车与车之间可以同时行驶,因此可以更快的速度、承载更大的乘客。


❖写在最后❖

在Solana的公测展示页面上,可以看到 Solana的运行情况:

相关链接

Solana

可以看见,从交易处理数量来看,平均每秒交易量为7笔,因为是测试网,实际用户和交易量都会比较少。从块确认时间来看,Solana确认信息平最第短时间是684毫秒,最长时间为1.513秒,中间时间为872毫秒,平均水平为917毫秒,这个确认时间不输给只有21个节点的EOS,不过前提是Solana这个测试网全网只有5个节点。

Solana是一条已经落地的公链,并且具有一定的创新性。其创新在于历史证明序列的使用,并由此可能实现出块延时少、确认速度快、网络难拥堵的公链。希望Solana在具体应用中,可以保持测网络的高性能,满足我们对公链高性能的需求。

Sort:  
  • 스팀 코인판 커뮤니티를 이용해주셔서 감사합니다.
  • 2019년 10월 15일부터는 스팀코인판에서 작성한 글만 SCT 토큰을 보상받을 수 있습니다
  • 스팀 코인판 이외의 곳에서 작성된 글은 SCT 보상에서 제외되니 주의 바랍니다.
  • Thanks to everyone who continues to participate in SteemCoinPan community.
  • From Oct 15, 2019, we will provide SCT rewards for postings published on SteemCoinPan.
  • You won't get SCT rewards at all if you create a posting on other Steem Dapps after Oct 15, 2019.

Congratulations!!! You have got an upvote from @helpmate, Delegate your Steem Power to get regular upvotes + passive income in liquid Steem.
Sponsor helpmate into your SBI share and get a lifetime upvote of worth $0.001 daily from @helpmate.


Donate your Steem to Support helpmate.