BFT共识
我们约定记号
C
1
,
C
2
,
.
.
.
.
C
N
C_1,C_2,....C_N
C1,C2,....CN代表系统中的N个组件。
x
i
x_i
xi代表第
i
i
i个组件的输入。我们将第一轮协议执行完后的输出记为
y
i
1
y_i^1
yi1,组件通过通信链路相互连接,将输出消息发送到全网。
共识目标
- 可终止(Termination)——每个无故障组件均可决定一个输出
- 一致性(Agreement)——所有无故障组件最终决定相同的输出y
- 有效性(Validity)——如果所有组件都已相同的输入x开始,则y=x
- 完整性(Integrity)——每个无故障组件的决策和最终的y必须由某个无故障组件提出。
** 完整性**条件主要保证的是共识结果不来自敌对者,在这个场景下,我们把被敌对者攻击的组件视作故障组件,并不是说组件能够运行就不是故障组件。
有效性是指整个系统的输出y是共识过程的合法结果,即是可以通过协议输出出来的。个人的理解是,假设我们要求每个输出y都是正整数,而此时受到攻击之后输出了-1,那么我们就认为这个输出是无效的。
一致性是指,这个输出可以得到系统中大部分组件的认可,在区块链场景中,组件就是各个参与方。
在BFT共识算法中要求系统中有超过
2
3
\frac{2}{3}
32的组件是无故障的。那么在更加精确的数学描述中,前一句话被表示成:
在有
n
n
n个组件的消息传递系统中,如果
f
f
f个组件发生拜占庭故障且
n
≤
3
f
n\leq3f
n≤3f则系统不可能达到共识目标。
证明略。反证法非常好证,真的,或者自己举个例子然后按照四个性质依次操作就行。