YOUChain Research
YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。我们持续跟踪的区块链学界和业界的前沿发展,致力于深入区块链本质,推动学术和技术发展。团队诚邀加密、算法、区块链、工程人才加入!
本文来自 yipast@YOUChainResearch
一、背景知识
一提到Algorand就想到了VRF抽签。关于VRF,已有专门的文章进行了详细的分析 传送门,本文专注于Algorand早期版本的共识算法设计原理。
Algorand在2017年发布的协议是基于拜占庭共识(BA),命名为 BA∗BA^*
BA∗ 协议,主要包含两阶段:
-
第一阶段:分级共识协议 GC
GC
GC 。 -
第二阶段:二元拜占庭协议 BBA* 。
首先,我们来了解下这两个阶段详细的背景知识。
1.1 分级共识协议 GC
结合 graded broadcast 与 crusader agreement,分级共识协议概念的定义如下。
gradecast 就是一个 (n,t)(n,t)
(n,t) 分级的共识协议,包含了3-Step。而Algorand共识算法中第一阶段的GC包含了 gradecast 的最后两步。具体的内容如下。
Step 1:每个节点 ii
i 给所有节点发送 vi′v_i^{'}
vi′
Step 2:当且仅当 #i2(x)⩾2t+1\#_i^2(x) \geqslant 2t+1
#i2(x)⩾2t+1 时,每个节点 ii
i 给所有节点发送字符串 xx
x
输出决定条件:
BBA∗BBA^*
BBA∗
1.2 二元拜占庭协议 二元拜占庭协议BBA∗BBA^*
BBA∗借鉴了Feldman、Micali提出的二元BA协议。
前提:诚实节点超过 2/3,即总节点数 n≥3t+1
n \geq 3t+1
n≥3t+1,其中 tt
t 代表恶意节点的最大可能数量。不管恶意节点如何操作,每次主循环的执行都有 1/3 的概率把节点带入协议中。
该协议有一个设置的要求:需要一个共同的随机字符串 rr
r,不依赖节点的key (Algorand中是 QrQ^r
Qr)。
协议实际上是一个3步循环:节点间不停的交换布尔值。
节点可以在任意时间退出该循环。如果节点 i
i
i 在退出前,在某步骤广播了一个值 bb
b,退出后,其它节点就假装从 ii
i 那收到了 bb
b 值。
另外,协议用了一个计数器 γ\gamma
γ,标记3步循环执行的次数。
3步循环:
1.3 BA 协议
BA协议可以通过分级共识协议`GC、二元拜占庭协议 BBA来描述。
Step 1、2:每个节点执行GC,输入为初始值,计算出一对(,)。
Step 3:每个节点执行 BBA,初始输入为0(若=2,则为1),计算bit位。
输出决定条件:若=0,则每个节点的输出为,否则为⊥。注:输出即达成共识。
为何能在Algorand中使用 BA协议?
首先,Algorand中的通信都是通过广播,而BA 协议不仅仅适用于传统的通信网络,同时适用于gossip网络。
其次,Algorand最大的特性之一是节点可替换,而BA协议完全满足这一属性。
综上,只要满足节点可替换、能在gossip网络工作的BA 协议都适用于Algorand系统。Micali、Vaikunthannatan对 BA进行了扩展,使得其能在大部分节点是诚实的系统中高效运行。这个协议同样可用于Algorand。
二、Algorand共识核心
在了解Algorand共识的具体内容之前,我们先来看看它的整个思考过程。
在Algorand的设想中,理想的每一轮共识 rr
r 都需要满足两个属性:
-
完全的正确。所有诚实的节点对同一个区块B达成一致。
-
完备性。最大化B中的交易集合PAY
由于恶意节点的存在,同时满足这两个属性比较困难。所以Algorand采取了更实际的目标: 带着压倒性的概率,保证完全正确和完备性接近 hh
h (h>2/3h > 2/3
h>2/3,是诚实节点的比例)。换而言之,优先满足正确性。毕竟,未在当前轮处理的交易可以在下一轮处理,而分叉是无法容受的。
于是,问题转化为协议如何设计来满足完全的正确,以及最大程度的保证完备性。
2.1 符号定义
r⩾0r \geqslant 0
r⩾0:第几轮
s⩾1s \geqslant 1
s⩾1:第几步
:第 rr
r 轮生成的区块
:第 r−1r-1
r−1 轮结束后第 rr
r 轮开始时的公钥集合
第 r−1r-1
r−1 轮结束后第 rr
r 轮开始时的状态
:第 rr
r 轮的支付集合
:第 rr
r 轮的领导者,它选择第 rr
r 轮的支付集合,并决定种子
:第 rr
r 轮结束时生成的种子,被用来选择第 r+1r+1
r+1 轮的验证者。独立于区块中的支付集合,且不能被操纵。
:第 rr
r 轮第 ss
s 步选中的验证者集合
2.2 领导者选择
参考了 Micali、Rivest 设计的微支付机制,Algorand规定节点 ii
i 只有满足以下条件,才能成为potential leader:
2.3 验证者选择
根据论文,从第 r−kr-k
r−k 轮的系统节点中随机选择一部分来组成第 rr
r 轮的验证者集合。节点 ii
i 只有满足以下条件,才能成为中的验证者:
这两个条件说明了:
-
在BA协议的最后一步,至少需要给定数量的诚实节点对新区块 Br
B^r
Br 进行数字签名; -
每轮只有一个区块拥有必需数量的签名;
-
BA协议每一步都需要2/3的诚实节点。
2.4 区块的生成
领导者 若是诚实的,则新区块的形式如下:
假若领导者 是恶意的,则新区块会是以下两种形式之一:
-
形式(1):有可能交易集合=∅;i
i
i是第 轮的potential leader,然而 不一定是领导者(当 不展示它的凭证,导致其它节点无法验证时)。 -
形式(2):在BA协议的第 轮中,所有诚实节点输出默认值,即空区块
时,出现这种形式。
尽管形式(1)、(2)中都会出现交易集合为空的情况,但是两者是不同的区块,且在不同的情况下出现:
Algoran 中第轮生成区块B 的过程
2.5 问题
交流群
受限于笔者的学识和能力,文章内容难免有纰漏之处。技术探讨,请添加加微信 kvdoth
备注「YOUChain 技术交流」,进群交流。
公众号
欢迎添加「有令」公众号,了解项目最新进展和技术分享。