Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
64 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。
2 e' z5 r  o; `
7 l) R% V- U8 j$ q; A. g    主要内容:% i. l6 D2 U! p& C$ t! {" I

2 _& [$ o. {! c% n; `    1.区块链为什么需要共识机制;
! ^* W# X" `, Q
2 k* x+ h/ U* J/ q( E' G- G    2.共识机制的工作原理和重要性;
9 D' e2 X' R0 I/ K% \
# M( g3 O. e) O0 i0 Q# b    3.共识机制的基本要求和不可能三角;
' E9 J* Z) j% d$ w: T6 l% H% n2 f) Q+ G0 E) S
    4.共识机制的种类;
4 J! D3 d7 U1 Y. Q3 \# c+ i# p; }, e. d" n) ]1 C: v: ~
    主讲嘉宾$ ^9 A. z8 V8 Q4 E9 v1 _
% G* E. X& P+ Z1 {* s
    讲座内容
$ B- s+ ^7 M1 R) L. R" U* |
# h3 u( {$ E. i( R* r6 e: ?    一、区块链为什么需要共识机制8 r7 S+ c- B! J/ G1 K/ B1 C
; G1 E- R/ Q* k) B( \# Y
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
8 j  D4 I& Z& x
% }1 n% n( X! K* |  `) y4 v( Y    1.什么是共识机制
2 o+ R) l) a9 Z& F; r6 `
- T1 B; H% H  Z! Z4 f1 v+ N    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
; E0 i3 K- S5 R7 F% T0 v
( h, r  w0 @" F! x3 x$ ^1 E/ K    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
( ^1 z" C! H$ H; q/ Y4 \8 o, t/ b& A, Z7 h4 Z
    2.分布式记账及“挖矿”
4 D1 k4 ?$ V$ i3 U: r4 P! m8 b1 w, C7 M6 `
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。6 d# z3 X& c7 C6 ~5 z1 R; r( K

& k$ ~+ s. k) d7 R/ e0 A    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。6 x0 L3 Q7 M; M0 r/ b& J
4 j+ s. r6 n1 b( E/ d, j
    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
5 L$ ?' q& W% `. F  W
! [+ ?$ h: x) L3 n8 H. @    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。+ k! @7 g; q5 S6 ?' i* C! B

+ n) P) D& T7 B" _! X2 \    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
" i; Y( |4 M/ y5 \
+ R6 d7 i2 H) J* J$ r6 N3 d    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。" s2 T/ q1 A; V* a" [
& a# R, n- ~! n0 O# f3 K) N
    二、共识机制的工作原理和重要性
) c; I$ z& o8 i0 x- D7 i8 g3 i; P- _" Q
+ @: b( p# B" j7 {3 L. w4 g. Z7 y8 c    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。
! {  @6 o  A. Z+ h/ U' N- l0 e
% w! z2 G& F3 v! t( h1 ?) ?. _    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
2 M- R0 L$ J# {4 j  T. x+ r& L8 Y6 m
    那么,"共识机制"是从什么时候出现的?( Y7 Z% w$ F1 T* `0 e" Q" M6 p

7 r" G9 ~& f5 v* g: _# X" F    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。: v0 ?* \4 T3 S2 U: s$ R

* C; H- J: O# h    1999年,Jakobsson发表了关于PoW的论文。* X8 s) Y3 H! S' p! I

8 N' v2 A: i1 N& \    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
) B5 N! F/ Y& X9 `! J# b* z5 O8 \' F
    2012年,PeerCoin项目开始采用PoS作为共识机制。
4 ~: f  O% n" Q6 q- Q. ~* u$ N0 |
    2016年,Tendermint项目开始采用PBFT作为公示机制。
4 r5 W; H, k# |6 n* A9 u( \# o; I: O9 d2 |/ M
    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。; L0 r3 b! ?3 p7 r. y' _6 x
8 F! O+ P9 e9 L" R. N' }& x+ @% |
    三、共识机制的基本要求和不可能三角
, G3 e( Q$ B1 v) C2 V
: r) E6 F6 `$ D$ U$ Q5 G/ I    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。
& b+ {% @: O, _; c" ?% h3 v- O# H3 x& x# |# E
    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
. z: `3 q0 E/ P% {4 `
4 N& `7 [) y, V    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
4 c+ u+ U( y7 Q0 R4 R+ Y) e+ J  S( [+ X. v$ r- O1 V' w( `
    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
$ S+ ~! p, G5 \: A* d, b5 h% U  {4 i4 N* c- I  \2 `9 B
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。' V5 p& `9 G1 z% p
' @8 x1 l/ ]2 o# N/ s" i5 a5 ~8 v
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
, z) C. P0 B! i4 A* F0 @# B( G
/ \1 E; F, z% n* q, }& Q& O7 n+ m    四、共识机制的种类' u5 Y) {! {; I$ ^% b3 @
0 G# A( e3 A# n% v$ d
    1.POW(工作量证明)
! v: \- e) S5 w. c5 b- a4 E  i
0 i% W5 q' K& y# r: v$ @# w    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
  S% |5 d1 a' b; U8 Q  w* R; C) F$ J- O$ C1 i
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
/ Y1 P- o- H# ]7 I* ~. l3 X2 G9 Q) H
    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
: |& C2 o/ A0 v) T# w: I, M" z% ~: b1 j, G+ w9 S
    现在关键来了,工作量证明是什么意思?
( q; H( m' _2 u! F& ?% k
' q. m/ w6 @0 n  }8 Z    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。- j' [' Q5 ]9 Q3 U, N4 [$ R# J
) p  M! o/ s" A: ~
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
9 y" i& z6 U0 S3 D3 v' R7 t7 ~: T/ Z3 L9 D& L+ n, C
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
3 m6 N' P2 j) N& @6 q" k" B: o' Z+ }) y) ~3 O/ u: c+ M6 ^
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
- y( f# n% V: d( D/ Z% T  w0 @  X; _( @9 s: Z
    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
- T! R. f! p. A& A' B! O- f4 I& C1 I/ A: k2 h: k2 k
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。6 z  G9 Z+ u( f7 s3 S
1 @* [: ^. v  V  r3 k
    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。4 H7 O9 f& ~" t# n5 D: Z
& ]: z8 G9 W, ]
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?
1 u6 ^# t" R  y8 C$ N
! ]7 s9 S/ N7 n( q* U    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。6 r- R! w$ @! R- p
! w: G# }7 |( _' X
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
! N0 [7 P8 h( Z: Z' @3 o, S' f! B4 w8 g8 u
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。( t  K1 ], v; v1 U! |" _5 b
4 Q9 |9 T0 v* n) F' w: ]
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。
) w# P* Y9 J8 Q1 B* K
; \& [6 J" d( I# x6 _- p    PoW的优点4 m% ~% P. I7 F& w! M8 f- O

5 S- U- ~+ v) ~8 f    1.架构清晰,有效可靠。% Y- n' Y1 n% v$ {

5 a* W( K3 K8 n* b    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。- @- C" L% S4 Q% t4 R
! ^! U7 R( U7 p2 ?6 i2 Y
    3.公平:这种机制类似于多劳多得,干的多,收获也多。+ I( e# y: \4 h& v- W& h8 I

  v! [6 x9 X0 r    PoW的缺点5 o! M- _; y5 J( {
# G. E, b( C  h2 k; t% X  E/ ^
    1.数据冗余:所有数据都要在所有节点备份一遍。* ]- Y! y1 _. i% K6 ^
$ \0 D" s9 Y0 S5 t% A! ]+ |
    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。( w& ?; N* d9 @1 i- ^
# z4 |8 V/ {3 v3 b0 D4 L
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。! q! A; Z' v7 P

# c! m- E7 T+ I8 u6 @    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。
0 b( s" n& R' X& v5 w' v
" q  t6 V; ?6 E! S! R    2.POS(权益证明)3 D! d9 U5 t. p  b( f, E

8 }& {+ {7 S$ c    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。& l* y$ H$ S& V' M
5 v5 q/ t3 @4 ^
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。( [& ~* ]+ l2 I. g4 [
7 ?9 r  O* a8 e6 c' G
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。" ?" b& V! t6 |. j' u

# r7 r+ d. d. u  d8 i+ e" `+ [) A    这样的好处:/ h3 P/ d) @3 Y8 P, H
  t! `6 M  P, R3 }
    1.不需要算题,所以节约能源。2 _9 {! n1 H7 m. J
8 c* T0 s4 i% X# Y1 B' }
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。
9 k' k  j- r) ?) G; r( ~2 s) q9 {0 f. |" |0 v( F( N4 w
    缺点是:
6 L  @% _5 J, H1 K9 J4 P; c8 g6 h% w
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。
1 L: ^8 q5 o. N& M$ u+ V
) Z! C# N' O+ E( u    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。
& n! m+ y+ _& }. f# ~3 L
% l* p& f6 w' P+ w9 D* {& _9 P    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
. K3 G" x1 X! g) V& H  ?7 e# Z0 E% I
2 [0 {* ~5 K- d" M    3.DPOS(代表权益证明)
% Y8 K  ?. q* N" X; q
* i5 }  |! ?6 Y: i1 U    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。# v$ F( @# W. Z
! S$ e( }1 D5 R" d# R( U
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。& s/ L9 S/ q( Z/ @; H8 ]- {+ G# C

. z9 z8 Y% u' {5 P    这样做的好处是:1 |! h4 ]$ u- _7 m4 z: ?; I& g; R

& B' t; B: {! ]. W  @- ?4 S    1.不需要耗费能源和硬件。  j! M5 {2 H* U6 D2 y  y

# W- x9 c( S' h; |& ?    2.缩短了区块确认时间(超级节点可以负责),提高了效率。
- E$ m; ^- s1 v  I' @  `+ R5 J- z5 a4 ^; v8 r  ]+ s* ]
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。" R. [8 }; u3 M+ z$ K3 |( w

. B# `! T' h- o. E6 D    但是问题也很明显:
, u# K) N% K. h) k( v
! Z2 g6 y+ g4 o, S: S    1.这已经不是去中心化,而是完全的中性化了。
- b: H' \; m0 M, s5 H( V! b6 ?) E5 f0 g0 F: w! j9 h8 p- G* y
    2.节点选举过程存在巨大的人为操作空间。& m- m+ @8 ]- u7 r. r4 p  I# z
8 y0 F" }/ E- n) |! A$ K
    4.PBFT(实用拜占庭容错)
% ]+ K# D. o+ i! f# u: x) n
1 ~3 {! a/ j2 v4 V  _5 h    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。
. n: I8 y% H  u8 W5 p2 |
8 I2 Z2 Y4 ?" p2 S- {5 ?    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
6 u. s4 w9 \% A7 G- F) M; _% X" U- y9 p+ w/ C+ [/ }; m. h
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。- y! X' M7 j- o2 S/ l* J
4 ?8 _' u9 S$ x9 C. Z; N8 `5 S# r
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。1 l  r+ X$ b' ~2 l+ D( I% [
  p# e/ `) K( q$ x6 d
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
4 K, \- n; u6 E. m; d6 O+ |
# U# @3 H7 L$ x    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
( M) x+ D# V) ]* g# r% d+ p2 G8 v
& U8 l! v( d: W) |/ R    PBFT的优点:它不需要矿工,不需要确认,节约能源。9 t0 B+ }, ^! X; X: j2 l3 `

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

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11