Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
120 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。: V' Z! T1 j; i3 J
" \! G/ b6 t. d+ T7 V8 F! d
    主要内容:( P" H( m# U4 H# X

6 ~" o- W, d8 y, Q5 l7 u) H6 d    1.区块链为什么需要共识机制;
2 u) u; \! P( }. w/ @+ v
6 d: i% M! v: ^' C% d! A% Z    2.共识机制的工作原理和重要性;0 D( i6 h2 c7 c" D+ o+ t1 o

$ u# i8 ?; o4 `7 m    3.共识机制的基本要求和不可能三角;" `7 d8 K; D7 ~; z6 w  B; p

8 N7 M8 I* P$ ^2 d* s3 a: ^2 z    4.共识机制的种类;$ m* O& `; K& u) F4 i. Y) E5 f
* L0 w) A$ T! t! P6 n# ]1 i
    主讲嘉宾
( n) W" C# [  h+ v
2 W, @8 Z: W  ~, @3 e$ F  [, n    讲座内容# e; S! `; u' h- V

; p3 z* j& G# S- a' O5 G' h0 W& [% M    一、区块链为什么需要共识机制
/ R/ M, K% A! f2 \; L+ a! y* a/ d, V
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
' O7 [) W* M4 T
, p* H- a  [4 w    1.什么是共识机制2 e- T+ v8 x* Q
; p: @+ _  j! t6 b8 _" |, s, O
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。/ }& W* d! }6 S; i9 H/ B
$ Z: |# [6 b+ x7 N& ?# g
    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。( S3 m' w( c/ e4 o8 G% u% G
: \3 T( U8 Z. D1 P) |
    2.分布式记账及“挖矿”6 e& y( P6 U/ N! ~" ]' _

' C! ^4 i! C6 O, Z2 w    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。& S0 y- i$ Y9 K: Z$ i2 Q

# R7 T% C, q$ @: v    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。* f1 h: _; j: D8 A- y: D

+ D5 q  r/ [/ f$ H8 T8 T; m4 N, `' V( e    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。2 C( K) f5 l- [7 k  m/ V
7 d0 ]: h7 L( X6 _- L7 ]) x
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。
; I: A$ W& n: |. @6 {- u0 B# k, |# J% J# \" X' f
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。5 i# S) [: Y# V' M8 m$ S) K# s

7 o# c, P& E, n    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
5 O& x8 P6 c6 N$ k: a
) Q6 Z6 v6 K6 F- U- B    二、共识机制的工作原理和重要性
  t2 x; [4 x& ^6 n8 U& d$ t$ l& |" i, z0 f& ~' o
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。; B: a5 k9 t, n# x( q. _- Q9 b% _: H

0 Q9 a; {9 ^( E! e0 }    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
+ _$ e/ ?+ g9 p6 n; x4 Z0 U
! W9 b; `+ F5 a$ [* n    那么,"共识机制"是从什么时候出现的?
1 A# ^+ s# B0 i* S4 P# b
( [1 M& S' k* F) t5 @' L5 {$ J    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。  n  n7 s( ^; A, |/ r& j* Q6 I

8 m" X* l- a7 k9 f0 k) b5 ]    1999年,Jakobsson发表了关于PoW的论文。
$ `+ w+ L2 s  b! N
: c% C* A+ ~6 z# V& G* o2 v    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。: M% k2 O- P( p* F0 l3 k0 ?: f

9 d% C  u2 U( O$ b6 G7 m3 f    2012年,PeerCoin项目开始采用PoS作为共识机制。
6 Y9 s; }9 H' |- G% U6 B7 ~2 T  ^( E+ i- \: ]$ E
    2016年,Tendermint项目开始采用PBFT作为公示机制。3 O# A9 N5 X! m1 U

  b' e3 M4 F9 O4 u$ I* ]' b    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
9 ^5 Y( C- u9 O+ V
8 \4 r2 j+ k6 g  G    三、共识机制的基本要求和不可能三角4 o" b$ w' u& U9 N. T& ?
; i0 L( k* u0 Y  S# `% n
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。+ I* ~$ q5 {; k/ }* m' O1 ~
) ?: |& c: d$ M! V+ g
    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。- G: N' |% O; ~4 ^

1 F) E" e9 t$ r6 W* F5 C7 q; o    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:6 M3 k: M1 W* x; g( R0 k6 `' T
! V& P. n/ T2 n8 Z, w6 ^; q5 R
    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。) U! O1 }8 s' t+ ]- d7 H% O
& I- z9 |: G5 N3 l1 N" z  S
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。
& a6 P4 c0 W4 y  _8 ?0 Y/ B4 R" z% F
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
9 G7 K9 O( }/ `* K& W, Y
: p* h% I+ N9 t3 ^    四、共识机制的种类* o5 s( Q  b2 f+ ?+ g" o+ A

( B. Y, W! M$ T7 p    1.POW(工作量证明)# E6 L8 v* f" M- D2 `
" H; P+ z$ W" C8 s
    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
& f9 s" j! G9 y& x2 K" O
) L1 E3 ~9 C, K    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
# K2 e2 d4 ~) H3 V* C2 K" b$ v% ^% `3 N9 f2 w1 F8 A9 \6 |
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
# K6 s+ I! n- V2 f6 R+ a
" g5 \$ L+ I2 Q( E6 G    现在关键来了,工作量证明是什么意思?
! Z' F) k& z) f! d) u6 m: f7 @3 U+ W$ L0 O3 L
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。
: ^; r, G3 j, @; f% L% ~. B
& h2 ~' H, C) |7 Q4 X( x* e$ @    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
" s" ~4 z. r5 R; e# o8 ^+ o& M) s( E
8 K, |2 Z6 Q$ t, Y1 o( X! p% l    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。1 v: h0 q4 A6 p5 v( i  S+ W! Q1 E7 c
" P; C" F6 x9 D+ g# z
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。* d3 e. f# l, Y! c! }4 b' O

5 W1 P. T$ n7 N" Q    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
. }5 ^# E$ X) H% D* m! v; N; q# t. G1 @, J# y" B" P
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。5 K5 ?1 W/ c* d

# Z+ P& m& o7 J7 k2 X/ U) r( S    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
, K  i" u- Q2 R7 O  E1 _( s
: P, d( \$ G- o$ d5 \    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?2 \! \: K# ^  ], L

) `( l0 |8 m2 ?! A    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。3 I1 r7 C. s1 R1 f7 H! T- |% c

+ [, E0 K6 k* R; _  p0 Q    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。2 }$ m) h! j% h- T! i0 X. ^7 i6 V

  K% I9 \2 f: T9 q: l    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。7 S: g" [/ P2 {8 }2 _

4 b& d% q8 Z7 O. R8 H! \" g    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。8 I6 F7 ?; a& V' l

" q3 p) P5 |$ e( O    PoW的优点
/ p6 i" r8 v7 _. d! C  x! R: h3 _
$ k: m# o" ?. E- U: n1 B, Q    1.架构清晰,有效可靠。) y3 @! I! W" m$ I. b# b
' X1 s4 M8 A- F, @4 n% C
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。7 b& p) H8 D1 n* l
1 y  }( z. y( V3 ]$ F' l
    3.公平:这种机制类似于多劳多得,干的多,收获也多。. ~3 J0 X5 Q5 |& c( p/ E

: p9 p- a. _) U" H    PoW的缺点
$ R' G! x( D; I& F) q9 ^" G+ e
; M3 H3 f/ `; {0 c+ t( B    1.数据冗余:所有数据都要在所有节点备份一遍。3 L# d2 L4 ?, m* `+ ]: v- s  T4 v- s
7 t4 T, e2 x# V1 y6 |
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。' r0 L- j& T) _* s8 ~1 L; T
- K+ Q1 m$ u2 m0 z& Z; j0 v
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
% r$ a: R1 z# H5 F7 D/ P
! K7 ]- O) I6 Y6 B: K    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。8 J( x. F. ]4 N; Y7 d- _# T- t

% i6 n1 x$ c# O8 g; v$ E: J    2.POS(权益证明)& c9 n( s. D2 ]; Q/ O. A# E, ^
- d& G  p7 N$ H/ q. n
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
9 p$ Y2 k+ s- K6 O9 v: _% J/ r( a, @
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。2 B; ^2 C- f4 B4 j$ e1 P, x

* n/ d- o# @: e- l1 ]    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。' R* j1 g  }0 n( i

9 r- \, d" w; g) T) G# s0 {  u    这样的好处:" I+ u6 i/ ?4 i! I* N  o, C
0 T# j$ X1 ^- S' @
    1.不需要算题,所以节约能源。0 _1 |% y$ B3 v" T! K

9 T4 t3 r  |& E) [* F( Y7 z    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。- [% \3 h% J( P7 |3 X
0 p" e( P# a6 m* }  R& m1 C
    缺点是:
" {7 k8 N7 b. O# M( x- _) B6 m$ E
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。
' |) z# P( \. }5 I1 U/ q" r$ a0 a- W% a
    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
7 v9 C" z4 u% j( V% P2 I0 w! Q1 D6 W4 a8 h$ d
    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
# P' A3 z8 G# O/ u' Z
# A3 D; r7 t6 G* [" j1 @    3.DPOS(代表权益证明)* O6 @" |9 W& G. ?  n1 y

% _: S7 v  e& b# j( m/ e( s) u& Q5 d    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
- J* Q& _( {7 q$ Q" V+ g
* F( M% l& V+ a( P    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
: N% G% o5 |7 p! {3 R+ \% e4 J: Z, R" S
    这样做的好处是:
* X$ ^+ L+ h5 N1 ]" i
: t& p& ]0 Q- A# A6 {0 L    1.不需要耗费能源和硬件。) u2 H. C+ ^) d! k

: l- C) p) v% g9 |7 T    2.缩短了区块确认时间(超级节点可以负责),提高了效率。
4 I/ a! y+ @( N% J  l- X6 w) O3 |. `4 }& @6 `2 L2 V
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
1 n+ |* F$ K2 E4 l, U  K- G( L4 W
) p8 m& E1 N& |$ p) x) o6 F    但是问题也很明显:
0 ^/ c5 \$ u* @5 d  F0 M
, [' g1 q+ x) ?: z! R9 v" E9 b" h+ Q    1.这已经不是去中心化,而是完全的中性化了。3 q$ z: I9 [' _- L5 u7 Q* b
* W. \& i" I9 a* d) y
    2.节点选举过程存在巨大的人为操作空间。' h. H; S5 h4 K0 L3 |5 ^. D; `
0 _) c' @* s; \
    4.PBFT(实用拜占庭容错)
, ]5 x6 F5 [# k; R$ k' D4 b) l
2 _. \% Z2 q, c3 u. u- j! t    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。
8 E9 O7 s/ B* L9 e' s+ ^6 p8 k, p6 X4 F9 @3 w- @, m+ U
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
$ ~* f* m2 m4 _% I
3 L) U4 p2 w0 X3 g' |$ W    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。  s& m- f) |% a' Y8 _- p* {

3 h  H) N: a+ _, d    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。
  q2 y% w3 a. r) S( m1 U# W# [: x$ t. O3 G# @% k8 ?( J, |
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
+ g1 ?  y+ G& s/ b. w. J) `) P) Y2 y3 q
    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。" w5 U: z! T! ?% ?

8 C8 Y6 ~! }- E. e  p9 i5 S7 ~    PBFT的优点:它不需要矿工,不需要确认,节约能源。  D1 }  ~* b2 G6 W
& J5 F* e! g6 n# M. w! {2 t
    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。4 r* M! H* |6 g4 q' `  w- S
" e; N5 l( w; h& M8 ]; H
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11