Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

区块链共识机制的深入剖析

枪手本色戮
65 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。3 q) Z( `2 X* b  p

' K  H; q9 D) \0 s5 m: z+ c# N; f( G    主要内容:
4 [5 Z1 S  T1 x( f9 U
4 K: _6 y# d/ r: m* ]    1.区块链为什么需要共识机制;9 N) l+ G; |3 j2 [1 Z* f! n

- f: Y6 b" l3 \6 o9 m* g    2.共识机制的工作原理和重要性;
; S  p1 U$ A6 x6 q' R# v
3 k/ ^" Y+ C# y, `" `$ R    3.共识机制的基本要求和不可能三角;
9 a- M; l6 c  u" Z; ^9 L  y' \8 ]8 G# p! B' T1 l3 b+ N1 K( C/ \
    4.共识机制的种类;
: x; ^  |- }. u% z
6 r8 {& I5 Q8 n0 l" m8 E    主讲嘉宾) S0 U+ [+ D8 D

& B6 W$ F4 A: h! |  E1 Z- o/ e2 ?    讲座内容, E5 K8 J8 Z3 p7 k/ e0 D* [
2 \- ~7 Z1 [+ {! @+ Q" [
    一、区块链为什么需要共识机制
2 A: F* ^/ Q8 G
! I5 O, W; L6 Y3 |    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。$ T! V. P8 N6 `
4 f7 |! A' p3 U( c8 ~: }
    1.什么是共识机制
' G* [8 D0 p! X: R+ W; G+ {4 C& b9 W- d# \6 ^& O
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。  g0 L( Y* [1 S: Z5 |9 t
! |/ N, B$ _; s% q& a( J) i
    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
' `" Q" v* W: a5 P4 i7 d" ?1 s/ i3 P  y. n' ?% n
    2.分布式记账及“挖矿”
# n5 A. d$ L: E6 f/ D9 G' ]" Z2 O. N. ?3 ^* M; p- [0 b9 F% W
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
, y- {/ O5 U1 @# S, F$ c. k
5 d$ ~8 Q# ]1 N9 m, K2 K. v    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。% v) t4 M; M" L1 ~. I0 b
4 H5 l# C4 s/ c; K8 M6 b. P  L
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。2 I( n; l  H3 x- A2 \% r8 r4 u" s
6 S' N" |3 a6 s& q% g9 v2 i
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。0 O3 r+ w6 y8 o" [: i0 H& K

5 l6 w$ M1 e! w  Y# }    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
/ q" O1 e5 a# u, ]) O4 p4 h. _! H' H% E
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
9 j! }( t: K. \$ [+ q- i: f) B+ |
. t' L6 N. P/ \! {8 D: ~' I    二、共识机制的工作原理和重要性
" E0 h( T& D- z7 ?
$ \' P" |! w$ U5 I& ^    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
% n) ?# n, e; ?$ u* _* t$ x
  ]6 Q4 [2 G# z3 b: D# W    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。" j1 X# |1 U% J( L6 J. W
/ O# Y* f" z* m( ^$ R& D# b: N  C
    那么,"共识机制"是从什么时候出现的?
5 t% j9 M7 ~2 Z: U: M/ h# w! V' e9 X" L
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
6 g' \" N2 {6 r0 A: ^3 X5 \* q, M8 [7 c
    1999年,Jakobsson发表了关于PoW的论文。4 R! R) P; V/ ^7 P9 C( V$ c5 \
: l* }  [  h5 u- M
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
+ m' Z+ Q$ Z  b: g  J2 _$ o
  \" Z9 S1 x2 T& K% c3 m% \8 @$ n    2012年,PeerCoin项目开始采用PoS作为共识机制。% Q: f0 R+ p9 N! W) J: k, {

* T* `6 e5 W' ^3 {    2016年,Tendermint项目开始采用PBFT作为公示机制。
) r) g: x# \9 u* i1 H. v! `
6 J- N# X  H" \* f0 y% c3 I" Y+ l    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。) t/ _+ N, x$ a( D6 \

) W/ |+ M; k3 c/ e% P! V    三、共识机制的基本要求和不可能三角# M- c' n/ @7 X: k

, o2 W/ I& W% \7 ^2 J5 o; c    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。
, T& j7 \& R" L5 u% T; A' O: B
, k% |7 s+ w- n0 [7 m; h# U' X. }4 S    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。2 {& C$ R$ [/ u, }6 P) w
2 {! ]) V& a1 M
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:& O1 S! |) C+ _, s0 U; S1 @7 ~; G1 y1 N

4 w/ L7 k9 Q9 @    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
5 C  ^- W& d3 R7 Y2 d/ X0 b
+ V( `/ Q5 U8 m5 o& P0 S    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。+ N3 U7 ]+ b* t
. v3 ~8 `( E9 f8 }- g) z9 n
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。# L  Y( ^9 A, ~5 F8 B" ~
2 t; ~$ S, q3 i1 h5 a9 x5 S
    四、共识机制的种类
! ?4 l0 ~! _$ d" ~  q+ s7 v5 R- H3 ~5 t# g
    1.POW(工作量证明)4 k: o0 ]5 }( V) z

2 F, v, D1 {7 c8 i    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
( X2 A5 }% n: C/ ?# W: }0 K! }- _. A8 K" Z& O
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
3 f, \+ X0 K0 \& O  n' L
! S1 b3 ^; p( h" ]0 }    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。4 S# d3 Z6 K9 Z# k6 i
& N9 l( L" Y, I; K2 I; _
    现在关键来了,工作量证明是什么意思?/ x- q* e# B( O. T0 d
7 j0 Z/ E) s' W+ Q6 H
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。$ P: A- V" _( A( F
& C& n/ O# r3 V- w. W) V, n" C
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
+ \; l. ]1 Z) W7 S5 m8 C0 n4 C* {+ U0 r+ X) o" d: R0 h
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
+ d# g+ z! ~- _6 o
* t2 o$ n) a! b% J5 E& s/ N    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
: G9 `* @) {2 r  f/ M
% x+ ~3 O) s/ x    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。, C' B5 \- N/ J2 v6 E( k! `

* T" _. R8 l- ^. f    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。  F! Z$ v+ D; g, I& L
. c0 {. G4 F+ L7 Q1 F0 r3 _! {' s9 p; {
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。3 u: L) @' c5 M. L9 a+ @
0 z9 R. l- Q: z7 Y7 g4 d
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?. l0 u! `( P0 E5 z9 J- R, _
1 c3 S# N# t$ b3 O* o9 i6 |
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
3 Q3 O! z: G, O$ _+ y1 K4 {
$ u3 l" s8 H  {+ V5 l& X1 g& x/ w    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。& w4 Z# {/ @# O' D8 u
0 Y; E3 ?8 Y. G( I1 @& N7 A4 e% Q( O
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。
! Q( W7 D9 M6 p# ^: r: {+ E. Y
; n( R# j/ C# {! B: y, {    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。  z" Z# z6 @4 \( W& q

9 m5 x$ r, z1 _* L    PoW的优点
: {/ I1 D: h3 U5 J7 B9 u# d) d# R2 f' c* _2 O
    1.架构清晰,有效可靠。
# \# [' S" U( @, C* g: T5 M( X+ z; H# s: l  b: v
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
3 _* _( f8 {' i3 D& Z  L7 M2 P2 z  A0 b" V7 s: s
    3.公平:这种机制类似于多劳多得,干的多,收获也多。3 E6 L; e/ m6 w8 e6 n

% c' a7 N0 n: s- q( Q. [9 `5 E    PoW的缺点' p5 j( r9 P/ s4 ^1 H8 C2 Q

! B1 g# r4 B% Z7 W. k# a    1.数据冗余:所有数据都要在所有节点备份一遍。
$ J: D' G0 f" z8 b2 E: I  G) e% h% _/ c6 ^* H) L/ l
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
6 ~; i, i9 I  @% u9 F; O/ R$ X* m4 O& G8 I4 X3 _, R
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。# I& Y# Q7 ?2 g; c% N

* U; l- b8 F" B1 W    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。5 L# A( |# Y7 @# ]/ W

* D6 D8 w7 ]- `) t0 W    2.POS(权益证明)" r: g( [% Q$ s
& R( _3 g7 l% p4 P% a" B
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
4 Q5 B! r- H8 N& V/ ^8 I: t
4 I) t8 B+ ~+ U    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。8 u8 u; ?/ s5 r
# s4 e" ?7 |) o4 C1 D  I
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。+ {% Y' C4 K- `3 m

# @4 f- X2 n- V    这样的好处:
. B2 j; u0 V7 i3 @
  ?, _; o/ X& w8 e; k1 P" A    1.不需要算题,所以节约能源。
% [: F: c5 Y2 A/ d* O* t
6 a  X. d" d. U* t4 z( L: y    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。' W2 ?* j5 S0 U" Q% [6 e

0 C" C+ N1 K* V" i    缺点是:- }6 J7 `, n6 t" z2 M

6 {* L" _7 `  b1 G( E    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。5 k' \% b8 [% g- V

+ l& E/ n( i8 k, Y  m( H( O    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
% }0 s- e' H2 u, f6 k* r% Z* w; I2 O; d5 @- p
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。3 N" J5 b9 \0 v0 S
1 [4 q0 i4 E. Y0 G) Z
    3.DPOS(代表权益证明)# a  N9 J. S) G8 Y! U* x& ~

) v; U$ ^- {% T5 F    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。' J5 R: n; O1 R5 P
0 i' d" b6 n2 y) Z9 |! S% g3 T# N
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
5 O) Q) r/ ~% b! q/ ?1 @/ i$ R+ H. P: C" L' _
    这样做的好处是:& S3 k" ~1 Q, f" ~; _- \: O

' g% K2 N( r9 e' r: Q    1.不需要耗费能源和硬件。8 G7 G: q' I( u7 a. o7 Y- I( K% M
$ B2 [  _) t- m8 o( s  b
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。
1 E& |1 p) p. L' X$ B5 u8 n% X( ]9 B6 j. Y2 S
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
# ^; X/ N: |: s* f' d, R1 Y) Q
9 _9 p. b+ I! d  J1 w1 n    但是问题也很明显:
: f) ^$ \9 ~; }; b( X5 e
1 }, l9 Q- @- L5 j    1.这已经不是去中心化,而是完全的中性化了。
; x* x- Y2 b' X$ z& ^9 f) m. a
5 D- l5 k9 d* P7 h! W/ i2 [: }6 S$ J7 F    2.节点选举过程存在巨大的人为操作空间。  j1 l1 X4 r2 F

  f- q* e+ x+ |1 a$ P% I: o    4.PBFT(实用拜占庭容错)2 f5 Z! W8 g1 `& g, p- c$ S

  P! j' b* B( _9 N! D% l8 Y    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。7 u" l; J) E( E* t/ V+ n# U+ l
$ S% o3 N. X5 o% F& Q  P
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
6 q  F  m' T0 R* ^# y$ Q/ R6 }2 a4 `, e! G
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。/ n2 f9 y; b  o/ W

2 I  T: J8 d9 E; s: o1 h    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。
+ U! r0 Z" q4 Z, r) }" L+ n* b) `3 U/ `+ [' u- U. ], c4 S4 Z2 Z
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
/ Y- I- V4 X2 A+ _; \
* q. u7 [( f6 w    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。7 h, m2 e. Y$ Z+ G2 r4 l8 X+ @

. W- W0 f) D$ Y% P' _    PBFT的优点:它不需要矿工,不需要确认,节约能源。% z* N) _5 g& z* ^2 K
( I$ p' z4 M( L* R$ a3 \* y% ?8 B' x
    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。
" b, h5 F  P2 ]  V  `+ y- v% I* }5 }' j
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11