Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
50 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。
+ ?" U* f  W, l8 }
; ]" p+ n. j: P' |" h    主要内容:) ^+ o5 e7 k; ]! M

1 S! c: N% X, i    1.区块链为什么需要共识机制;
  {: p+ B3 Q& o5 e; q8 J
! n! z$ E$ m4 ?: S    2.共识机制的工作原理和重要性;6 |0 i4 P) p: n& A7 |3 D" o$ Q
7 [" v. S4 k4 W
    3.共识机制的基本要求和不可能三角;( _3 L) y2 X, U9 M5 N$ F
% ~7 U0 q' Q# _& Y4 h" G6 ^
    4.共识机制的种类;
$ W5 y: E' ~3 N. i9 m' I0 j3 a0 [4 z! o- r8 J5 [2 {2 n- K( @
    主讲嘉宾
6 z& M, A4 h# t' z% Y# l
7 m+ U% `1 e" H: Q5 T$ ?2 m    讲座内容0 C5 W# ]( U0 X$ F

) `; t6 m+ ^* \5 @* w    一、区块链为什么需要共识机制
' _8 d" w0 u1 V: v0 e5 B, @6 _
( K& y' L- @5 V  I& ^    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。5 d- U: u% x% c; ^/ P# D  o
4 p4 Y; I) A: d0 F: n; }" h
    1.什么是共识机制; C0 t2 F) j( T
; }( g0 [% k( U' d& Y0 S
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。0 o7 D5 M, ?! n7 j4 u

3 r2 V& q; x, B* p# J, a  i5 c    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
! T  d. Y* U* _# r# w$ O5 z: r0 m4 c1 f3 ?" l6 C
    2.分布式记账及“挖矿”& e' C  k4 H, P2 H! _

, C# {" U  X! w4 B+ }, T1 l    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。3 H; l: ]4 C4 D, k$ P) l6 w- K
* w+ I9 E# [8 G) d( {  K
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
& }6 ^  Y5 M2 }- M3 _# |4 J8 B
/ ?. p, r9 u+ I) i+ r. i' i    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
( O# f8 T6 \" N/ I+ Y. ?
) `3 K! N- l4 h  N: A/ l    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。
) @5 @' _( k' p5 C
! ?3 E! B3 V, b    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。/ G: T5 p" ]3 r8 V
8 [) |) e9 c; Y# G# j
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
: b5 E! e* _) I  {# \& v* k1 l% y$ [3 a" y% z
    二、共识机制的工作原理和重要性
( d0 l7 ]2 |8 [. }2 m5 n" P% w! o2 v+ \4 H7 H; P. V
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。" Y0 O. k# c4 N6 S% c) g

  f8 ~$ i7 I! w  G2 H3 @* S    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。1 [4 _" Y" L: s( l! ?

' O( G7 k8 k% e$ }8 Z    那么,"共识机制"是从什么时候出现的?
8 _+ s$ J2 M( R; Q: ?
6 Y2 |5 Y/ W- n9 c* q    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。$ Z2 q, B. x* ^" s; M. B0 w, Q
' g; |% U6 z' D0 r+ V* X6 J
    1999年,Jakobsson发表了关于PoW的论文。* h$ c/ k' u9 G
! {5 v4 Q2 e0 X+ g( ?
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
' h) s+ M5 E* `% F- f* A
& o7 W* ]6 E# }  A- q    2012年,PeerCoin项目开始采用PoS作为共识机制。
  N' T8 q9 g+ O3 s/ u. h7 A- e3 ?( u# a
    2016年,Tendermint项目开始采用PBFT作为公示机制。, a+ l1 t9 J. w  y  ^9 w( v

5 `, f& d. Y! O+ G    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
9 t: q4 e# l; D2 L) w; W, V  W7 w! j  ]
    三、共识机制的基本要求和不可能三角
' a; E+ \, Z' b" t4 D* ^' f5 q7 j) [& t' Z. w, {1 {% F! M
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。1 {) i* L. i/ x# w6 V
, f( C/ w7 {/ B* W; f0 Z7 [+ h
    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。
' C  I9 o) N2 i6 R/ w  _7 |
* O% {$ r8 H& `: {/ N2 ?    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
: G) x' ?6 c- n- {; D) O- h+ W/ i1 w( H6 P! Z& k
    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
0 u3 E9 F( u1 P: n7 N* j; y- a( ~$ _: ~" m' O) k3 G" r2 z0 k& Z
    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。! B' i1 I' s$ V5 \" `& v0 b3 z, d

/ c2 U6 q* x( q' A  @& Y2 ?    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。, S/ Q' l7 B# X1 e: j& k
6 L& N3 Q) b6 n, @
    四、共识机制的种类, C" p1 W9 c9 x

  [( [6 d# z/ T; Y# l0 K1 e( t    1.POW(工作量证明); h0 m" J  H6 h) q( I

/ w- R, ]' q. E5 Y4 J$ H7 X    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。6 o, c4 u' \- U
) Y% c* m0 [) x; R! v# o
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
/ g- ~) Q1 s' S- ^5 D$ W
. ^2 ]; Y. t: K9 ]# y5 r/ O: I    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
' G1 e+ V8 j& s! @  }$ a
8 m/ P. M4 H& P1 R  Z1 E    现在关键来了,工作量证明是什么意思?: i+ X& r1 T& X9 w4 w) c0 E7 {/ t
1 w; @0 }' U( H2 x
    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。
. x) ?4 z% W% M/ d: [0 W
0 R! U' B: E' ^& ]$ O& b  q. N6 z% t3 l    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
3 g) L! Y7 n7 F8 Z5 @8 u
. N6 _2 ~# x' j9 L    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。
3 |0 B! C; ~* B. |4 T: ^  K: e6 R5 ]- e0 U3 F: \
    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。( F, ^, S5 ^/ |/ r4 r5 i& N

' Y/ h1 E! u3 m( M4 t2 R0 v    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
1 o# O  v* \! l/ ^; ^, b5 b1 r+ Y7 v2 e% d
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。) _, E' h% u6 U

. m: R9 K" X& S; ^* z    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
3 s! i, P2 D1 @/ u8 m5 P4 P6 t, s9 [8 D. J/ T) f
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?7 Q% u+ _; q4 I% l+ `2 D2 j* k' h5 \
, R+ h; F8 g' s( c$ {0 I4 M" F
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。
4 l# B. O- ^% B4 k0 j# `
' G6 o9 P6 q  }2 b8 g& P- [    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。
+ v% A( v. l+ h/ e6 @! f6 M& h6 y8 u) f  }+ Q6 m. o
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。- f( X/ B- [1 f. V. Y* E& R- O
' c6 A) h: o0 g" A5 ]
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。, S; D4 g3 f( k4 \! d3 _
/ L" ^: [# E0 R; k6 o7 L
    PoW的优点
5 C5 Q3 M3 k  u  B- n4 p) m  b
0 U& A# y  w. e0 Q) ?: p    1.架构清晰,有效可靠。
' l( M# _3 E; |# N* Y/ v8 ?- k7 P( [2 W* z
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。
% \- U# g9 O# I! c3 @8 l. m* D) G
    3.公平:这种机制类似于多劳多得,干的多,收获也多。
+ O& r3 h6 _0 q
+ b4 ]/ g" j+ t2 l7 P& z4 s    PoW的缺点
  q: _! k: r  X" G9 e6 |, U
2 j, C+ D3 \- a6 U* @( N    1.数据冗余:所有数据都要在所有节点备份一遍。/ {' X) L! ^% L; J: d/ r( B: V

+ `: F& l# s( B    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
7 J' n# h, l6 j2 \0 |+ l$ R
3 q! _% Y% I8 G; T- w! a& B- ]& O    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。/ o5 b" E% \$ J% ~
: h& {+ ^+ [$ {- e% W' S
    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。3 T- r2 h2 [* n  _4 p5 q8 R( r" T, Y
8 D% D3 `2 B; i+ [0 [% U; e6 ~
    2.POS(权益证明)& [% R" a: J7 C  w/ u, t( U$ }" H, m" {

* @0 L) m2 t- t7 ?4 O    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
, }& j  B# O. k4 h  S. o
  P8 A5 {' g7 J8 ~, v; A: M3 G$ b    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。
' V: ~6 |& M- Z
  D2 v8 n5 [  w9 D    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。! R6 ^3 q% M1 e; q1 z( }

4 n3 ?1 [% B6 n; n: M    这样的好处:& }( B. c, k1 A8 E" g0 [

% u! b" C& s* E+ }! ^: q5 E* @: L    1.不需要算题,所以节约能源。
# H0 t/ Q" y- z* ]. h; v- T, Y+ V
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。5 v* J# ]. g/ r( u6 l
/ g) f3 x( O! S% P/ o
    缺点是:
& [* M5 z; u" x4 b4 x+ _7 a' q" b, N$ r3 p  j; u
    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。
- T- m8 [" [3 r. l% U! u
& ^6 u1 I% c2 ^! `( U- E    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。4 O9 n: W9 l, j1 F5 E( q- C

8 a/ X0 Q6 g: R9 B( ?4 C1 ?    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
/ F% n0 Z2 L* a% A6 R3 F- Q; h% k: ?
: ^% ~2 X( H+ _' e! @    3.DPOS(代表权益证明)
8 l( T5 z& v% P9 A& m" p
/ p9 A7 c: E) r# y+ P" ?8 O4 n    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。
& l5 F: L& y6 D2 V% ^: s, [. T$ I$ Y" D- O( G: z5 J- }
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。; i% V: c5 b. b: `- m* S

! L/ M  O2 C2 T2 f9 u    这样做的好处是:- S9 @" I! k5 o5 X3 W2 ^

+ r) w' t3 t5 T$ {/ D$ c+ Q    1.不需要耗费能源和硬件。: L, A( P' Y; u7 v0 W; {
- d& i7 ?# ]% e. m; _& R6 `
    2.缩短了区块确认时间(超级节点可以负责),提高了效率。" o2 V5 b% T0 [/ u; `) j
& L9 Z( O& u+ F
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。
5 U8 P% G8 `7 x# G& Q! A$ X
! Y4 E- n7 \+ \7 n+ v6 V+ z    但是问题也很明显:
; p# W4 g# r1 E2 M; w/ O0 C, c
/ s: K  h, l* t% W2 K4 M! m' e    1.这已经不是去中心化,而是完全的中性化了。; V: g- L8 k  ~; m& O

2 ]6 g' S' ^, i. D    2.节点选举过程存在巨大的人为操作空间。( k4 n) ^  y4 A" e1 y
$ K6 B# ?; [' V! Z# R( ?3 T1 _
    4.PBFT(实用拜占庭容错)
* ]2 W5 G% a* t1 ]6 W; k: G& M; a+ p2 c" O- q
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。% Z, |( |$ @; P( D+ E/ {$ A+ N
/ {+ S4 B1 x/ D. u, G
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。0 Z# J0 b: ?2 n% ]

0 f- @; f2 F6 C1 m3 v/ B    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。
" e# k% F1 A; p3 X' y& f% g; z( B8 p# R8 @
    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。/ h' Y* d: \) x8 J6 F5 N2 M

& F# Y) k7 d+ l5 k9 z2 S0 |+ \    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。. e6 ?' b0 }  Y, z8 P$ Q3 Z
, k5 N$ X4 r7 v: o9 B2 [% m
    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。" b  R* T0 e1 k& \

( \& c  |; g4 ]& W; W7 q    PBFT的优点:它不需要矿工,不需要确认,节约能源。
( ?( x  `9 T; q" C# c1 w$ E0 \$ U! L# x3 R/ U7 k7 d
    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。! L% G, F# e* {, y
  W9 E. `1 [, x' @  H
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11