Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
102 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。
- @  H" T4 R+ u' C/ p
: g' G- ^7 O+ N0 @. b. u    主要内容:1 n" t  V( X2 p
7 ]% c: z5 I$ L* S, h$ ~6 u' F
    1.区块链为什么需要共识机制;/ o" `7 p8 D) z, b; T, _! M$ [  q. t

- L" t( F  \5 o& r  a: _/ B    2.共识机制的工作原理和重要性;) q- w( f2 G$ v: Y  J
2 K' x8 Q. u5 W5 k
    3.共识机制的基本要求和不可能三角;
1 x  P  d1 ~6 x& J. m/ h2 r& s! W
    4.共识机制的种类;
" G: Y; S+ s4 |) g7 x) a! A* ^3 G
+ Y# s7 A5 n+ s% p& w- R3 i    主讲嘉宾( I$ h1 }* p( }# p# M
4 y: {' G! X- i8 C9 K
    讲座内容2 \# \5 D5 K8 {7 P

. D2 S- [( p- ~' K+ y    一、区块链为什么需要共识机制: _" |2 l* ?& q  e' O
; c  w! Q7 P7 Q/ Y/ S, z3 B$ a
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。  K- F/ Z  s& E# a9 ]3 J
8 |3 a0 N' k. E/ _# b- z
    1.什么是共识机制
. n; R. m8 \4 R" q( u. l* J; N3 I! v& R" I" }( ^% o
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。* q9 o! F9 [4 c" `2 a

5 y; q% }3 V3 R3 c    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。3 Y0 y" |7 w9 ^' a% r

0 `4 v- ~; ~% j0 Z- G/ x; i& j    2.分布式记账及“挖矿”9 x6 j# x8 e0 ~; ]
6 o; m) i7 u" u' ]# c+ m, Y3 N1 `
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。7 ~1 Q3 s" Z" L3 C2 d" \% F
9 I) @# s: E: e; V; y8 [1 Y2 w# G
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。2 _- I6 {8 @( s. ~
3 F# {/ ?1 R6 g- t4 [
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
) s! |6 g1 a+ q* ^* ~
4 }7 `$ c1 N; ?, e2 J. _3 d1 b! l/ U    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。1 f( D+ X: F1 _0 o

; v' l" h& U! s6 g    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
9 Y, R# h! H- e& v: W" _8 ~$ }3 Z) G0 t; R* ?( i
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。9 B. e2 j  E6 I2 [: m5 Y8 f$ a
* Y! {' [$ M0 |. n3 N6 O* ^
    二、共识机制的工作原理和重要性1 S1 _) I$ S0 R( w6 }2 ]
7 x# e3 w, \. n
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。8 {3 i# I1 R2 G2 ~

3 ]& x/ P( T/ n( A    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。4 x% ]1 I' k& c/ ?

, r4 q: {4 o  Y    那么,"共识机制"是从什么时候出现的?8 Y/ U5 I( J' j; m

: W: c( [, I, f+ z; d$ Y    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
9 Q: p% e, T( z
- @* C5 n. G# m! j    1999年,Jakobsson发表了关于PoW的论文。3 h! E# D* @  T/ w5 n; W$ B
. v# r4 T* v7 t) B  r
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。. l( }- i: ]9 m# U9 h# F7 T! z

, }' M6 |+ }1 d- ^# A, }7 c6 S* N    2012年,PeerCoin项目开始采用PoS作为共识机制。. O% H3 Y& i, }. F# L1 e$ h) U) z; [3 c# }
  q2 f9 t# h* A/ L$ q
    2016年,Tendermint项目开始采用PBFT作为公示机制。2 C- P) }& s) `0 n4 R

, y% j1 C9 @# u2 y; _    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
% b7 b0 T; ^$ S: a( t6 V7 F" X) S' R5 v( k) N
    三、共识机制的基本要求和不可能三角+ I5 Z& \- u/ L. ^; [

2 E* u: D) {8 u& S    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。8 m) V: B9 r) u( d+ K
4 {9 D# `! L7 c  p" ^5 C" |* B  c
    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。/ N! Y. J- J6 e, Z2 _
- f: D, l3 s6 k# d* q
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:/ c) `' Q4 g* q

! q# l+ l6 r/ h( `& h9 e( K    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
$ y: m" t3 H) L* C' r& |
5 L. ]% p) y$ a" Z, u1 A9 ~    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。
2 k: \) F: u$ \6 Q; S$ y. m- @( ^2 s9 w' O3 j3 {$ A  h: {
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。- z& B" @% }4 l0 z8 d/ J

+ P5 y( G) t9 H- Q* D* s    四、共识机制的种类
6 o5 r& Y4 J' O& M; o  Z5 ?( V+ v
    1.POW(工作量证明)7 Q9 i" o# N, _& a: Q+ q* Q# Y

( I- g& N! T" m. s' I- W; c" {8 }    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
7 {4 @. |0 p1 e+ G! N, @
  O$ |, y# J; X/ P3 T    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。6 D6 z4 E1 I4 g
* I9 u+ \) _  W
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。) S, x. Y- S) G/ _! t, x
3 r; _" I' O" ]% U  ~  i7 A
    现在关键来了,工作量证明是什么意思?  b2 s4 I  R3 g) t
; w1 F( [% U" u+ H( {9 R
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。% e7 c0 ~( Z7 m+ k

3 J5 i+ j6 E: p; C* I' T    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。1 V7 ~! x, r2 `; O( G/ |0 s  C9 ^5 M
1 a$ P8 B0 W) B2 U( f
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。$ g5 ?1 d) f) K& m9 ?, M2 ~, H$ ~. j

/ }& s2 O1 k  y- y    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
' j; V9 ^7 F! Q  |
' j! N# d/ m/ b8 Z. S    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。. y3 h9 e7 n* q0 P- J. f2 Y

9 [- c! V' n4 U7 D* I0 k    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。- ]1 e" W9 c9 D% [) P
2 G; u) Y4 s& ]% [( v
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。( Z& w" b! [! h9 I1 W; r

& n7 l% V  F2 H  [* C9 N    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?7 b& \( H* `  B& j* ~3 H% s
2 F5 h6 [$ E. u0 o( ^& j7 `
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。  {4 ?8 W( j: a8 M6 T8 t

2 H2 A8 x- H0 I+ x. x" x    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
2 M% f6 e$ e' S7 ~: ~# P6 b5 P5 w" i
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。
2 B0 E- x/ `5 u. |% G4 n6 D; K8 J& D- M- V' C0 y7 k+ b+ Y0 U0 q
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。2 ]5 G" x+ A: e1 r+ M/ M

3 V: e. _$ {! _8 E" I    PoW的优点+ H( m" i1 ]3 |* S# d0 g5 L
3 p! o3 c! V! G. P# ^6 P
    1.架构清晰,有效可靠。7 v+ n1 F1 D, g4 Z' z) M8 |' i4 [
# z$ ^, o/ \3 J2 k6 y
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
+ B% X6 O' h9 J9 H; `
/ v# l8 z, r; b! V5 H7 Z) _: ?    3.公平:这种机制类似于多劳多得,干的多,收获也多。& d: O4 U3 B/ [2 C

$ A0 h3 _  h4 Q. f" V5 _    PoW的缺点
" ?% E4 s+ ^' F$ E; S4 }( u- ~0 n
    1.数据冗余:所有数据都要在所有节点备份一遍。
* K6 ^' j' b& r, M: L6 ]8 u  }* ]% `/ ~9 q  ^
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
8 U, ]" _/ T( M5 g  p7 Y* j: f/ D; b9 F: A' t( X9 R% k' }
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。! i3 W0 I6 D, z& [" j6 J

, Q% y9 D4 K8 t' }: W5 s2 k    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。4 Z; h7 e" v. k$ b8 M

/ ~% s! ]7 D: {9 r5 B    2.POS(权益证明)3 m5 p; i1 {* t! H9 A

  e& @7 b4 z' T, u- L    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。; ]7 h5 @& D; k! C
1 Z- e: Y7 Z& w) V
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。, [' Q9 p6 e6 s6 c( z: P: k8 u8 I
7 k. r/ G8 D5 `. p! J3 z
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
1 n0 Z) I$ J; N- k; }2 c
( a& ]8 x' Z3 @" b( D3 J5 P) b    这样的好处:
2 o% g! v+ e& F/ K
$ T1 \" k: F! m. J" H    1.不需要算题,所以节约能源。7 g4 x" b$ ]2 e' n1 G8 R
+ |8 \/ }0 w% ]! f
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。
8 d; E9 R( F0 [5 u# u) ^  m& l" K; H. q4 I! U
    缺点是:
0 b, Q" X7 b% v4 e6 g" }7 v, n3 a0 g- L5 y% o! \; P! {/ o9 ?! N8 i
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。3 h7 V% c1 E! h4 j/ G5 p0 b

! ~/ B6 I+ m* r- @9 Z' E    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。$ I: i* o9 D) ^# {2 i

" m1 F& l& t- {1 k/ Q3 ?, @    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。; C( Q/ `- ]5 |& Y6 M0 f  h! s
7 z+ b; O7 n/ W1 R9 Y4 J
    3.DPOS(代表权益证明)
6 B) Y  r: ], k9 t+ G, x, p& y
1 C, B* }2 U2 [    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。" _* ~# H* f5 U1 p8 j0 m

6 A0 M1 ~( \% S  _    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
. o1 A$ R* P: c3 J
$ T- V; L) ?/ J6 _9 @% F8 C: c2 |+ E    这样做的好处是:
% k# o& v7 b: {. o$ a4 m- `* U% j2 A" U! i% @- {! p) Q5 H
    1.不需要耗费能源和硬件。' k) E$ M2 X$ K  @1 u3 v0 ~4 Z, f

7 \; z& L4 X6 Y5 r- y    2.缩短了区块确认时间(超级节点可以负责),提高了效率。
3 F6 }( E6 K( e7 m) h: i* G0 [% n/ o5 ^2 _9 j
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。; Q& G0 ?  ]* w5 c
: Q7 R) O5 _! s$ {
    但是问题也很明显:7 }, T' H# n- M6 Z5 A) b

! n, m3 A, s5 R: t4 j; [: j    1.这已经不是去中心化,而是完全的中性化了。
2 K8 Y5 N. h6 l4 o0 o  d; B2 }* e& r
    2.节点选举过程存在巨大的人为操作空间。( U  e1 m& q# q3 V  l. B& H3 A
; c* P" G: J! J" c; K
    4.PBFT(实用拜占庭容错)+ I! m, n/ r4 ]
- T; t; V8 O2 I0 e2 H
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。
: Z; {7 r0 t; a# h% N# O0 j7 y6 @" R$ `, h# N
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。, y  O8 o9 _" |9 X. s

0 p3 c6 h  M" w1 i  q! M: q    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。$ |/ S1 e  @. H; D8 b* D# |3 @

$ p0 Y/ S+ @, C; K, ]    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。
- R7 ]9 E( q* L2 F2 n( A& M* L$ ]- q2 @
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。6 H& R+ ]6 {7 K: c- c; B

1 Q& ~/ l( H* O! s7 \$ I" r, g    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
% G( |( ~) U5 h1 I7 }, Z& h
1 g( m: N+ _+ Y# E4 Q    PBFT的优点:它不需要矿工,不需要确认,节约能源。
$ F9 C8 t/ d  p$ t
+ c$ i5 a- E. x% D    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。! N4 R( b- L& p) x+ c. e
3 j- z4 @. a4 u- W
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11