Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
61 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。  {5 u+ F% M- t4 {. m0 y
, ^6 G& t' i' b5 ]
    主要内容:
# i5 m9 S1 w- ]. ?' P2 L  A2 J% j  r% }( Q% ]
    1.区块链为什么需要共识机制;( w# i  }5 g, D6 e. b3 x2 d

# ]: G7 u, [7 z, U    2.共识机制的工作原理和重要性;
9 i* e( X) u5 |8 {* U4 X& u7 N; T5 K$ X, g" H
    3.共识机制的基本要求和不可能三角;
+ M7 G6 }9 s9 Y; |( U* ?6 d# G& G( g9 a
    4.共识机制的种类;
: W+ r: ^0 e% F0 x( C+ M. G
+ N0 u7 ~2 n" m% e, {8 d# e    主讲嘉宾! ]$ G  S+ w8 O9 W. o
# Z& Y* V- N, S
    讲座内容+ K5 ^% Z) Q( ^1 g, b
4 B0 O; R* H; q+ j  `3 m
    一、区块链为什么需要共识机制' X, Z) F; u3 |  r) d5 J

: c7 Z) B# V, I4 {4 L; k    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
3 j4 _6 i; `" M% r& M# f2 z7 P
  w6 H" z! ?% v" G; {) K    1.什么是共识机制
% N5 {3 s8 R& \
' r5 j3 [! ]1 E- H& a0 I    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。/ `9 {8 q/ b% `7 [' w

( z0 r5 O. e! P* `; h) p% g    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
) V6 x7 l+ p, `, ~# f
, b" Q6 P" E) N! l% |; M1 x) S    2.分布式记账及“挖矿”# e5 Q% U. m2 T) e
7 j0 b4 a: q5 h( P7 H+ {
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。+ `8 ~$ A1 u1 j8 l$ I
: @/ M5 c2 a, N+ d
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
8 O2 ^1 H6 A; E5 U1 I7 v: r9 I* k# C5 I# @. B7 X
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
, A# C# e5 }, X( ^
- ~& g. d9 b: x- w- C- U    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。
2 j+ }0 o% A% b4 O" D# u) ], L2 _/ q5 C7 B, g) x; t3 L& f5 j
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。) W6 g. E  Y* _7 }! l8 d  N
# t& f4 O7 H1 S  N% H7 a: O) E8 i' i
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。( U0 R' L: z" X$ k+ W4 x
# m: {2 E6 N- D  Q% s. C
    二、共识机制的工作原理和重要性
- R5 L/ X( E# Z$ G+ |, i8 p" ~- l, g, W0 G: v
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
0 a5 v- w* w( M; q5 Q5 ]5 ?, O3 m: m2 ?
    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
' X9 C3 _2 z3 }: U5 R
) N/ j, }# F' \, b( V# U4 s    那么,"共识机制"是从什么时候出现的?
4 p7 c, H9 o7 s( X1 a5 p4 M3 A, x& S% U/ I+ V2 t
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
# X3 m! j0 T. F, Z% `
) @* O  U1 Q$ C6 d* A8 y. _' J    1999年,Jakobsson发表了关于PoW的论文。
) m+ {; Y- L: V6 x) l$ [; {% c5 o2 o
; o1 ^- C# C! l8 Q2 g4 I! ^7 U    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。4 x  @- Q. s3 x8 T- [2 E: Z
& S% c* U) v' I0 D
    2012年,PeerCoin项目开始采用PoS作为共识机制。$ P* p; \: |* m1 u
$ e+ H& K. z! g
    2016年,Tendermint项目开始采用PBFT作为公示机制。
) p" p) l" Y2 v; n; u1 D( c0 A
; ]9 t5 s  j' {  ]2 H, @. ]9 N! a$ J" Q    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
( P4 D4 S2 {& d! f& D" ?
7 [  ?9 Y2 F$ F    三、共识机制的基本要求和不可能三角0 j. e8 _9 i9 n( P, Y
2 V5 s' }1 V6 f: ?+ _3 g' U9 E
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。  R9 o  ~. J/ ]0 b6 L- z) q; v

1 q" [. ~6 G5 \    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。9 _2 N. z4 l4 w3 E$ }
, \$ L" F( k' N2 z4 J* y, i4 U, }* ]
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
& q# N) s) W- |2 W
1 ]) h3 w& O$ v+ j  t    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。3 d% m3 N& _6 o) u' A$ z5 W  N( I' F5 f
2 v. r7 X2 x4 E! p* q& a: z
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。( Q! X6 M- J+ R/ _5 W1 M) ^6 v6 s

; Y, P7 }$ t* c" d; `( q% e7 ^    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。/ m  y# M! @7 y* j
& N* {3 Q& G) t. o- S1 {
    四、共识机制的种类
! ?2 ~8 F/ I  k3 a
! }" O8 E/ g% s# l! ^" C    1.POW(工作量证明)7 O0 |% o$ S; i) a% g
& O, @' p' H7 p. q" p3 S; V% D
    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
! @" g( c( p& w. Q3 w8 L+ c0 \2 z- M, u! N4 J7 ?6 V% E
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。) y( S+ B  J$ T7 a9 `& Z
' o) f! D" t. q
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
9 ~0 M# m, i. J& Z6 b4 m" l" i; [7 ~. O; c, \# X. ^; F3 ?
    现在关键来了,工作量证明是什么意思?
9 Q. ]6 x9 W( @8 h# |  }" [7 L  F) ?. ~+ ]! R, D( N
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。1 h' ^* p' R; X

$ ?8 u  [; Q& _. ?- |) a    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
, h, H, Y. K) D4 r# ]5 v& N$ t' R5 O: U3 l) a$ ~/ U3 ~9 y
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
7 `. V, e1 W8 J. q1 k4 m
! g# z; J* e- U3 W: g. t    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。4 \- Q7 d* F* R

6 u% p1 B. ^$ P9 O* i6 w    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。" C$ Z" `4 V: {
6 ?/ q  H3 O% G6 O( M
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
- D+ q( ^' e: b7 E. @( c/ d( p, V7 S; Y
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
- I* {& y9 ]4 _; ^2 s0 D( Y, X5 I0 I+ C/ z
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?# }/ L, E4 K  Y0 g. |/ z
; L. \3 T1 G8 {* l' |
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
8 }/ V( r7 c( m+ a8 M& }: f! i; |3 k: z6 e9 H/ p2 s
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。  W0 U& K" J' y9 s

. V8 _3 H. E; v1 _- S' ^    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。; c# \' |1 t4 R/ [( {
9 D/ z) C% ?6 @6 v# R' |
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。; B8 G( A7 O' z! w

$ B2 G1 Y& s& i/ n3 R  X+ X8 }' Z    PoW的优点
# o0 O7 T. G4 z- d' |3 F( q+ Z7 W. p
% N& C$ M; E" V/ l: g% K    1.架构清晰,有效可靠。
. @( Z; @' e# x# y& L. \% J' \" M' w% u% K; C% e3 g# f
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
! v5 w2 F0 v8 L# [! }& ^: ^9 `  @9 a) P. ?0 C; f- D' p
    3.公平:这种机制类似于多劳多得,干的多,收获也多。) [- I7 o+ Y3 c, ]6 L5 \* {) ^
, _. K7 Z( k# D+ z! ^
    PoW的缺点
7 Q' O# Q5 M- a9 g$ T8 C' t
7 A) N& w4 V% }    1.数据冗余:所有数据都要在所有节点备份一遍。
3 S; x, X% E/ S0 h) B3 R( C" ?1 D4 m3 x% W- F
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。6 a- x! Z" A6 ]7 @! u) e5 l- Q
8 _! ~# c/ W/ x
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
" R' x- e/ t- x4 [# W2 u" k5 A  C2 k  _- B* C  Q6 ?4 B* M1 \8 ~
    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。6 K+ ]- d) }& V/ f3 z  J
8 q: ^4 g0 c2 N0 P* i8 `
    2.POS(权益证明)8 T  S* |$ e) d0 y9 w  |3 e
0 g. ^0 m/ k: ?. t/ A- L+ p
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。) v; x3 M$ s; z; o- \2 Q5 l( V' M
* C$ s* x7 C; X9 K* b4 ~* f
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。; n% ~: b+ {* H: @
" b+ s' V7 ?1 e+ p- Y: ]5 W% N
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
, m! C" X1 U- a/ h6 V, F0 {0 d
    这样的好处:# C! y" f0 ^1 [% j6 n/ j

% D* s6 D; `1 ?' M    1.不需要算题,所以节约能源。: M4 f3 o& k1 L3 A0 d/ A
2 P$ l3 i) r8 R2 [( v% M
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。3 C$ X& B: w" I' b8 \
' T/ Z- X) o5 e
    缺点是:! f7 w: _  d: g3 ?0 ^; q, n
) R" ~& R5 |1 U; }5 k) e9 {5 D
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。, ?" S& r9 |* H: t

* x0 y4 k4 I7 X9 h/ c5 r    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
# G$ S1 P# |/ D8 [4 \. u1 {$ M9 k# O8 h4 `7 l' f
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
6 x4 J9 E+ O1 g; T- G
. e8 H/ |. o( E8 C6 s! O0 Y$ x4 L    3.DPOS(代表权益证明)
# n: Q8 A% S. L' T+ r$ m, k+ C7 S- s. d% d: z( R
    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
/ `6 u1 o4 p( `  f8 ~; B- I  q9 C0 x/ b- Y- Y& ]' z
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。1 y) c! z1 Y% D) B% R

; U. F5 N8 l1 O: F8 L1 u2 L  Z, d    这样做的好处是:
# M7 A& w2 R) L% [8 ]; m' X: S9 O1 y( e5 [0 r
    1.不需要耗费能源和硬件。
* n  n& Z8 r+ G8 v6 E: I7 \: V6 e8 W
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。3 i# W4 }/ R# g+ s4 s. a
" ~/ g( @- O4 r- l; Q
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。! N2 R; c- W: p1 x. v( g0 j: h4 V5 q
  P* {) Z# z7 z9 k+ ]9 Y% M
    但是问题也很明显:
: }% Q7 l4 h9 b' d
2 x3 V0 g, @3 O0 _" b    1.这已经不是去中心化,而是完全的中性化了。
, e& Y: M2 d$ P  U, |$ D
/ [9 i# U. ]3 d6 k; y0 }    2.节点选举过程存在巨大的人为操作空间。
* D4 D5 p* p6 h- e5 o4 |" N9 J9 H
9 V% C9 @! u' V    4.PBFT(实用拜占庭容错)
2 h& ]# g: u5 T; r! k7 x- b+ |: {
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。6 u! x* V5 D* f, ]# k
$ @( s  t; u' ~) V. z1 p
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
0 ^/ e; K, Q% J- V) w7 k! M' d+ M5 c* j( Y7 g8 ~( h& ]: l
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。) }3 q+ ^6 Y; e& K( t2 t7 i6 t9 u4 F
- \! {; f! _" t& G: {! Z
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。& b6 [+ }- O- l4 s

; J# v8 H/ t. B9 b( M    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
5 _  v# M9 {- W: ~* ]+ D) X6 o* R/ m' P" i1 c
    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
  d' C  @6 i7 ~' S' W4 s$ D' \
- A7 A5 y; x# J1 C/ Q    PBFT的优点:它不需要矿工,不需要确认,节约能源。3 ^; Z, g" v$ K# w8 H9 [
( @1 N' ?/ f4 H7 {9 s4 L) u9 \
    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。
  @% I, H4 X/ ^) m  x3 Q3 [) P
. M+ Y* c* a0 P    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11