Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
66 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。) ^+ ^% _! I* K( c8 S) _
( }7 h- C1 R3 @! D3 v% j+ H0 k
    主要内容:4 G  ^4 Z4 b  o2 a' `) L/ M8 k* F) E

0 B$ R2 {; B: h, p& w" J$ t4 \- U3 R    1.区块链为什么需要共识机制;
9 Q2 M1 C" X1 R- L* @# y8 }
$ t. H+ n/ R$ ^: d    2.共识机制的工作原理和重要性;- C  A/ F6 b+ N* y
" C# }1 y. t1 t
    3.共识机制的基本要求和不可能三角;
: ]& V4 |5 F8 @' O1 u2 p" R9 Q7 A* J5 r2 _( l/ g2 Z
    4.共识机制的种类;0 V: e& N( g2 Q4 z
& S# C# c' k; F, Z, x* d. A
    主讲嘉宾
, f5 r  h: l) v& Z4 t/ W4 p. k! B2 H/ i0 Z9 ]2 V- ~. {1 {4 w4 }: i, u
    讲座内容
1 e1 ~: N9 J( M
) H# e! r5 i& c0 M3 j    一、区块链为什么需要共识机制' d9 P0 H: H1 K# u0 ?& o2 H

' @. E* f' }& t4 O% B4 ?    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
4 q) z) E$ r0 ?7 S
# ^# F% _. C" m; J' |    1.什么是共识机制
- |! C( m3 Q2 q; }6 ], |7 g5 Y' L' _+ o. o
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
7 U4 [- A! y9 k2 K5 A
/ @) q* v4 a3 m% V    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。, a  b1 |1 Y8 o( Z1 T& T
- L1 [+ Z& }# T9 A
    2.分布式记账及“挖矿”
9 V; L' a( i/ k" G6 S. g. V& x5 ^# \5 K4 t9 Y( X
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。% Y, ]1 ?0 Y% C
1 E; x3 K' d  @
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。. C& `: K" o9 \; Y

% o$ F% p, T" E9 Z. [    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。( S2 M# s3 t& }+ }2 {8 ~

* F8 r, I  D* P  W    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。! h5 q: J- q- b) ^

( b4 z' S/ z: d0 @8 o: X" {7 \) G+ R    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。. ?8 \/ Z/ U0 g1 F& s

9 \. K8 w" E. F; C    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
1 \6 y. \1 N* \
  q: H3 \  _" i  S6 h2 C$ i! F    二、共识机制的工作原理和重要性# d* \. I" T' C2 Y! D
9 i5 r& Y7 U+ p; u
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。( O, f9 s; y: s! o# k) p+ E0 U
: }& l7 u5 L9 D% X' v/ X4 f4 z' `
    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。, A2 q  A9 V% l0 P8 r

3 }$ W. X$ Y" k' }% v    那么,"共识机制"是从什么时候出现的?
2 m, L% z) t1 h! ]0 J  Y3 B" r
: B5 F8 I" K1 U( D9 e    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
+ O% P$ [9 q: w: J3 }" f5 t) O8 R/ H/ N9 I3 J
    1999年,Jakobsson发表了关于PoW的论文。
8 e# t+ j. z' \+ b' h
4 m5 W9 s* z, y( z# z    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。/ S2 V  ]* p- o0 v% K* b. ~1 D

/ D+ L2 {  G) M    2012年,PeerCoin项目开始采用PoS作为共识机制。; E, g" z+ H1 D$ M6 q: b0 \9 F
& T  x3 V6 |& r
    2016年,Tendermint项目开始采用PBFT作为公示机制。
1 R: q6 G( [' F. f' G( s
1 v$ s: g4 p+ Q4 _9 A    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
. L% j# _4 b6 I; _9 U  u6 a% `+ r. D( c) p) Y7 E2 a4 r
    三、共识机制的基本要求和不可能三角
  y) m" C9 A; O7 l0 o" w4 A/ a6 G& G" Z
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。
' r8 ~- u( M& f0 y1 p" Q9 W: z- t3 y7 b( N3 K
    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
+ g& B9 t2 L5 J/ R* |% H5 w/ J) c
9 S' T. g3 C- U! r3 Q1 I    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
. V9 I: m% h$ u7 l8 Q6 M$ `
% s9 G9 i7 X! ~5 D/ ]1 s, S% X    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。2 Z! K6 S9 H, Q
* o) @# ^, U9 ]; m" ?9 Q
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。/ E. o" H6 f! `) e- l
0 y" U5 R5 ?' m- ]
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
2 b9 F4 U9 z. t3 L  n
: I% A9 O# l  [! |% f$ b    四、共识机制的种类3 a% `2 u! L  V, T9 k* r& {
! e/ ^2 I" z$ i. Y3 u
    1.POW(工作量证明)
# l' a  ]' f- D$ i+ K: _+ l# |
# Y1 H! y  ^' q- [+ d- I    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。. W* k+ t; T# `+ H
) o/ K* W. M- g
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
1 h- n. |" m9 o( T2 O. e
2 U# ]) N( o7 u% ]$ }- u    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。! r$ x, `' u2 x3 K  J1 l

1 G" {5 J* G, e) e    现在关键来了,工作量证明是什么意思?
" e2 D/ @9 o4 f/ b8 T% Q5 u- T  x1 a1 U- X4 ?# X. M/ e* v4 Y
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。
$ T) M! ~: f2 C( [4 _8 D8 T! I. [2 K# u5 O- V
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
  ?$ c- x6 z, s' a. E: B. p
- S( s: a) O' |/ ~" k    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
% y8 T+ I: ]$ G. h9 R; T7 ?" ?5 h9 w
: @9 x; Y' D3 G+ T9 r    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
4 n; n2 e% ]0 ?6 g. a& k; W* @
2 k: m. @  _; U" U7 n    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
" Y% |& L7 L8 d7 s2 q
' J" w6 Y, X% C1 c    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
1 |, }5 L8 l1 K& }6 M1 i1 m/ ]+ A2 _( k# Y4 p3 y
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
1 l& s) N! L: N9 t8 h) Q+ q3 e1 t  `: I, z2 C
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?
  Z2 N  J, E& {' Z: o3 Q, @+ c: y3 f; }7 \
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
9 O8 [; x! a+ `$ d4 ^0 a+ p; D) c: e7 q0 y5 D1 v, q4 ^/ u
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。4 v5 r2 B9 h9 y, s# a

6 f6 o/ C* }: S% O3 F* V    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。" G# k' c7 l) E, C- ?$ E' ?

$ d( S( a  r+ y5 e( o, N6 D6 P1 Z    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。1 E6 i5 d6 ^% P0 {; Y5 |& A- ~/ _1 x

3 A9 h, X' D! `9 u    PoW的优点
8 }' [) d1 ?- G6 D4 `5 j* k4 @
1 b, X9 L( [) w: G* e/ l    1.架构清晰,有效可靠。
! d, K4 n# B/ e3 O0 \  ~7 _
* p; o) D+ ?* Y) g, _    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。: A) [1 y0 M- K% A

  P, i$ `; l% t9 t3 w    3.公平:这种机制类似于多劳多得,干的多,收获也多。" D+ L7 N' f$ Z. g% r( m! k# h
# R3 P* G3 g# I, v! ^: ?
    PoW的缺点; B" M$ H- I% J* K6 S7 C
( o( y. q% s* r. k
    1.数据冗余:所有数据都要在所有节点备份一遍。
! H4 O! R" T9 p/ W. v0 n
/ m! q8 {0 J& X- z: f; W    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
9 J+ A8 |$ W6 j" L' u" c
$ b+ V3 ?7 A2 g. z& W( z1 \    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。( T1 _# \" f; Y8 c) M* f$ K

8 }0 N2 P8 v" T9 |/ B" [) I. Q    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。; `0 d6 y7 P5 R6 G2 A) A0 M

% X* L4 D. f! O    2.POS(权益证明)" X7 u) U% y, b+ G

7 b  P* f' |3 \; i$ J0 p    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。4 x6 I! d$ r- K0 U9 X0 u

, j2 p, U- j& N0 U* T6 Y6 ?    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。& e' A) ^5 ?$ X0 b) `. s
+ {( A/ N' P7 `+ e3 \
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
* n  I6 X$ J, v* W4 F
1 f1 H- D# G' s1 f. r3 |8 w    这样的好处:
5 S7 X9 ^* P: |  s- U$ Q- P
( L: h6 g- T8 D    1.不需要算题,所以节约能源。7 Q; _" U& W9 T1 u! T3 v( S4 Q
" q6 P0 k$ M7 ]% \" K1 b1 P& e
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。4 n; c8 N3 z+ w1 E

+ O- {7 V( e% c# \& ?- {. f1 C& C    缺点是:
' _7 }3 v* G, H4 N8 H- C3 U% i6 z9 b) m  g2 U% U
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。( `6 N$ Y4 M1 P' I4 ^7 f: Q. K( ]0 p% l

0 v8 ^0 q4 V# s' q! g$ A1 o' o; \& H    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。9 I& I1 j% _) t7 F+ W

: A) K( I( B7 N5 p0 n0 \4 J    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。/ m( u: r- `0 v

% {+ E; u) B( H6 ]+ Z) M    3.DPOS(代表权益证明)
$ W7 b( x$ v4 p% Y7 Q2 B  y/ p+ G  J  ?7 b+ A4 f
    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
" X/ L5 M+ v- {5 u, n# r. Z
! ?/ {, w' k. ?" C" K5 j, c0 x2 B    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
& G9 ]) D9 l$ g6 u) y; T' g
2 X/ d& M0 m; _6 N4 k& F    这样做的好处是:
) L8 R+ D! E% u0 E! z6 k, z, o' {; r1 L  [
    1.不需要耗费能源和硬件。
; N2 o9 y  y1 k$ _
" i- g' g% E, e    2.缩短了区块确认时间(超级节点可以负责),提高了效率。
- g; z) I7 X4 j5 r' O6 V4 A  }
8 i4 ^* ^+ x- d, X2 |( j! |6 ]    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
) F) |( W7 @: ]5 ~" J7 H- x# X9 }( J# }* v: j& b; T0 o
    但是问题也很明显:9 J' l6 f( |3 U: T9 t
1 x& ^8 ~! d/ H4 Z
    1.这已经不是去中心化,而是完全的中性化了。
" f7 L% z" ~8 X  L
+ V# Z0 K( \1 V" R( l  Q    2.节点选举过程存在巨大的人为操作空间。
6 p7 [$ M+ a1 @
8 X7 N* l$ g: V4 v  `$ H9 O6 O( Z    4.PBFT(实用拜占庭容错)& B- o! _% U4 V( _# O; @5 m" Z
9 L7 f) l! l  g9 e
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。/ l$ J& u, g/ |  k+ n& j! X' U

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

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11