EOS高性能背后的秘密:BFT-DPoS
摘要: 本文为您揭示EOS高性能背后的秘密
EOS的性能一直是一个备受争议和质疑的问题。曾经就有老铁问队长:
“
一个没有中心服务器,每笔交易都需要多个来自不同地方的节点做确认才算完成的玩意,真的能实现百万TPS吗?
”
队长对这种质疑并不感到意外,毕竟2017年双十一狂欢节期间的交易峰值也才25.6万笔每秒,这还是基于中心化服务器实现的。
不过老铁们可能不知道,EOS的“总设计师”BM为了提升EOS的性能,也几乎是竭尽了全力,把所有可以优化的地方优化了一遍,比如把共识机制从DPoS升级为BFT-DPoS机制。
BFT-DPoS机制是啥?为什么这个机制可以提升EOS的性能?原力队长今天就来给大家介绍介绍。
我们先来看看DPoS机制。
DPoS机制
共识机制
区块链中的共识机制是为了解决“账本由谁来记账”这个问题而诞生的。在传统的交易系统,比如支付宝中,都存在一个中心主体来把该系统中的每一笔交易记录下来。
可是在区块链里没有中心,那么由谁来负责把大家的交易信息记录到链上?要解决这个问题就需要制定一个选择记账人的规则,这个规则我们就叫做共识机制。
第一条公链比特币用的是“工作量证明机制”。
这个机制是这样的,给你一个随机数,谁先把它算出来,谁就能拿到记账权。也就是说,谁的算力越大,谁越可能成为记账人。这样的结果就是,记账竞选人都陷入了一场“算力竞赛”中,不断堆积算力,直到最后大部分算力被少数几个人承包了。
记账机制
大家一看,觉得这不对啊,反正最后不是A、B、C记账就是D、E、F记账,干嘛还要途费工夫算随机数呢?我们不想等啊!干脆直接指定几个人给我们记账好了,有那时间算随机数不如给我们多出几个块。
相信老铁们看到这里就明白为什么DPoS的速度比POW快了,因为不用“算数字”。
不过,这又出现了另一个问题,由谁来指定记账人呢?区块链里没有中心,没有人做决策。那就大家一起投票决定吧,谁的选票越多,就由谁来做记账人。这个记账人放到EOS中就是我们常说的超级节点,选择记账人的过程也就是我们常说的超级节点竞选。
说到这里,老铁们对DPoS已经有个大概的认识了。不过还有个问题,怎么确保记账人记录的信息是正确的呢?谁来做这个确认呢?
由别的记账人来确定。
在原来EOS的DPoS机制中,选出来的记账人(超级节点)会以一种随机的顺序逐个记账出块,出块速度是3秒一个。记账人在记账出块的同时,还对之前的记账人生产的区块做一个检查和确认,以确保之前的记账人没有乱来。
当一个区块得到了14个确认(2/3的记账人),这个区块中包含的交易才算达到不可逆状态,也就是交易的最终完成状态。这个过程花费的时间是45秒。
比起比特币10分钟出一个块,要6个确定才算达到不可逆状态,和以太坊15秒出一个块,36个确定才达到不可逆状态,EOS的速度算很快了吧?
然而BM并不满足。
BFT协议
一方面BM团队认为,只有当轮到自己记账的时候才能对之前的区块做确认这种设计拖延了速度,为什么不能让记账人在记账出块的同时,就让别的记账人对自己生产的区块都做确认呢?
于是,BM团队给DPoS机制引入了BFT协议,也就是记账人在生产区块的同时马上对该区块签名确认,并让别的记账人也赶紧过来签名确认。这样一个区块从产生到成为不可逆区块的时间,就从45秒缩短到了3秒,也就是等待一个区块产生的时间。
另一方面BM团队觉得,3秒出一个块还是太慢了,于是把出块速度由3秒缩短到0.5秒,同时每个记账人(超级节点)连续生产12个区块再切换下一个记账人出块。从而保证了记账人在出块时不会受到网络状况的影响,能够连续以0.5秒的速度出块。
同时为了解决记账人之间的网络延迟问题,比如上一个记账人的区块我还没收到就轮到我出块了(这就会把上一个区块给忽略了,导致分叉发生),BM团队放弃了原来按随机顺序出块的设计,改用记账人相互协商后确定的顺序。这样就能保证网络延迟较低的记账人之间能以相邻的顺序出块。
这么一来,这么一来,一个区块从产生到成为不可逆区块,最多就只需要区块产生的时间(0.5秒)加上别的记账人签名确认的时间(BM团队通过测试发现这个过程可以在1秒内完成),也就是1.5秒。
介绍到这里,老铁们对BFT-DPoS机制已经有个大概的印象,也知道EOS的高性能是怎么来的了。当然,BFT-DPoS机制也只是支撑EOS高性能的其中一个支点,其他的拓展侧链、链间通信技术也能推高EOS的性能。但最终EOS是否能实现百万TPS的目标,依然有待实践的检验。
距离六月主网上线只能将近二十天的时间了,一切都拭目以待吧。
按照你说的BFT-Dpos模式,那就真的不是去中心化了吧