实现并执行共识是加密货币得以存在的核心
万象争辉1
发表于 2022-12-8 08:13:26
142
0
0
这看起来很简单。我们可以将共识理解为普遍的或全局的协议。达成共识就是每个人对某一事物所持的观点一致,而共识的对立面则是争议或分歧。9 k# L9 I8 V4 ~" O- ~
/ X f+ t* [! L; n0 K4 H% ^
###线下共识- G" R2 x; ?, _: T* j
在计算机科学和加密货币领域里,共识是在代表其用户的计算机网络中达成的。在我们深入研究计算机如何达成共识之前,我们来探讨一下现实世界中的共识。
% e7 c- `: x8 `5 z" y+ f, ~* l) U4 A# s
一个有共识的社会能使我们的生活更有效率,所有权就是一个重要的例子。你居住的城市里没有人会对谁拥有“主干道123号”大楼有疑问,为什么?因为我们都遵从负责将所有权记录在案的当地政府。这就是中央集权,一种非常流行的用于维持共识的方式。当存在一个实体负责记录保存时,争议就容易解决了。
在我们的金融和法律体系里到处都能看到这种起共识作用的中央集权机构,例如银行、城市信息登记办公室、中介、支付处理商等等,他们作为一个权威机构,有助于解决纠纷。中央集权机构在发达国家运作良好,但仍存在局限性:一是它必须受到大众认可与信任;二是它容易被操控。这些中介机构也是有经营成本的,所以它们经常选择不处理金额非常少或有风险的交易。
历史局限性
- W: W+ L, r# x' T) Q
就所有权来说,由于对权威机构的过度依赖,导致了共识系统的两大问题:不透明和可篡改。不透明是指权威机构不向公众交代自己内部的事务,迫使公众信任它们。可篡改是指无人可以阻止机构篡改这些历史记录。
2 \+ C6 i$ A( f4 X- ~+ p
这类特权系统无法处理所有交易,而且交易的审计难度大,信任依存度大。这些限制长期阻碍了人们通过互联网来获取资金。
! u+ b- ~+ P) ~0 l5 t/ B7 {8 {; ~
###早期分布式系统0 A( r5 V9 c( V5 T
9 c1 a! w( c& g' z( V4 Z* J3 }
拜占庭容错(BFT)) n$ H* O8 {1 X, ^' i- y
一个强大的共识算法必须能够处理行为不端的参与者,无论是出于恶意还是硬件或软件出现了故障。1982年,LeslieLamport、RobertShostak和MarshallPease正式阐述了这个问题。' e! {+ ~. J) E8 J4 S C
, X8 z( V1 _3 a3 Q, j: X4 a) i
他们发表的论文证明了在给定的通信条件下,至少要有2/3以上的参与者必须是诚实的才能使系统趋于一致。为了更直观地理解这一点,想象一下,如果恰好1/3的参与者是不诚实的,他们可以勾结起来,告诉其中一半诚实的参与者一件事,告诉另一半诚实的参与者另一件事。; Z6 y& F; ^% B. r% }' ^1 x
! A% z4 g/ _2 g
-拜占庭协议失败的简化视图-+ ~3 \' Z% R. O6 o! |2 v
正是这项开创性的工作使得共识问题得到了正视。处理潜在的不诚实参与者的共识也被称为拜占庭协议。达成共识要满足以下条件:
可结束:所有进程确定一个值. Z, n7 G& B: `7 I. ^1 G# e
9 n/ @+ a8 N. I3 |) w
有效性:所有进程能够根据进程的输入值确定一个有效值0 H3 G1 q. B6 n! G
; z0 M3 {& [% H: K( H% N
一致性:所有进程认同相同的值
分布式系统算法分为两大类,同步和异步,取决于通信是否即时发生。在现实世界中,除非所有参与者共处在一个地方,否则通信需要时间来传递信息,这称为异步。但如果通信足够快速和可靠,算法创建者就可以基于信息同步传递的假设来简化他们的设计过程。同步算法的前提是信息能立即传递并且100%可靠。, O% f! S& U3 [" D2 g( T
0 J/ ^, }! ?9 G3 s$ D. O
所有算法都必须平衡安全性和网络活性,这是分布式系统的两个特性。安全性是指所有答案都是一致的,不存在错误的答案。网络活性是指算法会逐步寻找到一个答案,且答案一定能返回。
1985年,研究人员Fischer,Lynch和Paterson表明即使进程中只存在一个错误,异步共识算法都不可能同时保证安全性和活跃度。
1988年,Lamport提出了Paxos,一种开创性的共识算法。后来于1998年作为期刊文章发表。Paxos在安全性方面毫不妥协,且其设计使得安全性很难阻碍网络进程。该算法不能保证一致性,但最终在实践中显示出了一致性。至今仍然有许多系统的算法使用Paxos。谷歌在它的Chubby锁服务中就使用了Paxos。6 e9 L' m' f6 ?3 P) O3 Z
( P" Y7 t2 |; B% h! T) f
###挖矿
到目前为止,参与运行共识算法的各方大部分都是友善的。算法通常建立在对参与者是谁的概要假设之上。过去,数据结构和传播问题是被掩盖起来的,但现在与加密货币的构造密不可分。
工作证明(PoW)
5 [' o2 S3 Q6 T9 D
工作证明标志着共识的新时代。PoW在称为区块的轮次中建立共识。共识参与者被称为矿工或区块生产者。创建一个新的区块需要解决一个计算难度大但易于验证的数学难题。这个数学难题就好比一张不断刷新的彩票,决定了谁有权为账本添上一笔。作为报酬,工作证明系统会奖励产生的每个有效区块。第一次,维护共识是有偿的了。
6 c# Q" E O2 _ v3 @+ }
每个矿工都私自地努力延长区块链来获得区块奖励。博弈论表明,如果大多数矿工是诚实的,最长的区块链会被延长,共识将不断推进,也不需要参与者相互合作或相互信任。PoW不是依靠一直传递信息直到达成共识,而是依赖于不间断地迈向一致性。
在工作证明之前,共识只能在一群已知的参与者之间达成。允许任何人参与进共识系统会使系统容易受到女巫攻击(Sybilattack)。女巫攻击是指个体在网络上创建许多个身份来击溃系统。对开放网络中的共识算法必须采取一些措施防止用户用假身份攻击系统。工作证明是通过要求参与者支付物理资源来解决这个问题的。$ O% g: j3 W# _$ }0 X$ O' B0 [
/ W, f( M& U7 o$ g+ b) E3 n
优点:非常简单和安全。一种既能阻止女巫攻击又能允许公开参与的好方法。* q) K' t0 w; m6 D* s1 @/ Q" `
9 M/ h+ K+ ~( w7 X: Y7 x
缺点:目前,规模经济已导致挖矿中心化。消耗了大量物理资源。
* n; S2 C' e: W+ G3 t7 B
值得注意的例子:比特币,以太坊(目前),莱特币,门罗币,ZCash
###权益证明(PoS)0 f; V" t, V- C0 z& `) Z* C: m
以工作量证明的概念为基础,权益证明旨在更快,更环保,更易于分片(网络子群内的分工)。有别于解决数学难题,为了取得生产区块的权利,区块生产者用他们持有的权益对他们产生的区块进行投票。在PoS中,可以提前安排好进度,提高生成区块的效率。
权益证明系统的两大挑战是“无利害关系”问题和与之相关的远程攻击问题。在PoS的原始版本中,如果矿工看到了一条区块链分叉,他们就会意图在分叉的两条链上都添加他们生产的区块,因为这不仅能对冲他们所下的赌注,而且无论哪条分叉链条成为主链,他们都能获得奖励。与需要消耗能量的PoW不同的是,PoS在所有的区块链上投票没有机会成本,这可能会阻止网络趋于单一的共识。( u1 J2 ?# o x
: h+ F) Z% O6 {) G* s1 C+ J" M
处理无利害关系的策略还是有的。以太坊正在推行一项名为“惩罚条件”的策略,该策略通过惩罚签署两个相互竞争(即不同)的历史版本的矿工来防止恶意链分叉。 y4 c$ [, B" B, g& W
1 ^. y# i' J r
远程攻击则是通过重新组合区块链的重要区块来改变交易历史。即便上述无利害关系激励措施成立,攻击者仍有可能成功篡改很久以前发生的交易。% m- l) O. ~; [: m6 d! T3 x7 V
权益证明的一个明显优势是能够创造真正的确定性。一组节点(即验证者)会保证在此检查点之前历史记录不会被更改。检查点的创建基于有足够多的区块生产者对区块进行担保(即在该链上投入自己的权益)、查询并广播验证者们对区块的意见。当超过法定人数宣布同意区块被最终确定,确认验证者已接受该区块作为最终确定的区块,那么该区块就被最终确定了。: p) m3 M6 F5 B
真正的确定性对于组合分片很重要。重写历史的复杂性和后果将在不同的分片中放大。/ U' ~% u/ s- M0 Q
优点:提供确定性以实现分片可能性,加快区块生成效率。. Q" m- w- _ q% |8 l
缺点:比PoW更复杂。“无利害关系”是个理论上存在的问题。/ p+ d* o* i. T/ C& s
9 k/ Z$ r; I% B Q* L
值得注意的例子:以太坊(未来),Decred(混合PoW与PoS),Dfinity
6 F' l8 i7 ~. E0 d
委托权益证明(dPoS)& x4 q7 Q% _4 {! W5 o* a
委托权益证明(dPoS)是PoS的一种特殊形式。不同之处在于,dPoS中的大多数选举人都希望把自己的责任委托给代理节点。通过限制参与者的数量,网络延迟问题得到解决,也加快了共识的达成。如果代理节点数量非常少,则可能需要用到高级硬件系统。由少数具有顶级设备的区块生产者组成的网络,保证了网络能以更高的吞吐量运行。! v6 c* `7 J. i8 U$ _: }
8 ?1 n* q) P) Q
当吞吐量是主要考虑因素并且可以允许一定程度的中心化时,限制区块生产者或区块验证者的数量并使用dPoS也许就成了可取的方案。
优点:因为延迟不是问题,所以加快了共识;更高的吞吐量。( H# P7 a0 ~! O# }( Z# e* q7 b
- A6 x, Y# H( ^/ c6 e
缺点:去中心化程度减弱。. `/ H: G3 f, R6 v5 v. w
值得注意的例子:EOS,BitShares,Tron
: V/ k) P5 m6 G" [4 E; j
###挖矿的替代方案
( M* A: ~' h7 m0 a) `) n- ^0 S
实用拜占庭容错(pBFT)
X7 I& b6 i9 P
当网络中各方彼此知悉并合作时,可以舍弃PoW或PoS模式,选择使用传统的共识算法。其中一种称为实用拜占庭容错(pBFT)的传统共识算法是原始的拜占庭容错的算法家族的一个分支。1999年,麻省理工学院的两位研究人员提出了pBFT。由于pBFT需要参与者之间大量的通信开销,因此它仅适用于小群体。
0 ]4 G1 C9 i+ I+ b I; R% v
此算法适用于互相熟悉的一组参与者,因为必须互相知道身份才能防止女巫攻击。由于参与者之间互相知道身份,因此pBFT不是开放且无需权限加入的,而是一个基于权限的系统。
6 G0 [7 Q# W6 G4 q
优点:相互熟悉的各方之间的可靠共识。
9 d3 t/ \# h3 U
缺点:仅支持少数参与者;由于用户不得不信任区块验证者,因此不是一个去信任的系统。9 h5 B+ t4 |! J9 g; J
值得注意的例子:Hyperledger,Ripple,Stellar% f! `" N& Q. }4 x1 `
& J) B, ^8 o( r$ i1 d. @3 Z
有向无环图(DAG)
要求所有参与者在一定时间段内达成共识限制了系统的吞吐量。有一种新方法不需要定期进行全局共识。该方法不将交易批量处理到大家都认可的区块上,而是将交易单独添加到历史记录中。
$ J# d' h* r i0 g' Q2 x( g
当添加交易时,区块会引用先前的交易,并且可以确信先前的交易是被接受的。如果足够多的交易能够链接到某个交易上,则网络接受该交易的可能性就会增大。+ m: h' ?: b/ ?: ~: o' @* G
还有其他不同的方法来阻止用户创建相互冲突的历史记录。Iota里的每个交易都包含一个小型PoW来阻止滥发交易。目前尚不清楚这是否能在实践中发挥作用,因此目前所有Iota的交易需要获得“协调员”的盖章,这使得系统高度中心化。
D; F& Z' v- p& r6 d2 O3 A: l+ y
优点:快速“确认”和高吞吐量
缺点:实践效果与不可篡改性未经证实。
值得注意的例子:Iota,Byteball,Nano
/ F" @+ y& o% W4 L4 d! H/ b+ h
###分叉(又名共识失败), m0 x3 ?# L- o0 A4 o' v& O: z" w
2 B6 v) R/ q: ?
若要让计算机网络或区块链达成一致性,人类参与者必须先同意取得共识的方法(即共识机制)。早期研究人员认为达成共识需要满足终止性,有效性和一致性,而关键在于有效性。协议规则只允许某些结果。
7 v8 ?# K7 ?6 z* \0 t. u
实现有效性的规则往往足以应对社会分歧(但也有例外)。如果社区中的两个或多个派系对其网络上的有效内容持有不同意见,就不能指望将网络结合在一起,那么网络就会出现分歧。两个由于社会分歧而引起网络分化的著名案例是EthereumClassic和BitcoinCash的出现。
# f0 V: C- J% L4 {) H7 \
结论* N: c; P4 z, z4 T4 b; U2 T
4 I5 ]6 M4 c8 f& }7 O2 Q& A, D) `
为了用分布式系统创造出一种数字货币,系统必须就谁拥有什么的问题达成一致。全局共识消除了模糊或伪造的可能性。共识机制的选择决定了网络的结构,吞吐量以及系统的可信程度。/ S$ Y- ]. M% O4 ]; I! ^
共识算法就像技术粘合剂,使得系统始终维持原样,保持一致。共识算法的创新有望提高速度,增大吞吐量,减少对环境的影响。但是,开发人员还必须仔细衡量增加复杂性所带来的成本与收益。在分布式系统中,复杂性与稳健性是不一致的,而数字货币之间还要相互竞争网络效应。
成为第一个吐槽的人