Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
119 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。4 l9 }8 m; q" q5 \
& w* }7 |: B& d  Q
    主要内容:
* S% u/ d; m, y3 d5 T3 B7 `" E
) a5 T* ?, ]+ E5 z    1.区块链为什么需要共识机制;! o( S* F/ m) y. @6 N1 j3 V
9 j4 r' g/ n! r: E& M' |+ I6 L: P2 L
    2.共识机制的工作原理和重要性;6 [# l5 H& K: c' b! e! W

# s' z. Q0 F% S2 l0 T2 z: B. J    3.共识机制的基本要求和不可能三角;! A* f- h6 s3 d( u. [( u
$ S  E; `% e5 {: R* z* F
    4.共识机制的种类;
9 V. b/ F+ u% g/ P; b" _" O3 Q/ T" ]( l
    主讲嘉宾
+ {- x0 n; q1 m4 ^$ f' I
5 `, \7 x5 R* o  E; Y; d3 f    讲座内容/ s; d( p- t, z9 I% i# @

$ M1 E0 ~* j' F" |/ f    一、区块链为什么需要共识机制3 B4 u: T) j; C4 K

; P7 p, d; ]" l& I3 Y0 j7 ~    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。" F& [$ a! W" S+ z- Y8 l# Y
! y" l( D$ c& n# x3 d$ X( {; \
    1.什么是共识机制
: z0 K9 a) L4 i) t6 H6 s  ]2 ~
8 B' B% d3 m1 M) P    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。& B0 I) \  N% A: V0 r
. u' Z( ]0 h8 t1 |7 B/ ]
    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。5 T+ l$ E. a2 r

1 a3 s  W1 M: L! n, D    2.分布式记账及“挖矿”2 Y+ P) [4 p6 Q7 A
. E$ v$ H( e+ R+ c
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。7 ^& \0 ^; B# d. I

* {& Q' B! b6 c. Z    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
  x0 O. `5 L+ x4 g3 Q  i  S: \% x4 H4 J; A/ y4 b* v
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。9 b2 r2 ^6 O& r7 B7 n: |( f8 T# H
5 p( ~* X- v. F2 c: i$ b: J
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。* e: t) R9 V; Z

4 T/ ]" ^% S/ g4 s    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
1 {' O4 n0 p' t
5 C, i) [. x1 w; @" A8 N    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
3 E7 F. Y9 L7 A4 e1 Q* j/ V: G) Y2 S& \- \3 z+ q
    二、共识机制的工作原理和重要性
; z' M  ]; V2 h
/ R8 p( k* c4 v! j; |    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
! C0 J, ?9 W6 ]8 |, J: O1 k! j
' g  O) B7 T* Z, f& S    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
  k0 m8 S8 z9 T3 C; Q. D) }" ~( c. M' \/ T4 m* i
    那么,"共识机制"是从什么时候出现的?  @5 |( r% V) T) V% @1 M

, Q4 ?' z) I2 J' G* o% `    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
. a) n/ [6 ]' H
, u! J- O" z% A2 m* h5 T. a    1999年,Jakobsson发表了关于PoW的论文。% ]8 [3 Q7 l' |, T# W

7 w6 N# Z6 _! e    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。# s/ T4 @8 a1 T1 \. N) x

5 U* h: h9 O1 O    2012年,PeerCoin项目开始采用PoS作为共识机制。
6 ~0 f2 W. m9 ?: {6 d! c0 I3 V" B$ y
    2016年,Tendermint项目开始采用PBFT作为公示机制。
. f. w+ x0 o" ]3 c
+ a* I6 u4 ^8 D4 F- x5 R5 C% F; a0 j    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。! J8 ]4 G9 u- h( a; Y) z8 Y
5 D4 d, ^5 i0 @0 s: [! f( n9 u$ `' z
    三、共识机制的基本要求和不可能三角5 r& x$ N3 q/ l2 e  e/ q( d8 x& R

- k' j+ `4 k0 h5 W* b4 j2 k7 A    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。
8 p; `% [& f2 g4 @. K5 }/ C7 b) m) ]
* f" D9 V, O) M9 t+ P) ^% w    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
  S0 ?7 h/ ]2 W4 b; P+ m/ a! b' H+ F. v6 Y, C
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
8 J, W4 b8 O9 V/ w' I# o3 _' b6 s: A5 K3 g3 z+ a9 r  r
    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
( {2 Q$ x4 p; m  Q% r' O; q+ |9 b% S% e3 k6 ]; ^2 Y
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。$ o! k' |3 q1 ]- T0 s

7 ~2 {6 e9 \0 c& w    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。+ p/ X; {, D3 E$ P- C, L# W! u' ^

, B' \% R3 z. e, Y1 _8 l- P    四、共识机制的种类
8 ]9 l: r. U; G- w- x( g
& v9 I4 x" w; W6 \6 a! o    1.POW(工作量证明)3 Z3 e; Z- ?2 U* c+ x

% M8 v3 R6 n/ w% ?4 E3 t    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。8 ?- N3 J3 M+ l. T6 E" n# p

! ]" a! [2 s8 q) u- F- b" |$ x    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。# ^# f! B; v! ^! \/ y) `# ]
8 J/ i9 z& G8 [8 E4 _- h4 x
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。6 Z) `0 I% T+ \" {
& G+ l$ h# I  }/ J  j2 y4 ~2 d
    现在关键来了,工作量证明是什么意思?
5 r8 w% X5 A, a* N
: z2 N( j% ]4 a5 X" s    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。. _' r8 X( [5 ?: [

1 G, y) Y) Q$ o/ `5 @' Q5 u    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
5 B8 @6 _( l/ s
! Z( V/ r( B# o    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
- W( J" v. `0 A- O4 W) P; W, E7 w0 D7 I/ D% a! h& k. ?/ q- x# K
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
3 j3 H; f5 ~9 k" D* c7 C5 c# H: B& o' y
2 v' T8 Z9 J5 G& O) ^3 i+ o4 `2 A    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。8 R7 j; w4 r. D

; x$ d8 `+ s" l! z    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
$ g1 k6 N' `( G- U9 O# J& q4 Y9 [. \; Z" J
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。# U8 I* o- r; \# m8 S: E9 @. |7 m

  _7 [% x+ n5 Q: S7 A' Z    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?
$ T$ P- e7 ~+ L' A3 v6 ?' g* {6 Q6 n% b- ^; _- W9 q0 \
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。3 o2 X3 b3 m9 D6 @5 u1 @3 \. P2 m
2 K4 \; b* a  h# Y1 Z
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
/ x" I5 Z+ c1 e. m1 N
# L8 {% ^% R( {4 N+ Q    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。
" H8 R; ?& G$ c6 A
+ s" v  s, U) F% Q9 a4 R    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。& z7 l& r  E. w1 I, d6 y

7 [* O- a9 \9 ?    PoW的优点( H  `% o( D% u7 f0 k

5 a; |6 h& ?; Y, \3 T5 p. j+ I# L    1.架构清晰,有效可靠。
& k8 ?5 i5 ^: C  K
+ D* v+ F& l9 M+ D! f    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
* C9 ~, W! c4 I* j& M$ W% V  h
8 }/ K  Q# M- b    3.公平:这种机制类似于多劳多得,干的多,收获也多。8 H# ?* C% [  N7 N% f5 I

1 Y1 p# C8 a  x% G# @1 z) w) J    PoW的缺点  d) q2 m) E" O
3 _9 ^, r. V$ b6 j& ]
    1.数据冗余:所有数据都要在所有节点备份一遍。8 T: Y/ }% |5 T

( x$ v  Q4 `" k/ P  l    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。" }" M$ y  Q7 P+ Z! c; K, p1 ]

+ p4 C: t3 l& V6 Z* k    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
$ K# `; k: n% K% @. p+ w. G# w, v
& }+ n! o" N+ G0 d- z5 _    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。
4 F3 j( [& p+ }1 S- M# M! H" Q- V  Q* U' B# G* Y
    2.POS(权益证明)
9 X) ]) E( r# r1 |1 v2 _1 ?$ O; f
; W& a* D3 [+ z8 }% \    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。3 d0 Z5 `+ F% R
0 N5 [/ I) G$ E4 x+ B! d2 Q' ?
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。2 o0 z# S1 N1 a) m/ e( l4 r6 ~, c

8 e) F  K0 N6 A- y& b( O+ Z    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。' v2 U% o$ F9 J+ R' _
4 A7 F. A  X8 n. O( }: i% C
    这样的好处:1 m8 r2 C& ~4 m1 s+ e
+ Z- u# U+ e+ B0 d5 T1 E7 K
    1.不需要算题,所以节约能源。
2 B# Z- o3 y  J; {! ~' k$ p
0 J# u4 S1 X( z+ f/ o9 W, v    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。
+ o$ \6 U. F2 V! W, v2 W3 @! T
    缺点是:
1 F2 [: ~; ]8 d# `
( s- i4 z. O" o  K! s    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。" f  M( |5 U* z/ q* S
7 `2 L% m1 i* X! S
    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
" |9 ~8 {) W+ C% o3 x% |9 k& S$ ~- O; S6 y7 @+ h2 }, K! B. p8 ^
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。2 ?0 [) ?$ y" I4 O# k2 Q
' Q) s( I; C, ?) C4 u
    3.DPOS(代表权益证明)
4 A) G2 Y( }; x" g( c/ w& V
+ {: @8 z4 z1 S8 w; I# j& k    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。0 T& ?9 h& Z$ \+ C! h
5 A- l5 G& h( p5 j! o( p8 e
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
9 c. A5 K: n2 D# v# _% W/ c+ u) r* {/ d
    这样做的好处是:; a" k0 J4 i0 w/ {

% w# I' y$ A. X1 z* f    1.不需要耗费能源和硬件。
0 N  K% ^, O4 X6 k  _% W1 j# M% v" x' z. C- F4 s. y
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。# A2 e3 \) l9 P2 P4 C; Q+ B4 x

7 I9 l6 x: ^0 b    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
0 F+ a- L+ t+ O% Z7 m: b
* t# h$ E+ b; ]" o/ `    但是问题也很明显:0 ~, S0 r: v  c" ]. ~
5 I8 S' b9 L1 l; Z
    1.这已经不是去中心化,而是完全的中性化了。
0 K7 f/ ~% j* P4 s* [1 C6 e
) M' \* J) S7 X* `7 K3 B3 X4 }    2.节点选举过程存在巨大的人为操作空间。+ x- ^% y4 H+ g' R

) w. H# d4 d, D1 F  f& t# `4 D    4.PBFT(实用拜占庭容错)) }3 j# [: x1 w0 \& \/ E7 A2 \

% D3 {: o/ }' ?: H! w  j    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。* W6 a- ~0 L9 i, ~! r! c5 j
) b4 ^" X; T# t3 i9 u
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
, h) Z3 \2 C9 t
' k' w, F' H. @0 w; A, I9 Q    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。
- i1 i& d& N7 G5 o* K; F+ m( }4 {6 m6 u: |( ~5 e" W
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。, h# {% R( l2 [- m6 a* D

1 n! u1 W- R# b4 ?+ y6 y    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
5 h% p4 m# i( ^  N1 t0 N5 W- ^8 G
8 Z, y8 ]& A2 _% `* K9 V  s    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
* N2 N- l0 Y; I3 \# j( `# y( V! E/ A% Q9 W
    PBFT的优点:它不需要矿工,不需要确认,节约能源。& v1 m$ D; l* z1 V

$ V% g# j, J7 z3 j  z  {    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。6 G- q7 r  G' I) p% y3 s& v% p
- V+ E% C3 E: h2 L* k
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11