Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
134 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。
$ d- ^, z1 g4 k/ _, f$ m2 X. B- F' `4 u
    主要内容:" H/ ^( l. M0 g6 C

8 X# c0 F5 x) A) W* F    1.区块链为什么需要共识机制;# B' p7 n$ C  m" F3 E! F# K
8 I- g8 L6 l( v5 J
    2.共识机制的工作原理和重要性;
- O1 h& L. \% x+ t! i. ^8 w, y) {% D" t: H+ V! ?6 U: Z& w
    3.共识机制的基本要求和不可能三角;
8 z2 k' Q( x: @1 H
3 }* Z1 h, ]0 h- ~    4.共识机制的种类;# `6 B9 V  w7 ^3 O

, {  t7 m% B8 R0 A1 D' O4 d    主讲嘉宾
+ G( U. j" `/ f" `' l4 D( I2 w/ D0 y8 ?9 r, d
    讲座内容( H5 C/ ?6 I) V3 r, q2 \" r

4 r% {( F9 {$ b. x" T. |    一、区块链为什么需要共识机制
! B' q- r6 }' h) T# J% B, a- U$ H3 s5 p# j/ p0 f' A3 k
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
* x# N( ~- `+ B  v4 W  X5 R5 P+ `9 Q6 Y5 U% r' `% [5 U
    1.什么是共识机制, ~0 w/ w( a) R3 x! |
3 o+ C) N+ f' s6 n) b
    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。% O3 w( d3 U( D

8 d2 \1 y/ z6 A& L    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。
9 B0 ^3 ?4 _  d% Y6 t' ]2 w
2 N& w, D, x2 C& ]) P( e0 Y    2.分布式记账及“挖矿”$ e5 A3 V$ I( P; n" T

% @  n- I8 T8 w* p2 y+ W    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
" b" S. ^' y1 r/ l% ^, R* N. ~5 _4 {8 r. F
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
5 G7 [# N" F5 _8 g9 h( f$ Q
! q5 x, a( n% Y! E# }7 Z: X    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。
4 ?, t7 }, j! d& [3 Z. U+ Z
5 b$ `* w5 L; _/ ?  J    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。
7 S$ _/ _( q8 L6 l( n' r
$ E0 u6 H* M2 ?  R    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。
% }! N" C5 ?% w3 }: _+ F2 s
% y/ @4 D& D2 {" S5 @' u9 q    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。
/ h# V+ l" W+ T* f- O# R: x; a7 N$ S# r8 f8 F7 R
    二、共识机制的工作原理和重要性7 B. @# A3 s" G  T/ ]4 q
) f& B3 K) F0 G  |1 F- V
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。$ h5 G4 a2 N3 Y
8 P2 \. z, o' w8 h; o% `
    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。
& o0 @9 ^+ F4 ?6 D1 l6 d
9 C2 R+ R" V8 d  Y$ L% ~    那么,"共识机制"是从什么时候出现的?
  Z- g* w2 d  b) U: B& _. y: T0 @/ s& A/ E/ A
    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
9 W5 c: I" q5 |3 G# J! P2 V  B. s: z# ?
    1999年,Jakobsson发表了关于PoW的论文。% g/ \. Y4 [3 ?. `4 @2 p- B! B
5 M2 M7 d) d9 F- ~6 g- A: t1 Q# Q
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。4 Z6 K# ^  r; d
1 L' c0 x% \, J( q
    2012年,PeerCoin项目开始采用PoS作为共识机制。$ |6 B: D( P2 H3 w

1 @* a4 A2 j6 m    2016年,Tendermint项目开始采用PBFT作为公示机制。
' Y& S  u- Z+ k4 ?9 f. l+ N- a
6 z' y9 n# F; ]! T- m1 z* G0 v    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。% L2 @1 T# b% T  ?) N4 U/ B

! u& s, N% y& v    三、共识机制的基本要求和不可能三角. ?; c/ p8 _  g2 w( N" D/ C
5 z- z- t, m4 u6 r* n
    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。' m: q2 Q0 T- v  c% L* h0 V

: @0 C" ?% \, D/ l: _    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。7 D! O# N9 E+ G# g. ~4 ]$ c
* m" N2 Z8 B8 ~7 R" S3 C4 o# W
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:
0 f. W( m! B! K: L; U- B9 k
: x/ s0 d2 H) p8 A0 x- [    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
9 p1 r- `7 F! H8 T
. v0 o  F( I, ?& U) ]2 [    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。
# R2 Q9 m1 y, p8 h/ ^
. z. s: N; y% u; ^    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
* f. I7 b& ~: g+ B0 y% j' T$ n4 `4 N8 q
    四、共识机制的种类: q) O6 i0 D( M& L! G

% J- q! ^, j& m# `! U9 M: _6 \    1.POW(工作量证明)7 M  j$ m% ?: C7 N; j; Y
5 \$ Y, R6 u" h8 }4 c0 g' d" b: w
    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。" p- N3 J9 z4 M9 f- y
; z; n9 I; C# E: ~+ n2 b
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
+ E+ q5 M3 z: \1 t5 e$ r
9 r2 T5 r" s. @" Y    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。* P8 B' G( Z* x6 j4 [$ m4 j

7 ~& l8 `% {9 W# l' C    现在关键来了,工作量证明是什么意思?
9 H7 d! m& z. _; c( }+ P
9 X) `2 j9 \, j) c    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。+ {. c. M$ o" m8 [" T
" O; C1 ^! Z7 f
    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。  a# d& C5 u  ]9 x) I6 s

8 x+ b1 i5 \$ S+ J    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。' p" H8 r0 C3 q+ D, Q8 j2 Y4 ?: x% l

  s- T0 m3 M5 q* O% u8 n7 O; y    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
7 ?0 ^( l# G3 t4 `/ {8 p' H4 G
" L: P4 p0 k8 Q+ h    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
# B/ g5 C1 O2 a/ k* ~
* W' }+ ~2 \) G1 ?" X0 |+ N    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。
9 Q. a, g, C" ]# K
; ^: l6 ]8 Y' c  {0 m# ]; w/ Q    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。/ u( x0 H' \' V& l' q( r0 C! V

# E+ w$ m( H& J4 Z    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?" W, t8 U2 q, o: \

9 \) B5 J) w( I- f8 J    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。& m/ I% k* H1 Z0 p$ F7 X

4 X) C* ]& I  ?) F6 b    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。; W* b/ J# Y9 Z4 Q( @

) j+ C9 S, S3 b4 ^2 ]( g8 h    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。; M; t7 J# |) g

' z: j  X  X, w5 W' Q, M    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。
9 V3 S0 P+ H6 ]( Y& O9 l4 R6 i/ H- c; V& }
    PoW的优点! `2 C" b4 q; `
2 @2 S' C! I6 G4 p
    1.架构清晰,有效可靠。3 ~2 y+ C3 }8 f0 S1 q
% l; T' w8 m. J% F
    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。  j- x4 `; i9 D
: u. s- |! u/ S  N' `) M
    3.公平:这种机制类似于多劳多得,干的多,收获也多。
, ^5 H6 f& M) m$ H: P% a+ J( o
* S) X, K9 Q+ Z4 K    PoW的缺点4 K( Q) H8 t3 v: u
* T: V4 r' M) `5 y- S% t
    1.数据冗余:所有数据都要在所有节点备份一遍。( m1 h3 c) Y" t; C7 ]. q( q+ x

  V) P, V8 ^( h) H9 t6 }6 S9 k    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
4 N5 r/ D. a- N$ n5 a$ k$ i
2 c. G. y- x, g# f    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。
7 z; {1 D* o: A8 ]  Q
, k/ y/ S4 P5 {1 ^    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。' D. m8 S8 z3 ^. C& u: r. i1 n' q

" y, J8 H" r8 a8 _- X( Q    2.POS(权益证明)5 W: T$ W2 q6 m6 a  b; p2 ?$ J

# C5 t! p$ x8 Y. Z) C! R3 S    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
. |9 A. b6 v% u3 [9 b! Z7 U4 n9 }- s
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。9 x- M! u/ i3 k; g- f
- J0 h( t2 k; [- U  W4 l
    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。: o3 y7 v, H5 ^" H% a  x3 r
* `2 a: g& ~* u4 R" C' b7 I
    这样的好处:
5 w, y$ C. Y  X1 K* c/ K; X
7 }- E, ]8 p) l. C    1.不需要算题,所以节约能源。; O) q# F+ f' T  Q9 ~% M, C* }
% D% D: z/ `' \+ b
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。" d& i; n5 X1 ^7 \; e
8 I0 A" h6 p3 p8 X
    缺点是:
3 S# [8 i6 N4 N) m
$ T4 g& R, P7 S7 w    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。0 w6 ]1 P9 H$ [$ j  M# x9 o/ B

* W; p8 Z% {4 F! `4 I4 F    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。" U) _% y& h/ O- i* i$ I9 o6 E

# H, ?4 A% R) ~    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。- [( B" R# {+ F( E2 F! K  i
/ L' V, a% e: E. q, ?
    3.DPOS(代表权益证明)3 V4 k$ i0 E% f2 g8 S% ~

& n- O$ D- C: ~) N; q) B# E    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。9 Z4 v7 P( Y1 g  \1 q
! C  g- }* D/ u  p
    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。( `. P; [( e  J0 x; B

6 l$ R1 C& j/ f1 O& w    这样做的好处是:1 p# y; n' c) `7 b
7 ^+ O3 v  b, `' Q  i
    1.不需要耗费能源和硬件。" l2 J( [1 k) `& Y! F! {

# \9 Q2 R3 Z, m% ]/ w1 r, b" ]    2.缩短了区块确认时间(超级节点可以负责),提高了效率。- d9 N; J+ p# s2 h& d3 I
( x, o& @, n3 ~% k$ ~4 T% g
    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。, H3 e) e; }$ J+ X. @# E9 V

  w+ d! ?* b! V( D- n) Z& ~0 ]    但是问题也很明显:  g/ l, P2 w# a; k
9 _: j; N: G8 h. s5 t
    1.这已经不是去中心化,而是完全的中性化了。/ e. Q8 J' i# F- q7 U" q3 c
" `# D3 j" y0 K; A4 S6 F
    2.节点选举过程存在巨大的人为操作空间。
8 I* B1 `# T7 W9 ?1 K/ `2 a* n: e  U7 f4 D/ h% z$ m* x( B0 X
    4.PBFT(实用拜占庭容错)
( M! A; d! a# Z/ y2 w( v! Q  n% F' |5 _
    实用拜占庭将军问题解法(PBFT),这个机制跟前面两种都不一样,也就是说,我不需要矿工,我也不需要挖矿。) A  |0 a# d6 \0 w
. r3 A+ _+ s( x
    我通过周围的人,来判断我记录的账本对不对就行了。也就是说,一个人打完一场比赛以后,我们全部50桌都记录一遍。
2 G& |4 C. W2 P! n. k7 J7 X! O" _$ i  W4 ]1 N
    那么怎么判断我记录的对不对?我问我身边的几桌,譬如我周围有四桌,如果三桌都说结果是王二战胜李四,那么即使第四个桌说王二输给李四了,我也不用担心,我知道肯定结果就是王二战胜李四。
3 S6 `# X  \5 M
- B1 t. r/ L, j+ V7 P9 g    所以听起来很玄乎的拜占庭将军问题,就是这么简单的一回事。如果你周围有四个人,你问他们今天路上堵不堵车。如果三个人说堵车,另外一个人说不堵车。你就可以确认,路上是堵车的,也就是达成一致意见。
9 i0 v. [: Z0 H: Q% d9 K5 B* \; p" t' y. N" }% ~; p: t
    但是注意,达成一致意见,并不意味着意见是正确的。有可能这三个人合起伙来骗你,那么这种情况下,也是达成一致,只不过一致的结论实际上是错误的。拜占庭算法只解决是否能达成一致意见的问题,不考虑意见是否正确。
: z- {6 ?6 |. r8 }$ H/ q1 k# q0 C+ Q* `, q% F1 N9 f$ I* U* I
    具体来说,就是在一个分布式系统中,在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
+ r% ]' H9 L3 h1 K0 b$ |. c& j2 }/ Z, ?' G: r
    PBFT的优点:它不需要矿工,不需要确认,节约能源。, a3 {" ^8 u1 R0 |/ q% G
, a( B, E' N0 g/ e6 j0 M6 |0 V+ M
    但是缺点是:这种模式需要节点之间进行大量可靠的网络通信(就是我不停地要问周围的乒乓球桌,比分是多少,设想一下有50桌、500桌、5000桌的情况,这个通信强度呈指数级增加)。因此,这种方法只适用于一小群节点,譬如联盟链。
7 \) e& R7 X/ z, L, h+ W2 r' Y4 M* G* G  V" w+ r
    总结:按照《经济学人》杂志的说法,区块链是一个信任机器。信任由共识产生,而具体的共识机制包括PoW、PoS、DPoS、PBFT等等。具体选择哪一种方法,与项目和应用有关,不应一概而论。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11