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

4개월 전
in sct

❖写在前面❖

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在具体应用中,可以保持测网络的高性能,满足我们对公链高性能的需求。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
STEEMKR.COM IS SPONSORED BY
ADVERTISEMENT
Sort Order:  trending
  • 스팀 코인판 커뮤니티를 이용해주셔서 감사합니다.
  • 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.

帅哥/美女!想要参加活动但是不知道从何开始?关注寻宝团@cn-activity每日整理社区活动!倘若你想让我隐形,请回复“取消”。

你今天过的开心吗?这是哪里?你是谁?我为什么会来这边?你不要给我点赞不要点赞,哈哈哈哈哈哈。假如我的留言打扰到你,请回复“取消”。

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.