Algorand 系列二: Algorand 共识算法(2017)的设计原理-1

YOUChain Research

YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。我们持续跟踪的区块链学界和业界的前沿发展,致力于深入区块链本质,推动学术和技术发展。团队诚邀加密、算法、区块链、工程人才加入!

本文来自 yipast@YOUChainResearch

一、背景知识

一提到Algorand就想到了VRF抽签。关于VRF,已有专门的文章进行了详细的分析 传送门,本文专注于Algorand早期版本的共识算法设计原理。

Algorand在2017年发布的协议是基于拜占庭共识(BA),命名为 BA∗BA^*BA 协议,主要包含两阶段:

  1. 第一阶段:分级共识协议 GCGCGC

  2. 第二阶段:二元拜占庭协议 BBA* 。

首先,我们来了解下这两个阶段详细的背景知识。

1.1 分级共识协议 GC

结合 graded broadcast 与 crusader agreement,分级共识协议概念的定义如下。

在这里插入图片描述

gradecast 就是一个 (n,t)(n,t)(n,t) 分级的共识协议,包含了3-Step。而Algorand共识算法中第一阶段的GC包含了 gradecast 的最后两步。具体的内容如下。

在这里插入图片描述
Step 1:每个节点 iii 给所有节点发送 vi′v_i^{'}vi

Step 2:当且仅当 #i2(x)⩾2t+1\#_i^2(x) \geqslant 2t+1#i2(x)2t+1 时,每个节点 iii 给所有节点发送字符串 xxx

输出决定条件:

在这里插入图片描述

1.2 二元拜占庭协议 BBA∗BBA^*BBA

二元拜占庭协议BBA∗BBA^*BBA借鉴了Feldman、Micali提出的二元BA​协议

前提:诚实节点超过 2/3,即总节点数 n≥3t+1n \geq 3t+1n3t+1,其中 ttt 代表恶意节点的最大可能数量。

不管恶意节点如何操作,每次主循环的执行都有 1/3 的概率把节点带入协议中。

该协议有一个设置的要求:需要一个共同的随机字符串 rrr,不依赖节点的key (Algorand中是 QrQ^rQr)。

协议实际上是一个3步循环:节点间不停的交换布尔值。

节点可以在任意时间退出该循环。如果节点 iii 在退出前,在某步骤广播了一个值 bbb,退出后,其它节点就假装从 iii 那收到了 bbb 值。

另外,协议用了一个计数器 γ\gammaγ,标记3步循环执行的次数。

3步循环:

在这里插入图片描述

1.3 BA 协议

BA^{*}协议可以通过分级共识协议`GC、二元拜占庭协议 BBA^{*}来描述。

Step 1、2:每个节点ii执行GC,输入为初始值viv^{'}_{i},计算出一对(viv_{i},gig_{i})。

Step 3:每个节点ii执行 BBA^{*},初始输入为0(若gig_{i}=2,则为1),计算bit位outiout_{i}

输出决定条件:若outiout_{i}=0,则每个节点ii的输出为viv_{i},否则为⊥。注:输出即达成共识。

在这里插入图片描述
为何能在Algorand中使用 BA^{*}协议?

首先,Algorand中的通信都是通过广播,而BA^{*} 协议不仅仅适用于传统的通信网络,同时适用于gossip网络。

其次,Algorand最大的特性之一是节点可替换,而BA^{*}协议完全满足这一属性。

综上,只要满足节点可替换、能在gossip网络工作的BA^{*} 协议都适用于Algorand系统。Micali、Vaikunthannatan对 BA^{*}进行了扩展,使得其能在大部分节点是诚实的系统中高效运行。这个协议同样可用于Algorand。

二、Algorand共识核心

在了解Algorand共识的具体内容之前,我们先来看看它的整个思考过程。

在Algorand的设想中,理想的每一轮共识 rrr 都需要满足两个属性:

  1. 完全的正确。所有诚实的节点对同一个区块Br^{r}达成一致。

  2. 完备性。最大化Br^{r}中的交易集合PAYr^{r}

由于恶意节点的存在,同时满足这两个属性比较困难。所以Algorand采取了更实际的目标: 带着压倒性的概率,保证完全正确和完备性接近 hhhh>2/3h > 2/3h>2/3,是诚实节点的比例)。换而言之,优先满足正确性。毕竟,未在当前轮处理的交易可以在下一轮处理,而分叉是无法容受的。

于是,问题转化为协议如何设计来满足完全的正确,以及最大程度的保证完备性。

在这里插入图片描述

2.1 符号定义

r⩾0r \geqslant 0r0:第几轮

s⩾1s \geqslant 1s1:第几步

BrB^{r}:第 rrr 轮生成的区块

PKrPK^{r}:第 r−1r-1r1 轮结束后第 rrr 轮开始时的公钥集合

SrS^{r}r−1r-1r1 轮结束后第 rrr 轮开始时的状态

PAYrPAY^{r}:第 rrr 轮的支付集合

lrl^{r}:第 rrr 轮的领导者,它选择第 rrr 轮的支付集合PAYrPAY^{r},并决定种子QrQ^{r}

QrQ^{r}:第 rrr 轮结束时生成的种子,被用来选择第 r+1r+1r+1 轮的验证者。独立于区块中的支付集合,且不能被lrl^{r}操纵。

SVr,sSV^{r,s}:第 rrr 轮第 sss 步选中的验证者集合

2.2 领导者选择

参考了 Micali、Rivest 设计的微支付机制,Algorand规定节点 iii 只有满足以下条件,才能成为potential leader:
在这里插入图片描述
在这里插入图片描述

2.3 验证者选择

根据论文,从第 r−kr-krk 轮的系统节点中随机选择一部分来组成第 rrr 轮的验证者集合。节点 iii 只有满足以下条件,才能成为SVr,sSV^{r,s}中的验证者:

在这里插入图片描述

这两个条件说明了:

  1. 在BA协议的最后一步,至少需要给定数量的诚实节点对新区块 BrB^rBr 进行数字签名;

  2. 每轮只有一个区块拥有必需数量的签名;

  3. BA协议每一步都需要2/3的诚实节点。

2.4 区块的生成

领导者lrl^{r} 若是诚实的,则新区块的形式如下:

在这里插入图片描述

假若领导者lrl^{r} 是恶意的,则新区块会是以下两种形式之一:

在这里插入图片描述

  • 形式(1):有可能交易集合PAYrPAY^{r}=iii是第 rr 轮的potential leader,然而 ii 不一定是领导者lrl^{r}(当 lrl^{r}不展示它的凭证,导致其它节点无法验证时)。

  • 形式(2):在BA协议的第 rr 轮中,所有诚实节点输出默认值,即空区块BεrB^{r}_{ε}
    时,出现这种形式。

尽管形式(1)、(2)中都会出现交易集合为空的情况,但是两者是不同的区块,且在不同的情况下出现:
在这里插入图片描述

Algoran ^{'} 中第rr轮生成区块B r^{r}的过程

在这里插入图片描述

2.5 问题

在这里插入图片描述

交流群
受限于笔者的学识和能力,文章内容难免有纰漏之处。技术探讨,请添加加微信 kvdoth
备注「YOUChain 技术交流」,进群交流。

公众号
欢迎添加「有令」公众号,了解项目最新进展和技术分享。

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