该论文于2018年5月首次披露,提出了一种基于亚稳态机制(metastable)的共识协议族。作者是一个神秘团队Team Rocket(火箭队?)。
所谓亚稳态,是指系统在某段时间内处于稳定状态,但在另外一段时间内可能是不稳定的。稳态代表了系统的最低能量点,而亚稳态则是一个局部的而非全局的最低能量点。以下图中的小球为例,如果用比较小的力推小球,则会停留在位置1这个亚稳态上,而如果用比较大的力推,则会进入位置3这个真正的稳态上。
那么这个新的共识协议族有什么特点呢?
如何实现以上目标?主要依赖以下几种措施:
既然是共识协议,必然绕不过安全性和活性的证明。我们先看一下这两个特性的定义:
该论文证明,文中提出的算法可以提供强概率安全性保证,并且保证诚实节点的活性。所谓“强概率安全保证”,是指共识被逆转的可能性小到可以被忽略(甚至小于哈希冲突的概率),实际上POW提供的也是强概率安全性保证。
另外,文中的理论分析是基于同步系统假设,而实验过程则是在部分同步系统中完成的,实验结果和理论分析基本吻合。
下面开始依次介绍这四种共识算法。
该算法的灵感来源于Gossip(流言)协议,或者也被称为Epidemic(传染病)协议,主要用于数据同步。
算法流程参见下图:
为了算法的通用性,这里是以颜色冲突为例:R表示红色,B表示蓝色,⊥表示没有颜色(初始状态)。
可以证明,随着节点数n的增长,m呈对数级增长,因此可以有效控制通信量。
Slush算法是一种非拜占庭容错(BFT)算法,但却是后面三种BFT算法的基石。
Slush算法是无状态记忆的(memoryless),节点不保存和其他节点的交互历史。
Snowflake算法在该基础上,为每个节点增加了一个查询计数器,用于累积该节点对当前颜色的信任度。如果连续β轮都选择该颜色,则接受该颜色。算法流程参见下图:
具体修改的部分:
Snowflake记忆的状态是短暂的,每次颜色变化都会将计数器清零。为了使得系统更加难以被攻击,Snowball增加了一个置信度计数器,用于记录每种颜色被选择的次数。如果某种颜色被选次数超过另一种,则切换到该颜色,并等待查询计数器超过阈值。算法流程参见下图:
具体修改的部分:
Avalanche在Snowball的基础上引入了DAG。这会带来两点好处:
首先解释一下几个术语:
在下图中,阴影部分表标识的就是冲突集:
实际上,每个冲突集就是一个Snowball实例,但是置信度的计算方式略有不同,某笔交易的置信度是所有子孙交易的凭证值之和(c表示凭证,d表示置信度):
另外,节点在收到查询时,只有该笔交易的所有祖先都是它们对应的冲突集中的偏好选项时才会回复yes,此时称该笔交易时强偏好的(strongly preferred)。
注:上面这张图上似乎有一处谬误,T1的置信度应该是6而不是5。
算法主流程参见下图:
图中的“花写P”代表冲突集,P.pref代表该冲突集中的强偏好,P.last代表上次的强偏好。
Q代表已经查询过的交易的集合,每个交易只会查询一次。
那么,什么时候app(例如钱包节点)可以认可(accept)或者提交(commit)一笔交易呢?文中提到可以设定两种阈值,具体的数值由app来决定:
既然是DAG,那么就就需要为每笔交易选择父顶点。这个选择算法将会影响活性,并且对DAG的形状起决定性作用。
DAG的形状既不能发散成树状(会导致交易难以被确认),也不能收敛成链状(会导致往前追溯的深度太长)。或者通俗一点说,不能太宽,也不能太窄~ 我们看看文中设计的算法:
首先定义一个集合ε,包含了该交易所有的强偏好祖先:
然后定义ε的一个子集ε’,包含ε中所有的冲突集为1或者置信度大于0的交易。如果ε’中的某个交易,它的所有直接子交易都不属于ε’,则把它选为父顶点:
换句话说,优先选择子交易尚未被确认的顶点,或者子交易都存在冲突集的顶点。
文中使用马尔可夫链对网络中的状态转变建模。首先扫盲一下马尔可夫过程和马尔可夫链:
还是以颜色为例,假设系统中一共有c个节点,si代表网络中有i个节点是红色的,有c-i个节点是蓝色的。因此整个网络的状态就在s0, s1, s2, …, sc之间来回转换,并且当前状态只和前一个状态相关,这样就构成了一个马尔可夫链。下面依次分析四种算法的安全性:
论文首先证明了一个引理:Slush一定会在有限时间内收敛(说实话没看懂。。)
其实我们更关心的应该是如何得出这些安全参数:α,k,m。
其中α只要大于0.5就可以了,对于Slush来说k=1是最优的,那么就只剩下m了,也就是要查询多少轮。定义p为从状态si转换到si+1的概率,q为从状态si退回si-1的概率,r为仍停留在si状态的概率,有如下公式:
然后通过下面的递推公式就可以算出m了:
Snowflake和Slush有两个主要的区别:首先是引入了拜占庭节点,然后是需要等待连续确认β次。
这里首先提出了两个新概念:
Snowball和Snowflake相比有一个区别:节点会保存不同颜色的累积置信度。
这里的证明同样没看懂,反正最终得到一个定理:在相同的安全参数配置下,Snowball比Snowflake更安全。
这个就更水了,在极端情况下,即所有交易都在一个冲突集里的情况下,Avalanche就退化成了Snowball,既然Snowball是安全的,Avalanche肯定也是安全的啦。
网络中的节点有可能随时退出和加入,需要在这种情况下调整系统的配置以保证安全性:
把网络中的操作划分为多个纪元(比如根据区块个数),在每个纪元中有r个节点加入和r’个节点离开。最坏情况下,有r个拜占庭节点加入,有r’个诚实节点退出,按照这种极端情况重新选择网络安全参数,称为一次“view update”。
论文声称基于Avalanche实现了类似BitCoin的系统,然后跟BitCoin以及Algoran进行了性能对比。
安全参数配置:k=10, α=0.8, β1=11, β2=150
网络配置:2000个节点,36M带宽,20%的拜占庭节点
实验结果:
文中的最后一段还把目前所有主流和前沿的共识算法都分析了一遍,最后的结论当然是Avalanche完胜,吊打所有渣渣算法,哈哈。
这套算法是一个无leader、基于亚稳态、不依赖PoW的拜占庭容错共识协议族。算法本身是非常直观和易懂的,但是个人感觉理论证明部分不是很清晰,很多公式都不知道是从何推导而来的,另外关于安全参数的计算也没有非常严谨的数学公式。如果文中对安全性和活性的证明确实成立的话,这将是一个非常牛逼的算法,或许会对区块链领域产生更强的推进作用。
参考:
https://ipfs.io/ipfs/QmUy4jh5mGNZvLkjies1RWM4YuvJh5o2FYopNPVYwrRVGV.
https://en.wikipedia.org/wiki/Metastability
http://soft-matter.seas.harvard.edu/index.php/Metastable_state
https://zh.coursera.org/lecture/cloud-computing/1-4-safety-and-liveness-sFeOE
https://blog.csdn.net/carmencsdsndsiw9e3f/article/details/70236685
更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
或关注飞久微信公众号: