Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
62 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。; r% \/ c' D9 m* a# U2 ~9 C5 ]

0 [' w) T) A, ]5 Y! e    主要内容:5 b+ T5 ]9 x7 a. a' e3 }% l' R2 l% X
5 W" i' j" k, I1 l5 e3 P; h
    1.区块链为什么需要共识机制;2 z, a- I7 z+ Z# {1 ?! D% S
$ B% c3 {* L0 H" |9 L
    2.共识机制的工作原理和重要性;
0 A$ n5 P0 N; S5 e- Q
/ \0 W7 U8 z4 l( E" x( d    3.共识机制的基本要求和不可能三角;- Q. @7 A6 T' G

8 m! j0 [4 `7 z6 c    4.共识机制的种类;: n7 Y. e* W( v6 r
) H* \5 A, ~) U7 ?$ w1 x7 V
    主讲嘉宾8 G3 k4 \" F+ a

/ T5 _' H8 p; k( G! U    讲座内容' f$ A% d/ d$ _5 ]& W& s

5 S  c4 [4 b, I1 }+ f) ~+ A    一、区块链为什么需要共识机制# N% z' C2 f+ u' k5 T" {; W
( W& ]7 Q* H( [4 ~
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。  l$ F/ r1 x4 _: ~/ @1 C

8 R* m* Z8 c: R+ k8 X    1.什么是共识机制
) u; E9 [/ ^% O6 A! u
6 g4 \9 c( P- w    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
- z" U0 _* Z% b5 g5 o. L* D/ R5 m- @7 v
$ t. u& d; ]  K! T    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
) p; c  V6 ^$ s# D
' j1 X( ]5 n9 @. n6 P    2.分布式记账及“挖矿”
! G1 ^+ D) o) }* I4 K
: V) f0 i, h. a9 m. B% t    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
! o, U! R* C1 ^" G0 U5 |( y/ E  X/ ^+ `8 y5 w
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
$ L, v( t* i4 p# A" K: t- u+ Y1 c" i+ s' c. G  _- n2 B, W, b
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。, |/ Z1 {* u8 x+ H( P# Q

5 Z' ]( S' ?% C5 c& Z: N( Y    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。( i$ w2 e7 Q9 c) `
4 }2 P8 P5 V7 w9 N1 p( g
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
0 c/ G% c7 |% i
8 \2 N0 q% T8 ~5 q8 {    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
! c/ z2 A3 c. Z; ?: Z
+ ~- W" g  Z; R( B# C5 X8 f    二、共识机制的工作原理和重要性0 f7 P/ P3 L- |8 q7 Z
" H  M2 f5 }/ |) z( }
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
+ C! R9 V7 m. r% D) w' H$ [, [" E
4 J( ?; M4 }/ ]& a    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。) [6 y6 X8 }/ k9 {" N* l5 o
$ c$ R0 p+ w8 l
    那么,"共识机制"是从什么时候出现的?
8 [, D$ A' B1 ?4 {2 v& U6 @; f) l
& Q2 b' f6 n) o6 D    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
: F0 I1 y9 y' _
0 d9 T4 Z- \3 N, r; z/ C" s    1999年,Jakobsson发表了关于PoW的论文。# R4 j# G: w  K" q
- U! p4 w2 R& I  i" @8 g: N" n3 d7 B
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。6 s* O7 p4 L3 B3 G# o% U

3 L1 z+ g5 b- k" {8 X" S    2012年,PeerCoin项目开始采用PoS作为共识机制。
6 h7 @2 R* z3 ?7 n* h. Q" A
3 z3 Q7 Z5 J+ E. R    2016年,Tendermint项目开始采用PBFT作为公示机制。
# d8 I+ `/ A, a1 T: v  A, L0 m, x( c7 ]* U# ], m" x* }
    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。* W0 F7 T& R3 h, G( d  f8 \

" p' Q+ ]# k$ B4 n2 c    三、共识机制的基本要求和不可能三角
7 G; U0 u) |) \8 q2 \9 c) d% w  O
( U( v' f% B5 W7 s: ^) G3 b/ i: @    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。, r7 A( ~3 h# ?

! Z4 J4 I; O! A; Y+ Q$ t    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
3 K) V$ A; w4 G. o
/ X1 e3 \  P* t& e1 N    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
. i1 S1 ~. G' K, |" M/ u
5 u- A. u7 s; j6 ^0 Z    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。& o- s+ t0 m, [8 d4 t. c
3 `5 W$ F$ J9 l) ^
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。1 [) k7 [' l( ~: a/ z

/ R. [$ F" a; [( Q# |) I    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。5 M- t/ o, D) X* g- D5 K

% V. O& E9 G/ C/ c    四、共识机制的种类
: m; [  n8 S! O! d
( r/ x- h& I0 T' e& V    1.POW(工作量证明)
( a6 h1 k2 ^% D$ Y' o
* S1 a& Z0 M* B. O9 t1 c    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
9 x# g7 v) R3 p' c) c
+ J% L+ _& n  x, x6 t    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。, K/ A1 g+ x7 N. k2 J9 Y( J

# t1 G) U7 I3 K' e2 v, U    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
9 U- P. }! Z; }$ ^: Q: S0 r: [5 o3 c
    现在关键来了,工作量证明是什么意思?
/ c/ Q" M1 ~! j, k# |" G! r) G8 |1 X; K
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。, k- W5 r; f, p2 {7 m. [" V
! X" _1 X, i! t7 }# ?) C
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
. U& e/ `# c& i$ Z# @* H# g$ H. W& r
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
& p: K+ Z9 S6 g& D" y
% q& {2 K8 o( ?  _, Y4 F; F    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。' H8 K& X9 ^% y
  |4 P0 t& T) Y2 H+ T
    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。. k- Y5 d) A1 I: ^& q

8 f/ x& k/ V" s2 E    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。8 y1 E- i1 ]' E
: R$ b; o8 _9 w& J6 q$ u
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
% M7 H: B/ r$ Q8 u0 k9 l4 N. M' B# L) k& `/ l; C+ V' ]
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?& _: e% X, Y+ ~" e/ z$ R) g
/ n; [4 z; K. B
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。% K$ \- ~0 p6 x, ~
8 L( E0 @( G0 C  [- d
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。/ C( @. b) H% S( i
7 v+ v1 I  F) h" I5 Y) H& \. r
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。4 T4 R( A0 ?1 k
4 K. B! c7 N7 B
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。
& `7 T: [# Q2 A- E2 b4 a- z7 J, @7 I) @# _' \6 `" u% F
    PoW的优点
2 V$ O" n+ ^! M
% d( O& |. o- [5 {7 P' w. G    1.架构清晰,有效可靠。
. s5 @" X1 J8 n& u' |+ O# j$ i2 i0 c# |2 b" N0 C: G2 n
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
) j+ m% c$ ^7 Z3 y' ], [  v. I
6 @# @( E5 F" g2 e: B    3.公平:这种机制类似于多劳多得,干的多,收获也多。( I$ Z' `8 ]3 c0 e$ M
9 w" n+ i$ s3 H, j* J- Y0 |
    PoW的缺点
- y, n) I& w  P; ?+ Z: D1 Q: f' r. l) Z. L
    1.数据冗余:所有数据都要在所有节点备份一遍。
+ ?% o. h( `$ ^  v: d* I0 ]$ w) J& h3 `  \, t$ [- H3 s
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
# Y0 L& D6 w( b8 z$ |' B5 B0 H1 v5 L/ h1 L6 j0 g) {5 y
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。& `0 \0 X6 ^! e4 {8 A$ E
- G7 ]7 I6 Z4 R- s) y9 }& n. j, ~9 F
    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。
& @9 c1 H. u% ^% p
* [) M$ ^7 N) r$ w& C    2.POS(权益证明)
& v# A4 v; |; y' o% H4 S" V/ Q$ s4 p8 V- v' t% l
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
) r( h) N) b" J! S1 q4 r, B
, k- l1 r! k6 A. W9 _9 }    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。1 S' {- D# m4 U, F$ P9 Q
/ m) k5 ^% ?; d1 P4 J6 Y, m
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。9 J1 A7 t9 Q9 @8 N+ ^( Q
. _2 f$ Q% W6 P8 I2 e1 M
    这样的好处:: M: |! |+ [# _$ r. V  t, A
3 O6 H; n; Q# o. i, d/ X
    1.不需要算题,所以节约能源。
  u/ J& B! H. j) d% b0 }3 c9 F& e% y' ]9 A/ I! ?5 }! Q: ^
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。) ^7 t4 ^, J. s
2 t. @# I! v$ i( I7 C
    缺点是:. T; G: X, W7 J  v! Q! K( H

& [+ |$ }* v. m* n    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。
; `8 `. @7 ^+ X7 m& k' A, @; i
  S0 C) X) d; S" C( b    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
8 J7 f( O% w" B; T
4 O* d" J8 }! a) w5 e    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。) Z6 C: R6 S+ X2 p* j$ T8 n8 ^

  q! k" i) r# ?8 ?0 l8 o    3.DPOS(代表权益证明)
4 M$ D9 q  I0 N% P7 v
: V" F  R2 ]* r3 l! b    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。8 Y7 n2 [/ i. Y  |! f9 S

# z7 q/ m2 ~- U- \) ^+ f    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。+ X  I2 o% _5 |6 L

. _- H  ?& Z  S  ?2 r0 ^) K( \    这样做的好处是:
  R/ Q) s/ x; Q& p
+ C: _7 t+ I: `0 ?+ E! P3 ]    1.不需要耗费能源和硬件。
( q& b" w0 `3 x$ }) `6 H8 G1 `6 P) I# B- {2 D
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。3 y) q8 E/ T/ Y5 F2 K9 B( L

# _' q. Y& h$ c2 \2 S/ ?- {6 {+ R    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
, W# @: g2 k2 U6 b
* V1 @  W: K' K! t# f& n, i4 p    但是问题也很明显:
+ e5 U( K! [" W) M: `  i) o' M& D, l  I& U
    1.这已经不是去中心化,而是完全的中性化了。
! f5 F, s  [+ e4 }
+ q9 T+ p' ~9 ?4 o! H    2.节点选举过程存在巨大的人为操作空间。
+ Y* G- F. ^. E2 d+ I
( v( ]. ]7 z  w6 l9 f5 Y3 w- t- X    4.PBFT(实用拜占庭容错)
  J) [* T! H$ W# u+ d4 o) B5 u0 X; B6 K+ Y; o8 p4 E
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。& G4 F5 N) j5 e+ w7 N* a" J

6 m( x7 [- E2 J( G" a5 l4 f  V; C    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
4 ?* N- M3 J" j) V5 q6 N/ s5 b& }4 s% J- w, c
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。' O; i9 J( s8 X: W& |3 ]
" {! d3 p% F: |7 f5 [
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。, Z6 S; C1 f$ ^/ T7 d
6 a4 ~& c: g% S; H
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
/ [, B: S8 q' A3 C: @, U
# r, Z) ?) O: m4 v+ R; j    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
4 T6 H+ |/ `+ l2 B! ^  l. c
: _( W0 {+ T- k7 L6 C9 a4 e  t) q    PBFT的优点:它不需要矿工,不需要确认,节约能源。
  T, v# _; D! p5 n
  p2 B. @5 M  h5 I. U    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。1 d4 @, E  A! S5 d8 Y
2 Y, [( D5 W6 K) ]
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11