万向区块链技术研究报告 | 雪崩协议 (Avalanche)技术调研

区块链技术迅猛发展,新想法、新概念、新名词层出不穷。万向区块链因此推出“技术研究报告”专栏,定期与大家分享在区块链行业创新及热门技术方面的研究成果,带领大家第一时间研究学习新技术,紧跟技术发展趋势,探索发掘技术的应用价值。

在《雪崩协议 Avalanche 技术调研》一文中,我们将共同探索Avalanche共识算法的工作原理、优缺点及其在联盟链中的应用场景。

本文作者:万向区块链通用架构技术部 陈炫慧

导论

2015年5月,康奈尔大学发表了一篇《从“雪花”到“雪崩”:一种新型的亚稳态共识协议族》的论文。它的研究团队是Team Rockets,共识算法取名叫 Avalanche,能非常形象地描述该协议的共识过程,就和雪崩一样,开始是随机崩塌(随机样本结果统计),最后大面积崩塌(即共识形成)。它的核心理念是通过不断反复对网络中的节点进行抽样并收集它们对某个提议的响应,最后可以把所有的诚实节点导向到同一个共识结果。

协议可以达到 1300 tps,交易也只需要 4 秒的确认延迟。

Demo: 

https://tedyin.com/archive/snow-bft-demo/#/snow

雪崩协议工作的主要原理:重复抽样投票(Repeated sub-sampled voting)

 

直观举例为:

房间里有很多人,大家一起决策中午是吃披萨还是烧烤。某些人初始可能选择披萨,另一些人初始选择烧烤。最终,大家的目的是就中午吃什么达成共识,即参考大多数人的意见。

雪崩协议的解决方案是:每个人随机询问房间内的一部分人午餐想吃什么。若有多于一半的人选择披萨,则其也选择披萨——即采用其所询问的大多数人的选择。每个人都重复以上过程,每轮会有越来越多的人具有相同的选择。  足够轮数之后,可达成共识,每个人都选择同一选项。

亚稳态 Metastable

所谓亚稳态,是指系统在某段时间内处于稳定状态,但在另外一段时间内可能是不稳定的。稳态代表了系统的最低能量点,而亚稳态则是一个局部的而非全局的最低能量点。以下图中的小球为例,如果用比较小的力推小球,则会停留在位置1这个亚稳态上,而如果用比较大的力推,则会进入位置3这个真正的稳态上。

• 绿色(Green):消耗很少能源

• 安静(Quiescent):没有交易时不需要工作(出块)

• 高效(Efficient):节点交互复杂度O(knlogn) ~ O(kn)

 

如何实现以上目标?主要依赖以下几种措施:

• 并行共识模型:不使用单一复制状态机(RSM)模型,每个节点维护自己的RSM(可以互相转移所有权),系统对有关联的交易只维护偏序(partial order)

• 反复随机采样:引导诚实节点产生相同输出

• 亚稳态决策:亚稳态决策可以使得一个大网络快速推进到一个不可逆的状态(虽然不能100%保证)

文中提出的算法可以提供强概率安全性保证,并且保证诚实节点的活性。所谓“强概率安全保证”,是指共识被逆转的可能性小到可以被忽略(甚至小于哈希冲突的概率),实际上POW提供的也是强概率安全性保证。

Slush(雪泥)

为了算法的通用性,这里是以颜色冲突为例:R表示红色,B表示蓝色,⊥表示没有颜色(初始状态)。

• 初始状态:没有颜色(⊥)。

• 收到交易:染成交易中指定的颜色,同时发起查询。

• 查询:在网络中随机选取k个节点,如果规定时间内没有收到k个回复,再多选一些节点,直到收到k个回复为止。

• 节点收到查询:如果没有染色,染成查询中指定的颜色,并回复该颜色,同时自己也发起查询。否则直接回复自己当前的颜色。

• 决策:收到k个回复后,如果某种颜色所占比例超过阈值α(0.5~1),则把自己染成那种颜色。然后继续进入下一轮查询,一共查询m轮,决定最终结果。

特点:

• 无需记忆:节点每轮询问时不需要保存其他节点状态。

• 相对于传统的共识协议需要询问(后面称为采样)每个节点,它的采样很少。

• 在任何网络环境下都能持续进行,这是由于重复采样会放大样本的不平衡。

• 如果询问的轮次m足够大,Slush能够保证所有节点的有很大的概率达成状态一致。

但是Slush的问题是,他没有考虑拜占庭容错,比如说某个接待你倾向于一种颜色,那么恶意节点可以不断的把这个节点变成另一种颜色,使得整个网络达成不了共识。

那么这个问题该如何解决呢?其实思路也比较的简单,就是想办法让节点要改变的状态置信度很高,即提高节点修改当前状态的难度,这样就不会来回变状态了,研究团队通过引入状态存储来进行解决。

note: 0.5:0.5 的时候会重置,但是随着轮数的增加一定会有一个倾向,因为0.5^n 的概率非常小。

 

Snowflake(雪花)

Slush算法是无状态记忆的(memoryless),节点不保存和其他节点的交互历史。

Snowflake算法在该基础上,为每个节点增加了一个查询计数器,用于累积该节点对当前颜色的信任度。如果连续β轮都选择该颜色,则接受该颜色。算法流程参见下图:

具体修改的部分:

• 每个节点维护一个计数器。

• 每次颜色发生变化时,将该计数器清零。

• 每次查询成功(收到αk个回复),并且颜色不变时,计数器加一。

• 如果连续β轮都选择该颜色,则接受该颜色。

当给定一个ε-guarantee的拜占庭环境,Snowflake可以保证Safety和Liveness。

 

Snowball(雪球)

Snowflake记忆的状态是短暂的,每次颜色变化都会将计数器清零。为了使得系统更加难以被攻击,Snowball增加了一个置信度计数器,用于记录每种颜色被选择的次数。如果某种颜色被选次数超过另一种,则切换到该颜色,并等待查询计数器超过阈值。算法流程参见下图:

具体修改的部分:

• 对每个color都增加一个confidence counter,例如d[R]、d[B];

•  每当一轮Query返回的k个Responds某个color'满足 ≥ αk,将该color'的d[col']+1,如果d[col’]最大,则将自身col更变为该col’;  进一步地,如果col’和上次Respond通过阈值的lastcol不一样,则更新lastcol为col’,并且重置cnt; 

• 如果col’和上次Respond通过阈值的lastcol一样,则cnt+1,当cnt大于β时,则最终确定该节点color

 

举例:

如果某个节点每轮query 后拿到已经满足大多数的结果分别是RRBRRRR,最后cnt 是多少?d[R] 和 d[B] 是多少?此时若取cnt阈值为2,是否会有col 被敲定?敲定为什么颜色?

相关的推导过程已展示在上表中,相信大家可以通过推到获得答案。

添加confidence 虽然会和snowflake 一样可能会改变计数器cnt 的状态,但并不会改变自身所选择的颜色来影响别人的选择,从分布式的角度来看,添加confidence 之后,每个节点选择了一个颜色之后都很难被改变,从结果可以看到,节点对外所选择的颜色一直都是红色。

Avalanche(雪崩)

Avalanche在Snowball的基础上引入了有向无环图(Directed Acyclic Graph,DAG)的存储结构,即在冲突集中使用snowball 协议共识出一笔交易。这会带来两点好处:

• 更高效:对DAG某个顶点的投票隐含了对“从创世顶点到该顶点”这整条链的认可

• 更安全:DAG把各个交易的命运交织在了一起,因此共识更加难以被逆转(需要更多诚实节点的认可)

首先解释一下几个术语:

• 祖先集(ancestor set):每个交易可能有一到多个父交易(parent),从它们的父交易一直追溯到创世顶点过程中的所有交易组成该交易的祖先集

• 子孙集(progeny):该交易的所有子孙后代交易的集合

• 冲突集(conflict set):如果两笔或多笔交易发生了冲突(例如使用了同样的UXTO input,即双花),那么它们组成一个冲突集

• 凭证(chit):如果某笔交易查询成功(超过阈值),则称该交易收到了一个凭证,否则凭证值为0

Avalanche 会将每笔交易存储在一个DAG 中,DAG中每个元素可能有多个父交易,并且需要注意的是父子关系(parent-child relationship)不代表在应用层面相互依赖。

为了避免共识结果中包含冲突交易(conflicting transactions),在Avalanche中定义了冲突集,Avalanche中的每笔交易都属于一个冲突集,冲突集中也只能有一笔交易,每个冲突集就是一个Snowball实例,但是置信度的计算方式略有不同,某笔交易的置信度是所有子孙交易的凭证值之和(c表示凭证,d表示置信度)。

每个节点需使用snowball 协议从冲突集中共识出一笔交易,当这笔交易的confidence 达到一个阈值时,即可认为这笔交易被敲定了(作者在这方面给出了证明,详情可去查看原文)。 

具体的算法如下:

那么,什么时候app可以认可(accept)或者提交(commit)一笔交易呢?文中提到可以设定两种阈值,具体的数值由app来决定:

• 如果冲突集中只有一笔交易(即没有冲突),置信度超过β1即可提交,称为“安全早期提交(safe early commit)”

• 否则,如果冲突集中有多笔交易,根据Snowball协议,需要收到超过β2个连续查询回复才可以提交

 

Snowman(雪人)

可将以上雪崩共识协议(Avalanche consensus protocol)改为线性链(linear chain),即要求每个顶点只有一个父顶点,这样可确定顶点的全局排序,适用于如智能合约的背景——需要了解两笔交易之间的先后顺序。用于线性链的雪崩共识协议(Avalanche consensus protocol for linear chains)的实现,称为Snowman,即对应的为C-Chain 和P-Chain采用的为Snowman共识。

Avalanche中没有主导节点(leader),任意节点都可提交交易,对每一笔交易进行投票,从而让整个网络更加牢固和去中心化。

 

Vertices (顶点)

顶点(vertex)类似于线性区块链(linear blockchain)中的区块,包含了父区块中的哈希以及 交易列表,支持将多笔交易打包并以小组而非单个顶点的形式被投票。若节点收到对某个顶点的投票,则可认为是对于该顶点中所有交易的投票。投票具有可向上传递性。

关于顶点的具体解释如下:

当顶点中所有的交易被认可后,该顶点即被认可。如果顶点中的某笔交易被拒绝,那该节点及其子节点都会被拒绝。如果某个顶点被拒绝,顶点中的任意一笔有效交易可以被发送到新的顶点中,新顶点不可以是被拒顶点的子顶点。随后新顶点会被追加到已有顶点之后。

 

Finality (最终性)

Avalanche 共识在一定阈值内,在概率上是安全的。即,改变系统参数可以将节点间意见不同的概率调至最低。

常见的区块链需很长时间来等待区块固化,但Avalanche中的认可或拒绝是具有最终性且不可逆的。

 

通信复杂度

• Snowflake & Snowball: O(knlogn) (已被“Gossip“证明)

• Avalanche: 每个节点O(k), 总复杂度O(kn)

 

两大创新

Avalanche中的2大创新分别是:

• 抽样(subsampling):通信成本低。无论是20个节点还是2000个节点,某个节点发送的共识信息数量是恒定的。

• 传递性投票(transitive voting):即给某个顶点投票等同于给该顶点的所有祖先顶点投票,这样有助于提升交易吞吐量。每个节点实际上集合了很多投票。

 

可能存在的问题

1. 随机抽样达到的是非确定性共识

随机数对于区块链技术来说很关键。本质上,分布式账本的核心问题就是随机选择出块人的问题,这个随机性要能被全网确认,并且不能被操控,也不能被预测,否则恶意节点可以通过操控这个随机数从而达到操控整个链。在Avalanche中,随机抽样是非常关键的,但是对怎么随机抽样却没有像 Algorand 那样详细地描述,随机抽到样本的整体代表性也没有详细的理论论证,因此其所达成的共识只是一种概率性的共识,并非确定性共识。

2.冲突交易不受保护

如果用户不小心将一笔交易发送了两次,Avalanche 是无法在这两种交易之间做出选择的,会直接导致这笔钱丢失,这点被Avalanche 当成能抵御”双花”攻击来做宣传,但是实际应用中,用户无任何主观恶意下,不小心将一笔交易点击两次发送的情况还是会经常发生,如果直接将用户资金丢失的话,每次发送交易都得非常小心并等待系统回复才行,这将大大降低交易的速度。

3.需要大量参与者的支持

随机抽样所达到的共识必须依赖大量的节点支持才能算是有效,并且这些节点还得时刻保持在线,以便被随机抽取到,这在现实的自由网络下是不太现实的,如果采用云服务器的方式,整个网络运作成本将会非常高。

 

创新联盟链使用场景

结合Avalanche 方案可以解决大部分联盟链使用的共识通常需要所有节点验证同一笔交易,当存在大量的分布式节点时,冗余的验证及交易的转发将极大影响交易的吞吐量及网络中交易传播性能的问题。使用雪崩协议中的Avalanche共识,结合联盟链使用场景,可创新发明出一种基于Avalanche共识的联盟链改进方案,该方案的特点是每次进行共识时只需要固定k个节点参与投票,k个节点达成共识即可传播到全网达成共识,不需要网络中的全部节点共同对某一笔交易达成共识。

 

参考资料

https://ipfs.io/ipfs/QmUy4jh5mGNZvLkjies1RWM4YuvJh5o2FYopNPVYwrRVGV

https://docs.avax.network/learn/platform-overview/avalanche-consensus

https://www.136.la/nginx/show-203738.html

https://zhuanlan.zhihu.com/p/162741817

https://www.pianshen.com/article/1627496811/

https://www.jianshu.com/p/d3a6b291880f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://zhuanlan.zhihu.com/p/52981124

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章