Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

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

枪手本色戮
118 0 0
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题,也是保障区块链系统不断运行下去的关键。本期嘉宾崔伟将用一个简单的例子,深入剖析“共识机制”。& s$ ?3 |: R0 g8 x1 N4 r# I
* \2 t2 A4 |3 X9 u1 [* d- h7 O1 [
    主要内容:
( ]: F) h4 i; ^2 O' q4 ^- A: Z0 f
/ d9 z6 v" U% Z" H9 X% s- ~4 E    1.区块链为什么需要共识机制;& p* X0 O) f1 i
+ M0 ^0 Y6 u3 O6 c. s3 }$ b. b
    2.共识机制的工作原理和重要性;
7 W( w4 a7 N, v" o! Y9 Q
, y2 V! ^" }) z- ]2 F1 a7 q    3.共识机制的基本要求和不可能三角;
) [$ p" x7 p* c( m* p7 U2 {0 U, t3 C: a# l8 h1 D
    4.共识机制的种类;
2 z+ ^. T: V, l* m0 X# w* R* F" l! c
    主讲嘉宾
- i5 K. i% u# J# r& U" B) v
& @/ M3 N7 Q+ G( O+ ^: Q    讲座内容+ m6 b7 p& r: ^1 k+ D: f: u9 i
% N$ ]% p5 R7 u" b3 n0 [2 o( Z
    一、区块链为什么需要共识机制0 k3 |6 z. z7 o5 R" ~: b
1 `# A  k0 W  K1 D3 ^* ?' @
    由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性。
/ S6 `. J) f% }& B5 z5 F9 b0 J1 d6 p: S$ c$ c
    1.什么是共识机制
. `/ {$ w, ~; D2 z' R  I
5 I# j) K, Y3 M    统一区块链的版本,并奖励提供资源、维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励,又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
5 C% E+ U+ x$ d7 Q+ a$ }9 f" |, p5 s/ r
    简单来说,我们要一种机制来选择哪个矿工来把交易写入区块链。比如今天听课的同学有100人,我们分成50组打乒乓球,那么我们有50组比分要记录。4 I0 v& K& c$ V6 G/ I+ x& {1 u
5 O2 v' \- \. G# R  {" w7 K+ Z
    2.分布式记账及“挖矿”$ o9 N9 z! o  w
0 j8 k2 |$ O1 {1 `2 @8 q+ B
    传统的中心式记账,意味着我们需要一个组委会来记录比分。这样就可能会出现徇私舞弊的情况,所以需要我们采用去中心化的方法。这意味着,这50桌每组都要记录比分。不光自己的,还要记录别人的。这就是分布式或者说去中心化的记账方法。
9 W9 a. J6 c6 ^) v; a6 t( U1 F  n. A- v! Z/ o6 V
    但是,这样做效率太低。大家必须要花大量的时间做这件事情。所以区块链的设计是,我们找一些矿工来记录比分。对于这些矿工,我们会给予奖励,从而鼓励他们为大家记录比分,记录完了以后再给每一桌复制一份。
* B$ F1 D3 k8 d$ T
* M6 \0 l7 ^' n% Z3 _# f    这个奖励,在比特币系统里面就是比特币的由来。交易本身并不产生新的货币,矿工记录比分才生成货币,也就是说,代币的目的是为了奖励付出努力的人,这就是”挖矿“的原理。. `3 D6 i- [* c& U5 y8 S
2 `+ }: K& f% b+ `# P8 {& q+ k  E, s
    既然有奖励,那么现在问题来了。譬如比特币,每次记账(10分钟)可以产生12.5个比特币(现在,过去是50个),按照今天的价格,就是50万人民币。那么肯定有很多矿工都抢着给大家计分,来获取这个报酬。
# ?' i! _2 q* {2 V& `; [# W% y0 a) [4 d8 c+ ^% K
    那么应该怎么选择一个矿工出来?这就需要用到“共识机制",也就是说,大家都根据某种规则,同意让我们今天的某一位同学来记录大家的比分,记录完毕的奖励都给他。- f7 M* K" F" I, e+ u
1 G9 N5 b7 {: Q+ R% V2 S$ Y
    当然,例子比较简单,不过本质上就是这回事。这个乒乓球比赛,就可以理解为一笔交易。比分,就是记账。记录比分的人,就是矿工。奖励的钱,就是比特币或者代币。! Q% f& X$ n/ b3 m

9 Q+ A5 i) M/ r/ v+ a5 ^- ~    二、共识机制的工作原理和重要性
6 A8 }1 x. s; N0 z9 E2 E' }* H5 \0 a  b6 e
    首先,交易发起方构造交易,加上数字签名,广播到区块链P2P网络之中。然后,区块链网络中的“矿工"节点陆续收到这笔交易。然后,所有矿工都会把交易打包到自己构建的备选区块之中,然后将自己的备选区块广播。/ [: c% {: [; n' ?7 [. I

- ~  g& w  V  o9 A. u5 G2 F    这时候,全网根据”共识机制“来决定哪个矿工负责写入这个区块。然后这个矿工将会负责把这个区块添加到区块链上,完成该区块中的所有交易。最后交易完成,交易参与方可以查询到交易执行结果。) |9 h1 Z. ^5 F! w& U

% k& d3 s/ n/ S3 U4 f: @0 j    那么,"共识机制"是从什么时候出现的?
6 t7 ]# h2 a$ n" \$ u+ h% @; i
- y/ o. r4 B- J0 ]) v1 J    1982年,Lamport首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。7 j* s% j$ ?: P$ H9 L* o, r
( H2 m: [3 I$ M9 k) @% w
    1999年,Jakobsson发表了关于PoW的论文。  O6 `/ h% m& {( S& w5 Z  j
; w7 ^" d' \7 m! v7 d
    2008年11月,中本聪发表了比特币的论文,并用了PoW作为共识机制。
" Z& j# M% n* c# @6 t1 R' {' O# T7 D+ ?5 L! S  \7 s  L/ y
    2012年,PeerCoin项目开始采用PoS作为共识机制。5 H0 o# D& Q( H& s1 k  ~

* Z. J3 _8 Z( m  t) `5 m    2016年,Tendermint项目开始采用PBFT作为公示机制。
. L, V% k. L. r( z3 K: P
) k8 k7 v* W+ N$ a! r    2018年,以太坊项目提出在2.0版本中,通过Casper方法采用PoS作为共识机制。实际上,V神今天正在欧洲介绍这方面的最新进展。
0 J1 P# Q/ `5 v5 S" n
! m5 V& U% D1 C: E) Q    三、共识机制的基本要求和不可能三角3 T8 _+ z9 w! _% _3 y5 [

0 Q/ H, I# p) l, z# G    这里需要提的是,任何分布式系统(包括比特币甚至货币),都存在一个不可能三角形:性能、可扩展性和去中心化。  n0 X8 A- H! y( N

2 w4 Y% f% S" m* B    譬如人民币,性能和可扩展性很高(每天无数人用它来交易),但是去中心化低(央行想印多少就印多少)。对于比特币,去中心化程度高,可扩展性也高,但是性能低。2 y- {1 l' w5 {1 u% E. E  `: D
  C. m2 S% `: a7 C
    所以在设计、选择共识机制时候,我们必须记住这三点:我们应该优化哪一方面,牺牲哪一方面,因为你不可能同时达到这三点。另外,所有的共识算法必须具备三个基本要求:1 S+ N% F9 b5 q1 G+ q# _
5 c; O, a4 ~0 u& a/ {
    1.一致性(safety):所有参与共识的诚实的节点,得到的计算结果是相同的,而且是符合共识协议的。
& |1 ?5 c) `! ?2 W0 x3 \2 X
8 ^6 a( v6 {: j/ q& k' J    2.终局性(liveness):所有参与共识的诚实的节点,最终可以达成一致性结果。
- r* z( `$ \8 A8 I6 P$ s7 ^& H. V. B8 F" X
    3.容错性(faulttolerance):在共识算法的成功执行过程中,可以容许参与共识的节点发生一些错误。
9 L  d# ^  R9 p0 Y4 ~. }
: y0 {; G8 K/ ^+ ~8 X1 E, @    四、共识机制的种类  a' P$ Z5 n: k9 U" X4 a& \9 o* a
2 e& ]6 W8 Y/ Q8 P  _! ~% y" u: S
    1.POW(工作量证明)
5 K" }8 G3 c- ]6 I( c7 q
5 _5 s  O4 `7 L# t9 U; }: R! ^    如上所述,为了鼓励人们主动记账,中本聪决定给记账的人发奖励,这就是“比特币”的由来。而记账的人就是“矿工”。
% u8 p- \/ u2 S/ s# L) }  l4 S# L0 O6 |- d* h& ~* P: I
    由于不同的“矿工”都希望获得记账权,为了给每个区块选择一个全网认可的“矿工”,就需要“矿工”给出一个证明,就是所谓“工作量证明”,选出的矿工可以获得12.5个比特币作为奖励。
  `( [" R8 o: F0 R+ q+ u8 Q6 e  `
( g. v8 E6 b7 D" w* }" n* V    奖励以每四年减一半的速度递减,矿工的收益的另一部分来自于每笔交易产生的手续费,到2140年无币可奖励的时候,矿工的奖励将全部来自于交易的手续费。
9 X8 Z4 n0 a, c9 ?! Y# `
3 X$ c' L8 V* s    现在关键来了,工作量证明是什么意思?
9 Z0 M" E3 p( X# S& l# I) e
% A) ]9 d) h  V2 b* y! D    还是以乒乓球比赛为例。如果有一个人来计分,我们会希望他们不能太慢,但是也不能太快。太慢的话,会积累很多比分要记录,最后大家都要等他们。太快的话,会干扰我们的正常比赛。大家比赛中间要停下来,跟他们谈话,这个效率很低。7 f( T: G" X- S8 t! o# |

+ j8 Y- F% X6 |" N2 r- Y0 k4 e    为了保证节点之间的同步,新区块的添加速度不能太快。区块链的发明者中本聪故意让添加新区块变得很困难。只有通过极其大量的计算,才能找到一个随机值,使得区块的哈希值符合一定的条件。这个过程就叫做挖矿(Mining)。
% G! |" O7 }! S7 `5 l) B0 e2 D0 r' J( a4 U
    “矿工”的工作其实就是猜出这个随机项的值,使得区块的哈希值可以小于目标值,从而能够写入区块链。这个随机项的值,必须通过穷举计算来获得,也就是说,所有的矿工(计算机)必须反复不停地尝试从0开始的所有整数,直到他们找到这个随机值(nounce)。找到了,他们就发财了。5 f- j/ D+ t* W' U5 ^7 x" M

4 i3 Y) I: ^; R) D7 O    举个简单的比喻,“挖矿”的过程其实类似于打麻将,四方最后有一方凑出了胡牌的牌型,就当与生成了一个达到要求的区块哈希值,胡牌的人就成了“矿工”,得到相应的奖赏(比特币)。胡完一牌,就是一个区块生成,所以当前交易记录在内。
- R5 V( b  t; j+ c9 M' k1 |, {/ g9 A4 x
    然后大家接着下一局,继续凑胡牌牌型。如果一局没有人胡牌,也就是大家花了时间,但是没有生成区块,就重新开局。如果投入的时间/资源,小于获得的奖赏,这个矿工就亏了。但是,如果有人摸了两把就胡牌了,相当于很快就找到了这个哈希值,这个矿工就大赚了。
. f) Q/ r! B" _3 g) K* m1 M- |* I7 Z3 H
    这样,全世界成千上万台“矿机”们,都在不眠不休地计算中本聪出的这道数学题,为获得奖励的比特币而“废寝忘食”,这就是工作量证明的原理。8 }; ~- l# R* I( k4 o

* d$ j9 a% r7 G$ S    具体来说,工作量证明(PoW)或者说挖矿算法,目的就是寻找一个特殊的数字(nounce),使得哈希值(即SHA256函数)的输出字符串的前n位是零。
% e# Y. x3 h8 S9 H5 `, i, G2 G$ Q4 ], l" y( |% F
    所以,通过POW,我们可以找到一个矿工。但是网络上有那么多的节点,怎么确保所有节点都使用同一个区块链呢?3 E' H4 J" U$ {( `! i4 ?/ e) R
0 N+ O; M" u/ F; z0 z
    中本聪为此提出了著名的一致性判别方法:如果一个节点的区块链与另外一个节点的不同,这就意味着冲突。解决这个问题的办法就是,“最长的有效的链”应当获得认可。换句话说,网络上最长的链就是事实上的标准链。, j, |4 `, v( I& W5 A0 I
4 R% K, N; p7 {( Y
    利用这种算法,我们可以在我们网络中的所有节点中达成共识。PoW的本质,是选择计算量最大的链条最为主链条。这样,即使有人恶意破坏,也要付出大量的经济成本,达到不可承受的程度。+ [5 P$ c+ u$ c7 }$ w; U
) c9 h7 x7 P2 ^, s. ~2 X
    举个例子,如果你去一个医院柜台排队,有好几条队,你应该选择哪一条?按照中本聪的规则,你应该派最长的那条队,因为里面的人排得最久,所以最不容易被保安驱散。
* ]2 @1 [1 W9 v) p$ {9 T* y& m0 L# h( s* }# u& ]
    也就是说,这套机制会找出最长的一条队伍是合法的,奖励其中排得久的人,并让不合法的分叉队伍重新排队。只要大部分人不傻,就会自觉在最长的队伍上排队。# ?8 `/ e/ p$ K% n6 O# m

# j, ^" d3 D* W( c7 d3 G! C8 d    PoW的优点
+ a8 R7 Q" R: \3 b) f9 U5 y0 o3 {5 Y7 K" Y4 @0 L; g
    1.架构清晰,有效可靠。
0 n" o+ |2 l) r+ e
3 E- v6 Q# Q7 \" ]( K2 m  |6 |2 l    2.要获得多数节点的认可,攻击者必须投入超过51%的计算量,才能保证篡改结果。0 }9 H2 X+ h( t+ D

9 S. F9 W# W( ]: f+ D    3.公平:这种机制类似于多劳多得,干的多,收获也多。
( a8 }8 [4 j5 Z' N7 g
) _1 o$ k3 K: h    PoW的缺点* R9 z# d( ~1 }3 l4 P9 W" \) Z* j

% L* a; f7 v& O/ `/ J    1.数据冗余:所有数据都要在所有节点备份一遍。
7 d5 X8 {( i" w& }: V5 t7 g8 M
1 v+ g! w& A+ m. |3 Q/ O- h    2.消耗能源:现在挖矿占到了全球0.13%的电力消耗。挖掘一枚比特币,相当于一辆汽车驾驶20万公里的碳排放量。
8 W' D1 W# g- V3 |) X+ S% _$ [; H5 V, r1 y6 J% `" a
    3.信息网络延迟:区块链,每10分钟才能生成一个区块,完成其中的交易,以太坊略有提高,每秒交易在几百笔以内,相比之下,阿里巴巴双11的交易速度是31.5万笔/秒。0 {! M. M, j- r# Q! ]- ]

7 `1 K) L1 g1 Z) v$ J3 U: U2 E    4.算力垄断:有些拥有大量算力的公司,譬如比特大陆,实际上已经拥有了某些公链或者dApp超过51%的算力,可以篡改结果,这样就与加密货币或者中本聪的去中心化背道而驰。
7 B$ q2 t* v0 m. |$ o' r) b% W% _9 L
7 `! l9 e2 {& x/ S    2.POS(权益证明)# u( N- A  F, j0 l
( G! O: m. w% w  u2 G
    PoS即权益证明,最早由SunnyKing于2012年创立的PPC(点点币)采用,它可以解决上面提到的浪费算力的问题。
3 K3 {$ ~- R/ S  H/ V8 v( }& A/ N/ R" K& ^
    简单来说,它选举矿工的规则是:谁有钱谁更有可能获得挖矿权。也就是说,挖矿成功的概率与矿工持有的代币数量成正比。
" o& L- q2 U4 x; f1 d+ z6 _
8 J$ ~8 G$ G+ s. V5 b    回到乒乓球比赛的例子,也就是谁比分最高,让谁来记,这样鼓励积极比赛的人。
5 [# \! r  u  g8 o8 p
7 Z/ c7 y/ ~$ }" o7 N" m! y, q    这样的好处:% s3 h: J0 K" O% R4 [
  W0 ?9 j  U9 m" [! f- ~
    1.不需要算题,所以节约能源。
, _6 T$ q- V1 O" P8 }, ~* t1 W, |! F3 [
    2.攻击者需要更高的成本,因为他需要购买大量的代币才能获得51%的篡改权。
3 B0 E( C4 P4 r) S/ g+ ?* i8 y9 h. R$ `1 }2 X+ t
    缺点是:* O' L. Y+ b7 {' Y

+ P6 w! i5 U2 V8 i    1.因为持有量越多的人获得的奖励越多,变成了资源垄断,富者越富,穷者越穷。) v! Q: }6 h( M' [0 Y/ o# h7 w
1 F8 y- e- T! D$ k/ C) _7 h
    2.因为挖矿权跟持有的货币成正比,所以就类似于利息高的情况下,大家就不愿意花钱,而把钱都存银行一样,这样会变成所谓的”屯币“,降低代币的流通性。* }$ |: T3 u+ s6 I2 E

& h* m; }7 a, O: Z7 \, j- }7 j    采用PoS机制的项目目前来说,主要是以太坊2.0(将要推出)、PIVX和NAVCOIN这几个项目。
8 P5 c9 E# J5 t0 F1 x0 i, X! c  @( }" I
    3.DPOS(代表权益证明)
  e6 y% c9 H0 W% C
7 [' j9 G/ v  c( ^/ z( J8 u, D  f* Q1 ?    DPOS(DELEGATEDPOS)是POW的一个分类,就是代表制POS。也就是说,我的钱少但是我也要获得挖矿权,怎么办,我委托一个代表来做这个事。. _3 S2 E. \) L$ g# ?

0 A1 E9 H3 J: \3 m4 j* _    以EOS为例,它在全球选出了21个超级节点,所有用户可以投票决定这些节点,也可以投票废弃、更换这些节点。
" ?& ^- Q6 |9 c1 B4 L
+ P* g  N0 `! ?( f) b" W    这样做的好处是:
; T. x4 m/ X& h* S' y" K
1 W9 m8 `5 [6 {: E+ ~) x. |    1.不需要耗费能源和硬件。+ s% N& C4 F# S2 _. T$ q( k; ]8 c

% D2 W/ K  z4 n6 [$ ?) F1 N* X. [    2.缩短了区块确认时间(超级节点可以负责),提高了效率。, m/ s% t2 A+ n5 y# I

/ y* y: t" e! \0 b4 q6 ^+ A1 e    3.不需要挖矿,也不需要完全验证,只需要部分见证节点验证,简单、高效。# I* |' w( v* {+ r+ W. W8 x

$ m. @1 |- K1 h! G    但是问题也很明显:5 R5 Z7 v% v6 B6 g$ Y0 n/ i

' h3 o6 Q) C3 W    1.这已经不是去中心化,而是完全的中性化了。
$ z6 ~' R. n0 V! n+ o; o2 `7 N; Z$ w) ?0 A) J( K
    2.节点选举过程存在巨大的人为操作空间。
( x4 J! E' H3 ?) x8 }0 \. \: Y
2 s1 [/ x( x3 @' |0 [7 \1 z) I- k    4.PBFT(实用拜占庭容错)" x8 H4 t+ w) m3 W* L8 q' Z

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

本版积分规则

成为第一个吐槽的人

枪手本色戮 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11