实现共识是区块链的核心,最早的基于拜占庭的共识依赖节点间的互相通信来达成共识,但是问题是通信开销与节点个数的平方成正比,没法拓展。后来中本聪在2008年创造性的提出了中本聪共识,这种共识采用概率性安全保证,有一定的概率推翻已有共识。
最近AVAlanche受到了各大媒体关注,IOSG投了几千万美刀,然后也是在7月15号以公募价格0.05$结束,一共发行7.2亿代币,其中流通的为3.6个亿,其余的留给团队,简直赚大发了,上线市值就3600多万!
那么其实,我们不禁要问,它的价值到底在哪里,现在公链的故事已经不多了,而Avalanche还能异军突起,这必然有其极为独特的地方,带着这个问题,我去研究了其相关的共识协议《Scalable and Probabilistic Leaderless BFT Consensus through Metastability》。
实现共识是区块链的核心,最早的基于拜占庭的共识依赖节点间的互相通信来达成共识,但是问题是通信开销与节点个数的平方成正比,没法拓展。后来中本聪在2008年创造性的提出了中本聪共识,这种共识采用概率性安全保证,有一定的概率推翻已有共识。但是基于中本聪共识的协议,成本很高,性能很差,并且即使没有新的决定需要达成一致,系统也必须一直运转才能保证系统的安全。
Team Rocket团队推出的Snow共识簇,则是两者的结合,首先他也是概率性共识,但是不需要PoW;同时,他去除了BFT共识中leader的角色,这样就使得整个通信的开销降到了,每轮O(n)级别,同时由于不需要leader角色,也就不需要知道网络节点的成员,而这点传统的BFT协议也是做不到了,他们需要了解全网的节点。当然,天下没有免费的午餐,这样的处理带来的问题就是冲突交易的处理会比较的耗时。
那么Snow共识簇的思路是怎样的呢?又是如何做到的?
首先需要说下模型基本的假设:
那么他的思路其实比较的好理解,类似于流行病传播那样,1个节点初始的时候会有一个状态,(比如状态是颜色,而且蓝色),然后交易到达后,就把自己的颜色改为交易的颜色,然后再先询问其他有限的k个节点的颜色是什么样的;其他的节点收到这个询问之后,就对他进行相应,同时再询问其他的k个节点。一旦一个节点收到了k个响应,并且有α(α大于[k/2],是该共识的参数)个节点是同一个颜色,那么就把自己的颜色改为这个颜色。然后他继续询问m轮,并最终确定他的颜色。
可以看下这个他们开发团队做的demo:
这个基础的协议成为Slush,Slush的有些比较好的性质:
但是Slush的问题是,他没有考虑拜占庭容错,比如说某个接待你倾向于一种颜色,那么恶意节点可以不断的把这个节点变成另一种颜色,使得整个网络达成不了共识。
那么这个问题该如何解决呢?其实思路也比较的简单,就是想办法让节点要改变的状态置信度很高,这样就不会来回变状态了,研究团队通过引入状态存储来进行解决。
通过在Slush引入一个计数器,来保存他之前的状态,除非计数器达到一定的门限β,节点才会改变状态。
计数器的规则如下:
然而Snowflake的记忆的状态是比较短暂的,为了提高置信度,就需要让颜色改变的时候,cnt不会立即重置。
因此,团队提出了Snowball共识。在Snowflake基础上修正cnt计数器为chit计数器,具体而言是这样的
Snow共识机制可以算是一种伟大的创新,他在中本聪共识簇和BFT共识簇上,提出了这种简单可理解的亚稳态共识。之前的性能提升很多是把DAG这种数据结构与中本聪共识进行结合,本身不能提供共识,只是通过让交易并发提高了吞吐量,而由于中本聪共识的局限性,不能改善延迟;而BFT共识受限于网络规模,局限也很大。而Snow共识实现了拓展性,吞吐量和延迟之间的均衡!
那么他是如何确定交易的序,并且性能到底如何呢,且听下回分解!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!