Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
78 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。
3 y9 E3 y7 P5 ^/ Q, j( b- E0 }  O4 N) \
    主要内容:
4 B& l+ Y; U% v# n2 T& p& h8 ?. Q; _' F4 ?4 F# i& Q
    1.区块链为什么需要共识机制;
1 N* I* E% ]2 Z
# M, T. p- T. D6 g    2.共识机制的工作原理和重要性;8 r; Z* }( X2 I0 U
4 ^- v  y' Z- i. F4 n
    3.共识机制的基本要求和不可能三角;
0 L. K! `) R: @% o9 e- w, b7 m! n" h. G6 U; p+ N
    4.共识机制的种类;
* U! V% v3 X$ B1 i' }; h- ]
1 v- w. u* G. M7 \1 I/ ~    主讲嘉宾5 M( o1 S# f5 B- V+ {1 W4 E
9 j7 u, M7 {3 k& v: ]5 P
    讲座内容! ?$ V5 Y: q' X. g

* A" @' a& d, O# e( u# F& {    一、区块链为什么需要共识机制& n7 }" T  x4 p' m

  _" _3 E% u* C0 C    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。, t# {% w- g( E3 H2 ?: d& f# N3 W2 C

3 u  R) Y" H: v& L$ R    1.什么是共识机制
% y% H$ e/ M) Y; M. @) n
2 b& o' J3 i- S, i' H% k    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
; f( d4 u. A% d
8 y' p) z- G1 B+ G    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
7 T" G% Q( A  w. j, r, K
0 `- U( y- b9 j0 S% s    2.分布式记账及“挖矿”$ U/ O6 S. P6 m- R: W  W- n
2 w( G6 D2 E0 p0 @+ ]- w, G
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
- u0 ~  q; Q+ O+ m) u
6 _- T) q) L0 O, f    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。4 [3 }8 H. s, s- N2 f+ u

5 u# \, w% k7 c4 w    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
% c& h+ X! O/ G- k$ d5 Q/ ?8 A% }
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。" P% b; a3 V# c, c
6 V1 x1 E; J9 N9 K$ D
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
3 e$ G$ n3 P" D* \& e* @+ ?6 U7 F% E* e( O1 e6 h
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
# j4 ^% y1 U/ Y' k$ Y
! e0 E, l$ l: |( |    二、共识机制的工作原理和重要性0 |) \4 t- u6 E0 c: o# W

8 @: ?$ v  u, L! c$ [    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
* U1 m# I0 T6 q; k" _5 S& p' p4 m. K2 K) X# N6 Q: M
    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
) j; z2 E* M& J( D* j  p% Y% Y) `5 H; S7 q3 B8 o6 U
    那么,"共识机制"是从什么时候出现的?; Z: y. N+ @5 _
7 L- q  T9 e* t% F
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
) {; l+ r. k0 B0 R" v" y* D
5 Q# r- a3 k: q! B- E) t( u    1999年,Jakobsson发表了关于PoW的论文。
3 T4 y/ h1 B$ W4 S; T* m
# V3 S. r& j' @! j- d    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
" D, O, V3 \8 A( b7 w" }( K9 d
9 p" A- n6 d) ~. D: d: ^( x    2012年,PeerCoin项目开始采用PoS作为共识机制。
6 f+ ?& C) u' o* C6 U& ]% \5 `7 Z
    2016年,Tendermint项目开始采用PBFT作为公示机制。
% f; I! z" m7 N  g9 A. l5 }
0 q1 f/ n" x3 u7 B3 T9 ?    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。2 m- m6 y) j8 @3 Z7 ]

( C# ^, F" s5 j/ m. x$ K    三、共识机制的基本要求和不可能三角7 v: J- b+ ~- J" F4 _7 z
( q0 e2 x4 P- ]! d: x/ Z  ~
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。
; P* e, U8 C" U7 O' k8 x
, v  F/ i7 G" z: i4 C8 @+ G1 r% ^" }    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。. P/ U( W& a5 A& e. \5 B
* |1 Q" p- G" Q5 X. ^
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:; Y7 A) U6 n' Y2 A& M& v1 J; p3 m

+ e- [9 O$ R2 O3 Y" _3 Z: f    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
  K. Z0 Q% E5 c$ ^  I
1 U( Z5 r$ I) x# E    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。+ F5 g/ Z1 z/ `: F
9 E. o9 W4 G6 ]9 Q% e: I
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
* q  Y" D8 U1 s3 g9 q  w( i3 {" c; |* C6 M+ [' Z: K0 E4 E; D
    四、共识机制的种类
3 a- X9 X8 P6 \% m! {8 e/ {# R
$ \9 M2 j6 L( z8 ?  B2 i& d    1.POW(工作量证明)
; u/ [9 y5 ?- k: C# d; ~/ D  i  u
    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
( q, C3 h6 S, k4 W' G# F) K8 g9 e6 D3 E, G$ b8 c; f4 W9 c
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
$ \1 d) {2 f# P" I- d" j) N# N6 |
9 T) y  W  F% O    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
/ T, n8 Y3 B3 |1 ?0 d, z) a- _; R
3 F  H; R+ u& N. Y  j8 |    现在关键来了,工作量证明是什么意思?
6 k6 C5 g# M% x7 X0 @# h3 h
" h7 L6 C6 D& V5 j2 e  U* J    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。1 x4 Q% e) F  P

" h: ]% b3 U1 ?% [" L    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。" u$ {. ?4 I, H. B3 [
0 [5 u/ O* j* E' |- k* ^7 r' o5 a9 y
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。$ P% x# O/ L8 S9 B! i. a6 G4 M
. z1 B: o0 }9 ?2 q
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
2 B4 S3 K$ }, v9 h9 |% m5 ?
$ }: f7 A+ _- _" e7 b8 P  V& g- F    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。. ?6 G( w# x! Y! K6 _# J1 U
/ e* j# O3 r" q. u5 J' m
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
. B, Y4 N- l/ v* A) ^( }' B2 A# _9 z$ e% C+ o$ p& @. Y* u0 o
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。& c5 E9 N9 c8 T/ J

. S! r& p" ?' o* K. R    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?# ^/ P7 y/ _0 l
0 M! ~; m5 O9 w1 b' m
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
8 B0 U# |7 s. v& Y8 `* N
$ Q; w+ w4 p& f- F    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。6 L$ z; t8 ^9 d5 S% V
& {1 L+ }' Z. u* J! J# ]
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。. m$ j9 e4 A5 n. m' v
; {+ y4 G5 ~3 a! g
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。1 I4 r) P6 {. Z: t6 k! K

, l( x9 W3 a6 d6 M8 m    PoW的优点; y* l& m$ B5 S# O- V

$ z: v3 l, q1 G    1.架构清晰,有效可靠。, }; {" |. f9 {2 }6 |
7 V1 H3 B! s- k
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
3 C# _8 E) q$ D
7 L2 h0 `3 M9 y! Q1 @( c9 l    3.公平:这种机制类似于多劳多得,干的多,收获也多。7 |( {: n3 s+ E/ Y

0 J& M4 Q5 w3 B- F% n    PoW的缺点7 o4 [7 R9 ]9 c6 ]  N  o
0 v1 @) a2 Y5 W& ?8 O, v
    1.数据冗余:所有数据都要在所有节点备份一遍。2 d: m( I% P+ d$ r/ ~+ ]
, [  h% ?  v  s& ]" n8 k
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
# v6 U6 w+ Q# {
% K8 u/ Q* B% B# w    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
8 |8 R" Q- X1 c. v- E. B' \% @( w: ^9 V0 R' P8 A- m5 |
    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。) {4 J/ B8 ^& Z$ t( f$ ?  m" n

7 T* f- O) ?2 k6 w' N, ^    2.POS(权益证明)
0 z. F: [& r% A, Y: E5 \7 q* d2 \3 r5 B
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。9 i3 `% }! r% }8 z" @! E5 T2 s
6 i7 C" }* j) s" |& D
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。
( L" Y0 [5 ?8 T$ D5 M6 v4 D# g, W8 T; Y! l: H2 m( T
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
4 n( t: }& u5 d' }$ z
1 |: o" k2 b* e8 o: x9 o    这样的好处:0 `/ T8 R9 O* C5 l  ]. ?8 T% |  A
3 U+ |6 ~7 G* ^6 Q3 S3 J
    1.不需要算题,所以节约能源。
- Z0 s9 ]' W2 Z2 w9 j) d8 X8 }# s  ~+ ]/ r1 B. e
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。3 v; }$ O: z$ v: B
0 A% X7 c  f! ^% w) l+ r
    缺点是:. Q) C9 c: g' A/ R3 h

* M' S% f5 x! @9 ]! z( g    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。7 n# @+ r* V/ U* ]- e

2 b  w9 u/ \- I, ?$ e    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
" l" y+ N7 A- O* V/ X
8 ]' a/ R2 t9 ~1 B; x    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。9 @' r! y1 p; p0 q6 n9 w+ S* J/ o+ \

6 m: P: Y: j- R0 ]* P7 m    3.DPOS(代表权益证明)# {$ @+ o7 q. L

% ?% d9 u( y0 {, G. z) q    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
8 y# m* O' Z' V8 S+ ?# X9 h7 Y3 @* \% S* ]7 U9 {
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
- _2 e: N0 `3 J' \. F9 ~# |
$ J5 r; ^2 k$ O! t    这样做的好处是:) l- X3 _3 _- O9 K4 n! c

* J6 h3 |, K  _0 S$ Z    1.不需要耗费能源和硬件。) T1 f% s0 R2 I, L" I6 y
) A4 ^' k9 o2 W# ^! R
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。6 N5 E8 ?, K4 n, m4 h" O
! J# y8 a# T6 F0 V$ h! Q1 G6 _
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
4 d4 w/ X( h; ^" }- k/ r6 y) Y* O) F6 f: }3 i0 R2 P
    但是问题也很明显:& t& f& z) ?* s3 ?6 x. D: T: M2 R

, i6 ^: e1 G! J1 j/ h    1.这已经不是去中心化,而是完全的中性化了。
9 w# l: N4 _8 ^1 @2 ?0 T4 g- w9 ?5 k4 I4 V
    2.节点选举过程存在巨大的人为操作空间。- q+ C4 J/ q& J# U; o1 j) h# }8 d

! E% J( ~  M6 i3 E9 U4 C" g    4.PBFT(实用拜占庭容错)
2 m" m0 Y. x) \- s7 k+ F
& I  O6 O5 e: A+ F    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。
7 X) s2 U9 N9 U9 s8 @: ~
3 [% E) {6 l7 m0 R- _- c8 Y$ }    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。9 E) G, W% `5 |# v) `4 p' Z  }

6 Y# |3 c5 y6 }    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。. Q/ |: C% \8 E6 m0 P7 J6 R
$ ~+ I  g7 I; p2 m  B7 w- a# r
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。! I2 n0 u7 g; T) R

! u  k. p" m; p) [0 `: O3 j    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。3 t: q+ C% u$ R' ]. N
8 Z2 I9 U. a9 n* U% x
    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。5 }  G: P: h7 u( M

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

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11