如何提升公链TPS?
任务描述:
BTC开启了区块链1.0时代,ETH将我们带入了区块链2.0,由于两者都没有很快的TPS,商业应用没有享受到区块链的优势,关于提升公链的TPS,请提出一些可行方案,并做详细说明。
公链TPS的瓶颈:
随着区块链越来越火,比特币、以太坊的网络阻塞问题也愈加严重。随后不少的技术方案与项目都着力解决此问题,以求更高的TPS(每秒交易数)。 区块链作为一个记账系统,数据的一致性是必须首先保证的,而保证一致性的过程,在传统数据库中,叫做数据同步,在区块链中,叫做共识。
区块链是一个分布式的系统,影响TPS的,主要就是网络,对于区块链来说,因为网络节点多,分散在全球各地;而且节点所处网络状态是不可控的,无法要求它们的网络带宽,甚至无法要求它们处于稳定的网络中。这对TPS来说无疑是灾难性的。
那些说能达到几十万、甚至上百万TPS的区块链,都仅仅是指建立在理论,没有真正的实践,我们来计算下:真空中的光速是每秒30万公里(相当于每秒绕地球7圈多),在海底光缆中的光速是真空光速的2/3,那么地球两边的节点,完成一次信号交换大约要多久?每秒能完成几次信号交换?这还不算TCP建立连接的3次『握手』,各个网络节点交换机的延迟。
有分布式交易所实测过,基于石墨烯技术的bitshare,实测下来TPS就是几十,完全不是大家传说的那么多,而且EOS的测试也并没有其白皮书公布的TPS那么高,也仅仅是稍多一点。
提升TPS的方案:
影响TPS的瓶颈的网络,那肯定优化方案还是从网络着手。主要为两个方向:
减少每次同步的数据大小
用布隆过滤器(bloom filter)与可逆式布鲁姆查找表(IBLT)结合来压缩每次同步的数据。石墨烯技术就是用的这个原理。石墨烯编码信息所用空间只是紧凑区块空间的10%。使用了布隆过滤器(bloom filter)以及可逆式布鲁姆查找表(IBLT)的新颖交互式组合,能减少同步区块的大小。
布隆过滤器的核心思想:就是用尽可能少的空间来存储尽可能多的内容,同时尽量保证准确率。布隆过滤器本质上很像哈希表,把一个大的空间映射到一个小的空间。
可逆式布鲁姆查找表的原理:首先,在一个区块中包含的所有交易,都会写入一个表(table)中,每一笔交易会始于表上每一个不同的点。然而,存在的交易数远多于表的空间(room),所以它会导致令人绝望的重叠结果。这使得IBLT显得非常地密集,但对于那些无法访问任何交易数据的人而言,IBLT是无法读取的,也是无法破译的。而那些拥有交易数据的人,可通过使用类似的逻辑,将他自己的交易填充到一个IBLT,然后比较IBLT上的重叠交易数据。如果两个IBLT最终看起来完全一样,这意味着所有的交易,是完全匹配的。即使这两个IBLT,最终看起来并不是完全相同,但只要交易集是非常相似的,这可能仍然是有用的。这种情况下,这两个IBLT可以进行比较,用这种方式,所有相同的交易就可以抵消掉一方。而IBLT中“剩余的”交易,往往可以用于重构丢失的交易。 因此没必要在对等式网络上广播完整的区块,节点可以广播更小的IBLT。这需要的数据也就更少了,速度也就更快了。
减少每次同步的节点数量
这个做法有点争议,因为区块链之所以牛,就是因为『分布式』,而减少或限制节点数量,无疑给系统带来了『中心化』的风险。但从技术角度上看,它对TPS的影响是很大的。在分布于全球5个大洲的7个数据中心做测试,当节点(Validator/验证者)只有2个的时候是性能最高的,TPS会随着节点的增加而下降.
因此现在的增强TPS的另外方案在于共识算法,TPS比较高的都是基于BFT开发的共识,今天我要提出的提升公链的TPS的方案为Gosig共识算法,它是一种可扩展的基于拜占庭的共识算法,这个算法经过数学逻辑验证,改进了BFT共识协议,可以使同时参与区块生产的节点达上万个。在带宽为 2Mbps-30Mbps 条件下进行测试,主网速度大于 4000tps,高于EOS测试1000tps,此共识算法由清华大学研究分布式系统关于区块链共识于2018年2月5日发表。
目前,已经有公链宣布其TPS理论值最高可以达到40万+。据介绍,其采用了Gosig共识算法,会使TPS随着带宽的增加而提高。至于安全性,Gosig共识算法下,区块链每轮出块会根据随机算法选出多个潜在出块者,计算出块需要私钥,别人不知道私钥,无法进行攻击。当潜在出块者完成出块计算,区块就完成了网络上传,这时候攻击也无济于事。下图是Gosig一期选举的流程:
那为什么Gosig共识能提升效率
共识是分布式计算理论中的一个经典问题。一种解决方案是BFT协议,通常是PBFT。比特币共识采用POW,这是另一种方法。PBFT和POW都可以在不信任的分布式网络环境中达成共识。主要区别在于BFT协议是确定性共识算法,无需等待,但是无法有效地增加节点的参与。后者依赖于几个(6)块的确认耗时。
这两者在效率上有很大差异。 BFT协议有高效率和低延迟,但是POW在任何时候支持注册和退出节点。Gosig对传统的BFT算法进行了革命性的改进。基于PBFT,Gosig可以支持数万个节点,可以随时注册和退出。Gosig也具有从BFT继承而来的正确性,完整性,安全性。该算法利用了潜在出块者投票机制。它利用密码学原理来避免浪费算力。聚合签名的使用有效地减少了来自节点的投票签名的大小,从而减少了带宽的使用。在最后它使用2轮信息交换,类似于PBFT Prepare / Commit,并获得最后确认所有节点中的一个块。除了足够的安全性,它显著提高了BFT共识表现。
简要的公链的架构图
参考文献:
Gosig共识算法论文 https://arxiv.org/abs/1802.01315
石墨烯开源技术文档 https://github.com/cryptonomex/graphene