Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
124 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。# y6 {! s6 T4 _) E. b4 I- X; v5 {" ~

6 S& g! Z  V" |+ N' L1 n    主要内容:
. K- P; N" `4 K0 j" O
2 ^$ j2 p$ D" [3 ~1 [9 `- |    1.区块链为什么需要共识机制;4 B3 s1 T$ i. ^

7 J. A5 |4 o6 M0 x4 J0 z' J    2.共识机制的工作原理和重要性;/ l" T+ e! o0 E) V
0 W2 C: m" ^8 S& r$ u; m$ H* e
    3.共识机制的基本要求和不可能三角;
" Z( P7 }( @  V
- k/ p, k) Z8 O8 f4 m  J( B3 ]    4.共识机制的种类;
3 d) u5 w' i6 @( M2 u$ |. r2 A9 g
3 K, `' E3 S* s6 E" O1 e    主讲嘉宾
6 s* _, \; a9 v) G% P
+ @! a2 Z! R0 h1 I9 z+ s6 y1 X    讲座内容$ C- S: m/ m  a* c1 _( }! u

1 K& {6 Y4 X8 ^7 ?5 D4 P    一、区块链为什么需要共识机制
( U% K- }" Z5 o7 q. `- S- w
4 V' A" y! r, J' d( [    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
% c0 e: l7 v: s+ U" k+ S6 x* r- d" @3 V( q1 ~% n
    1.什么是共识机制
2 z- i6 J4 ]' o& U& F1 p0 U6 N1 F. D6 u7 O
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。- t' _& n" D: o

" e! a' ]+ F# M    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。5 I% K' b% I6 V# v/ J3 z
0 F) h. u% f5 s7 l, i
    2.分布式记账及“挖矿”
; Q  P' o- n( }/ k! R* d4 \' n( G/ d8 [  l) U: U  X
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。9 J+ l2 R8 r2 T
. u: H+ u1 P0 `8 x+ v
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。, s" V7 C1 r1 {# ]: B

) X- `1 P- U# ~! b* l9 m, {    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。) |6 [: j5 p# s* g: Y5 d
# w& ~5 P3 X; w) D: B
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。0 h8 a8 ]* c4 [- w, n" _  H

" b+ l4 b( J5 Y1 X$ t# `* L. \2 h    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
" v! ]  |" M- n! |+ a
; B6 z5 j: u" c" k5 T: D* f$ q    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
6 J' T$ p! u. F
3 w8 o. }" C* a' T4 Z, w4 }$ e1 S- \    二、共识机制的工作原理和重要性
. A) E6 b* m' R) I
0 s0 F2 Y$ A( u& @8 s    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。. Z5 H0 \8 L2 B5 X

* n; p- P  y& F- d: g0 H5 i    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。1 A; T3 l- u- v5 O* u, U) |) }8 @2 r
: j+ [/ K6 b3 y* }; J8 H: N
    那么,"共识机制"是从什么时候出现的?! Z1 [' G1 z$ O- [# B
7 `! r5 U7 C# I3 ]% K/ \4 V
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
! o, y; C, D6 P+ [4 M4 w# P' i/ N" t6 N' O
    1999年,Jakobsson发表了关于PoW的论文。: H4 e- _$ h" }* @3 ]

/ r, V7 h( ]# l+ |8 a    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
* m5 Q2 `* h4 G9 a* ~
* d3 ]( U8 {. C% h    2012年,PeerCoin项目开始采用PoS作为共识机制。1 a" M' T' l  \" T

. K) I* l% P, p    2016年,Tendermint项目开始采用PBFT作为公示机制。* R* C6 D" Y# K) D* N, R% y

* ^2 K. d6 h: s+ ^% g! o; Y    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
- r& I$ v0 W: D8 M: @' e
$ T' z/ S& z: [6 z1 ]/ y# w    三、共识机制的基本要求和不可能三角
) S- `( w* x, B/ D0 S  d: j; \* G- s4 f! T
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。- Z: {5 h* a' o! ?

$ Y6 u* I# X: h& X& f    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
0 Z# B( W% ]- q# ^4 E" y' o1 G# V0 z4 x8 I
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
% A9 S) d! _' y
# T: D# p5 j: Y; h4 g' s& Z% w  P    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。- e" V5 C: p' i9 {$ M

7 V; f' I6 ?9 @7 t    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。
8 {5 q' E# K9 P1 u: v. g: m+ J
) ]8 I' q) K+ M3 n4 Q    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。2 {: }0 j- Y' B+ m" S/ f
5 F- [8 ]2 k& l6 s$ N  r. q' D5 a7 x% C
    四、共识机制的种类: n) p$ t6 n2 t  y$ G  D4 i, C# Y, r

1 L8 E1 i; F( }7 _5 v    1.POW(工作量证明)
3 d) s# J2 G+ _. c* m& v- u1 @9 G
. q* \% w+ F4 l7 a    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。4 P6 f/ j: H5 p: E: l$ j

$ ~! ~7 j" V" ~/ H" h7 [6 n    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。) L% l. F, K$ n+ }$ K3 A* j9 X
3 Q! n3 P- }& K6 \( P
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
1 T% l0 A, w! ?$ o1 R. G3 M2 ~6 s4 A2 d+ |4 E& `
    现在关键来了,工作量证明是什么意思?
4 _& d! C8 g, V  w; j! V
$ @1 \) |# u; ~- N+ b/ f    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。& ^! w$ z( M/ x
' O4 V4 \: L& R/ h- Q
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
( k) U& w) c8 E6 M, Q  S* f
: \& ^# `8 g3 }5 f  Q+ `3 k    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
. k  B2 Q- R/ ?- F6 U  [5 N
1 ^: R( D* G3 w/ b5 P4 X7 V    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。, Q- n0 x/ l' e5 W: [4 A9 k- f
  ^3 R  S- }5 P1 v2 `
    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
2 U' _6 t9 U6 Y7 [! D6 v# u
6 C2 G1 u( e! C$ w- z    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。) B5 Y4 J9 w$ P# ?

  C: B& y' A1 Y% {$ B- J, w1 \    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
* n9 V' c6 _& x+ \8 ~  T, I. s1 l1 z/ c8 `2 Q. K
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?5 H% O4 {# R/ J1 u* T" a
& O1 G& A$ X# O7 m
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
  t" ~& P) G* y& p- }( d5 K  N1 u; k7 G* x
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
  ^' u1 |3 X' V5 H/ |7 m
3 p2 T# O. M, \6 x7 a1 e    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。+ K% `7 `) u6 Q# b. Q8 U6 f4 y8 m

7 L2 g3 g0 f4 l) i. W$ h    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。: K' A# I5 f. \
5 v- _* M5 X8 F
    PoW的优点! R0 r( C& P' B- B5 ?. Y
( G# ^3 g2 J$ t: V8 s0 ]: n
    1.架构清晰,有效可靠。
, Q$ l& a. h- _: `" c5 u& f
% Y  r; C2 h# |2 t% X    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。: X. e) u$ e- W) B) T
& X7 U* s' l$ F6 ~0 _
    3.公平:这种机制类似于多劳多得,干的多,收获也多。
& |- |. Q0 l- Y$ ~, ^( O# D
# K& \: `6 N1 ^, G$ F( u2 X    PoW的缺点
, u. B1 W: L" m
7 @2 J0 D. H& R- T. D    1.数据冗余:所有数据都要在所有节点备份一遍。
+ s: {9 T$ P  t# X. Z, E5 Q; ^* D! w+ _% _  r/ f- h
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
- p% h2 O" G0 v4 O9 r, }- W$ S9 c5 {0 f) Z/ {2 Q
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
! q; B  O) T+ Z3 H; b6 r# e* A5 Y
    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。
$ D& C8 Q4 f7 h8 j7 ]
, b- w8 ]4 ~# a  ^    2.POS(权益证明)5 }+ K- ]. ]9 f3 o
" V) d: k3 v, k& v
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
3 q$ q/ V7 @2 k' J- R1 E3 N3 r* U# d5 M" A( [+ c; b+ b
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。
& Y1 G. c5 j, Y# `/ }( Z, q
* ]! z8 u# [" Z& p1 A    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
( W6 ~  D3 F# Q
# _, J( M4 j0 J5 \7 Z) X    这样的好处:
4 U- r6 R& G& ~7 T# _. U/ t
! b  I' L6 M; c( n    1.不需要算题,所以节约能源。! d+ x8 U8 j; S, R* L

0 `0 d& ^0 I4 \. L    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。5 g+ S; h' o# J1 E
2 `  S; P% K" ^1 W
    缺点是:. K  N, P& d  |
6 [, c$ n' D8 I* r: [9 R" k
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。( n1 u; S: t1 ~  u! H

, e+ o( S+ d2 {7 V    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。' N0 \- i( U) g4 y! [* m
2 _- s7 S3 A! W9 C& R
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
7 l; J  A# D- S( u. ~1 o/ ]' I; P2 p% Z3 j6 E4 s" N/ Y) F! h
    3.DPOS(代表权益证明)
8 e/ T7 g  J) f( r5 P3 u( \- D( d) Z3 Q9 c% F+ ^" y
    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
; w% u. `* ?( g: y7 E) Q$ ^. u( z6 Y3 \0 m- @6 g& F/ e/ u
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
2 F, i1 S% u0 X. X* J0 N) C. d. @% C1 c7 D0 k- O) Y
    这样做的好处是:
0 |1 h- O1 `- {& b% |  _/ }% b$ z4 S- K* N! W
    1.不需要耗费能源和硬件。
; L, `0 n1 o' q8 ]0 d4 Q( N
( c$ S7 D, [+ J. o    2.缩短了区块确认时间(超级节点可以负责),提高了效率。; F. Y# V0 d- c% x) p( q. s
. P' S1 z& b# G/ Q* P6 }( A
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。" ^; _' f9 [+ d" g

1 j( h9 v5 c* l* t$ E( _4 a0 z& }4 ?/ H1 e    但是问题也很明显:) Q9 l, D! f% m) Q6 M- X' @

8 }: G' C* Z# F; z, X! `' @    1.这已经不是去中心化,而是完全的中性化了。/ U9 K3 N; N) z' m; Y

" m: R0 x* U! b+ r) d$ c    2.节点选举过程存在巨大的人为操作空间。
4 Y$ p1 Y! u; z$ `7 J- J9 P3 a' I% U0 E
    4.PBFT(实用拜占庭容错)
! G- Z! X+ r  Y  ]2 _+ k% z+ i) v  m: p
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。; ]& w/ z" J7 B: T4 L

: E9 h) Q( a' i2 B* |    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
  d+ Y4 W5 Y1 F  ~$ L) W+ s3 Z: d: V# G7 |9 h
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。
% j6 O  R& _" {6 S+ B6 ^! A2 F: s8 t; b' s7 G; m" h8 z
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。
  S% F+ e* G. v. t2 h
3 l8 e, [4 v5 F% z' o; ?" v; P    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。# m+ O0 W# H$ L8 y( |; [* {

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

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11