Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
63 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。- a: t9 v  t1 ~  C& w0 B& S
3 \: t+ `* C& n9 ~
    主要内容:
" i4 a0 W1 e/ z4 Q, s
9 o5 W6 v4 c; Y$ Z. S    1.区块链为什么需要共识机制;
! s0 i$ ^) @* o9 H& C% w4 X+ M' F- ^# l
    2.共识机制的工作原理和重要性;; `) u) [  [$ D& J
$ I" g2 B  h- g( k# S
    3.共识机制的基本要求和不可能三角;
0 j' h8 L, W3 S* T
1 t9 m, V6 x6 g. A    4.共识机制的种类;
/ Q7 S% k8 K& g
  |9 A+ s' a, ?. M0 i0 p+ k9 \    主讲嘉宾% E1 j+ C/ Y" G
8 B: i. \5 N- C- B$ O. M
    讲座内容
% S, X2 A8 U8 w& v. h0 N& t# z& p
/ k' s) g8 ?! f- A1 I    一、区块链为什么需要共识机制1 D4 K8 n, h/ \
: I8 f" W9 `0 S, T* B- m
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
2 u( y8 f" k" T5 V4 n
' C5 ]: _$ @4 D2 [  g$ ^9 b: p" g    1.什么是共识机制* u# X9 l% h- _8 ^& M) L
8 j% M' k* |2 }: Q2 P) ?
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。* }: \0 v" D1 F9 r$ _  x, U( }7 b

" Z# ~  E0 {( b, u    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
- X+ h! u% B: V
( _& M) a5 G- Y" k* @    2.分布式记账及“挖矿”4 G0 T2 A6 u% s

- n$ g% ~9 s2 n3 B& X8 y    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
: h- i9 C- m5 Z3 A0 C. f5 ?# A+ I' I1 R7 Z" P/ q8 r
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
! C+ n- y: c) c" ^$ n( a- ?
$ r% C/ x# w& X# ?+ \    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
; B% Y" g9 R) ~5 w9 J' k
+ \0 d: e. u* p( a/ H    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。" y- g- }: ~! N/ D
) @5 ]0 I0 B6 _8 Y
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
3 w; Y4 I: L# W. `' v% ?- F2 i3 Q% S3 \' z( T
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
5 `4 X+ O" P- j9 ?, ~, D. J8 S2 T9 G; x- Q
    二、共识机制的工作原理和重要性# r- J7 S" w. c5 J) b

/ }, Y2 r" [/ B9 z; J- Q    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。) _) O7 D- ~7 a
) R0 n7 x  ^# p) j) w* S2 f
    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
. b9 \$ c, f7 p: u3 w
% ?; ?/ z/ d( E) e1 t7 P    那么,"共识机制"是从什么时候出现的?8 O# I& x; \) c* V( ~; c
8 Z9 `+ M: g! Y/ K
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。; n) [6 I% U7 Y
) x8 H# G! I8 H+ k8 c2 D
    1999年,Jakobsson发表了关于PoW的论文。
0 g+ ^+ v. A) X8 B1 L2 T) b4 _
! _. P) _  ^1 w; w  q+ d  M    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
, N) N7 H2 n& A4 B6 h( Y2 p* x$ N% }( X
8 `& B7 i* _  y" h    2012年,PeerCoin项目开始采用PoS作为共识机制。
' j% E2 z% ?: W9 _
' d& j+ I; q7 ^, i4 w    2016年,Tendermint项目开始采用PBFT作为公示机制。
3 Q# l& S% `* I; o
6 f) @. p( B7 l( M2 X. f+ [    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。3 e( l! x7 S9 _/ F
1 P% Z/ H5 W$ ~- w0 m5 u* \. d/ h1 h
    三、共识机制的基本要求和不可能三角
8 e# q5 O+ D: ^- P' q$ H: u) w, F4 ?' a5 s
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。3 C7 R2 h' R2 B2 `1 n, F2 y

9 F# f; V2 n. u    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
1 N; T8 h3 o) w  ~7 o) Q2 I- X( w  S5 [6 ^. e8 ?  S
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
' y5 w/ A; C7 {3 N1 K/ x& z
7 n" g' y0 C: x    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
3 Q4 M3 ~- N6 `! l7 i. U: i4 Y  Y- I: I* m4 C: ^) @
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。. Q: J- Y7 m# M6 z* s0 d; R
+ B! s& n( l# [/ B' P6 j
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
/ L. l1 Y' y1 y- Q8 {7 z, O
: I- G, J) c2 D2 Y( `2 c; F2 g    四、共识机制的种类
# `/ V) b% c2 W5 Q" E3 V
/ O+ |7 ~+ S, C. h, g    1.POW(工作量证明)! e. X2 h. a0 T, r+ b

( `+ e1 T6 W# g$ H3 n) Q+ q- g  W+ o    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。: Z: |! d/ s( ~  a+ e$ y4 O, v

8 i/ i* u' X2 S, V4 E2 C9 Z7 ~    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。( u0 P. w$ i2 R' `$ e6 ~3 U

) P$ S' y8 ?% p' L7 G    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。' k' m7 `0 N5 I" D5 n# g. B

& K: h; t, ?4 {    现在关键来了,工作量证明是什么意思?. H+ u! U2 H" x, E
' Y  h& k* Z5 Z7 C
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。
3 m- d* @7 H, Y  @* t/ n" J
/ W" K( D, Z% W) S6 v    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
: ~* d. B' A! l  ]4 \: W' x  K
/ G/ C# O2 i4 ^6 w& f3 b    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。% n9 V' }" I6 g' w2 g# N0 J
) F  v! `6 @( j5 o
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
2 A3 h5 e/ A6 N5 S8 k( c% B; c% {1 {% ^, R
    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
9 w* {- X( _7 }, M0 l) H" i# a# p
3 X3 ]3 U7 I9 F. X. e+ p6 Y    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
) ~) V0 _$ x1 P, ~! A3 Z/ r
9 r2 e$ ?" l6 ?% j- [/ `8 ]! C    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
3 f, l+ N7 `! A8 b: k; J  @5 G- i
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?
9 N4 T( D- g9 j$ K
3 t7 J2 S1 `0 Z+ ]6 r    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。0 B; t2 h5 v6 M4 x4 U0 g

* |6 `3 n/ x2 _0 I  ^6 F    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
/ P4 c/ y/ L* C1 H- J2 C
, x; a8 b4 @; d5 x    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。
  F5 O& k+ B: b2 s/ c: n- K( ^1 T6 W: Z1 v* _% D: a0 @
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。
: l$ |$ ?( W6 A- F& P/ G9 c& d+ O3 P% G8 G" }  e  o1 |8 f
    PoW的优点6 y) P+ M& m, i7 J

" C# Q3 a1 ]" L) C2 ^    1.架构清晰,有效可靠。) y3 Y1 {6 f" A; w

9 H2 m& B/ w: S, V; ?! [: w4 Z6 V    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
! d" e7 W/ I& G, C$ K
0 r6 ~9 K, G* B1 S6 z8 x. ?' u) }    3.公平:这种机制类似于多劳多得,干的多,收获也多。! {+ b: w( R2 @) I  ~

' z7 S, @$ F6 m" H& S' i4 W    PoW的缺点
  A+ P, T7 G7 `1 O% W5 ?
: w7 E# W, j: l9 {. a7 n    1.数据冗余:所有数据都要在所有节点备份一遍。5 q! S" D( M7 F* s/ z, G# q

1 K2 @" s5 I- D$ F% v% w    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
' x+ K4 x7 k6 i7 u1 X. I( D- a) E& F, }5 f1 m
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。1 G) O, ]! @' b2 j% T! x/ m4 }: \# w

: h% q1 n" w* Y+ P2 x: t( J( w/ m    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。9 I+ P6 k# k4 y9 I4 `+ o3 l
4 h, F, k" Q: Y7 ~! N
    2.POS(权益证明)
; u' @3 ~: N$ C% X: F7 b5 v' S/ \  |
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
; [: n) v" w6 f% _3 a1 T# \# M( B, s: T) M5 u* W7 C1 f
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。
/ V; }! {; ~8 l7 Z5 p0 }: S) n. p" p( b  v' ~1 h
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。/ W, W" T: b: s

: I+ T# k$ w( d/ R    这样的好处:) V" U( k7 v' l) p

- p0 o+ o2 h7 U    1.不需要算题,所以节约能源。
8 ^  ]. \! r% Q- p$ }& x7 F! e2 {! K% F7 h9 S
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。
$ N7 @, b( D8 V9 d% r) ^% i+ h/ g  y% Q& y& i# \" V% z
    缺点是:# @( h- x: k3 A. K6 |' P! m6 l

3 c; t5 L0 d, T    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。& @! o" {6 h  M+ c, z4 `
7 D+ j  Z7 F. @- Y" b. [
    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。* O" b1 ~/ v/ Y; i. C( m. h
% Z: F8 p( l5 e$ W2 ~/ G
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
" m" |! X" M0 S5 q% P( }5 u, i/ h8 ?# Q# y6 P3 L5 D+ C  R
    3.DPOS(代表权益证明)) s$ I  d4 p5 V, z7 f4 a
* V/ g  [5 F# b; P5 V
    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
" y" G  _+ W8 A
* M2 y- R- a, ]" v3 x6 f    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
8 l% ^8 G6 [0 K5 I$ n
" Q% V8 w+ w7 S; `    这样做的好处是:4 h* |" T$ D" x/ \& P6 d
' k. Y# W! @( w6 z$ W5 z0 s
    1.不需要耗费能源和硬件。0 Z* H" Y: v; [3 [; [1 V# @: Q4 s

. }# F. z; z% i/ \& x8 q- }3 O: M    2.缩短了区块确认时间(超级节点可以负责),提高了效率。# _) E4 w2 [8 K

# q* z# y) O1 |, Z9 f7 c    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
" T: W4 v$ N1 F! l  |) Z& {9 s; W
, P3 n7 |7 y% w1 @& c    但是问题也很明显:
# F# h+ ~+ X; y9 A# b3 c0 ^
, D) |5 Q1 v2 L, g9 H: E2 \2 B    1.这已经不是去中心化,而是完全的中性化了。% v2 s; w+ X! V" e5 c" ~
2 L  F; \& Z& {2 f- T* m
    2.节点选举过程存在巨大的人为操作空间。, [; b6 I* m# @2 Q! J# y

8 O1 m! v  Z8 Z1 B6 g    4.PBFT(实用拜占庭容错)% Q9 A9 c. x5 T5 e- g" x; n6 F

  Q. e6 S% q+ P% ^0 }/ W, X( u- l    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。
  d) f5 @6 v: ^5 p6 U1 l' ^: Z0 [  z
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。- e3 T. B9 u% ~* Y* b
0 H8 q. X4 F' L5 I" n/ M; W8 q
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。
2 k0 m1 C6 g, J; {: H- ^/ l. T9 L
  U6 J5 X# P8 Z: d3 H8 M9 R    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。; X  ~9 @) A- O% p/ X3 v9 }1 m) N
- s5 y! V4 h8 D4 |0 v: p  y( H
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
. }1 D1 d& T7 ?! X4 Z, j
( N1 `; w# O' R& F" J& |7 H    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
. T' Z- P; C+ ~& c8 Z' u7 `* c
% s  k' c- m, K) t9 R* p    PBFT的优点:它不需要矿工,不需要确认,节约能源。
1 F# j# y. F& _0 R* W; K3 _
8 z' h4 k8 S0 O3 w3 l    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。+ U# w- @' ?  K: f
3 {/ n' a" X7 A7 x, L0 A
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11