Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

技术角度来看 Ethereum 放弃了Pow

haranN
74 0 0
本文解释了比特币PoW(Proof-of-Work,工作量证明)的关键要素,尤其对PoW来说不可或缺的一个特性,同时也表明关于PoW经常谈到的一些其他特性其实是次要作用,比如安全性,这些次要效应有用,但是非必要。
* c+ E/ b4 a* D$ \' C) V7 d
3 Y+ q- R- N3 {; ?' H+ F( c6 h+ f" }    要想理解本文,首先要懂得在区块链中,PoW是如何工作的一些有趣的属性,这些属性并不那么直观,甚至可以说相当反直觉,比如参与者如何在从来没有相互交流的情况下,共同地求解一个问题。. z; d. m9 i- f+ C& J% c

+ K8 v0 u; A8 }6 m5 G* r3 d    当理解了这些属性,你应该能够得出一个结论:PoW的机制主要实现了一个分布式,去中心化的时间系统,即一个时钟。
6 O/ q9 [: p/ k: r; o# B" K9 d  [# W. {6 k8 C3 r
    注意本文并非关注PoW算法本身的细节,而是探究区块链如何“严丝合缝”地将PoW运用其中。如果你还没听过PoW,请先阅读这里。9 B) V2 S! G9 Y7 }2 ]& n) O

7 @4 L/ \& o$ A( h    分布式账本时间排序问题
: G. g; [# H( B0 D# F# T. i, p) p; I5 q7 @& B
    在讲解决方案之前,先来关注问题本身。很多PoW的相关资料都很令人费解,因为它们常常在没有阐明问题的情况下,就试图讲清楚解决方案。6 f) M* k( u/ G. e/ L/ [: \
6 s8 g; P2 W2 ~5 Y8 A# K; G
    毫无疑问,任何账本都需要有序。你不能发费还没有收到的钱,也不能花费已经花出去的钱。区块链交易(或者说包含交易的块)必须有序,无歧义,同时无需可信的第三方。- H& g% [8 S% u8 q$ _6 L- }

& K  p* l6 B' E: y/ l4 x" n    即便区块链不是一个账本,而是就像日志一样的数据,对于所有节点来说,如果要想共同保有一份完全相同的区块链副本,有序也是必不可少的。交易顺序不同,就是不同的两条链。* @1 Q" t8 Q3 b+ q

. v3 K5 g7 N# R! X) W    但是,如果交易是由全世界的匿名参与者生成,也没有中心化机构负责给交易排序,那又如何实现这一点呢?有人会说,交易(或者块)可以包含时间戳,但是这些时间戳又如何可信呢?$ A, U8 z5 o- n. X- O4 K) P

* Z3 ]! }+ a0 h0 M, J) e% S( T) ~    时间是一个人类概念,时间的任何来源,比如一个原子时钟,就是一个“可信第三方”,除此之外,由于网络延迟和相对论效应,时钟的大部分时间都有轻微误差。很遗憾,在一个去中心化系统中,不可能通过时间戳来决定事件的先后顺序。
7 f, G5 O1 R8 F) G" N' P* c* ^9 W0 Z0 {
    我们所关心的“时间”并不是所熟悉的年,月,日这种概念。我们需要的是这样一种机制,它可以用来确认一个事件在另一个事件之前发生,或者可能并发发生。
4 ]( B: Y7 T& w3 v
! `' D, U7 ]  F4 O& R3 M1 @3 D5 f1 ?    首先,为了建立之前与之后的概念,首先必须要建立一个时间点的概念。理论上来说,建立一个点时间的概念似乎并不太可能,因为没有技术能够足够精确地测量普朗克时间。但是你会看到,比特币通过创建属于自己的时间概念变相解决了这个问题,使得确立精确的时间点概念在事实上成为可能。
8 U" _9 c9 Y6 z! o- l& Q' \" k9 a  c+ X% l
    LeslieLamport1978年的论文“分布式系统中的时间,时钟和事件顺序”中对这个问题有了详细描述,但是除了“正确同步的物理时钟”,实际上并没有提供一个详细的解决方案。1982年Lamport同样描述了“拜占庭将军问题”,中本聪在他早期的一封邮件中解释了PoW如何解决了这个问题,比特币白皮书指出“为了在端到端的基础上实现一个分布式的时间戳服务器,我们将会使用一个工作量证明系统”,也表明了它主要解决了时间戳的问题。$ H/ g( K$ _% }& L
" [" G; ~3 q* v/ X
    时间是根本问题' ]7 z2 S. n: r6 ], k! v- |

0 |7 v( P  g) h! K; z8 w    必须要强调的是,在分布式系统中,不可能将事件与时间点关联起来,这是一个尚不可解问题,直到中本聪找到了一个解决方案,才使得分布式账本成为可能。在区块链中还有很多其他的技术细节,但是时间是最基础也是最重要的。没有时间,就没有区块链。3 u' Q! s2 Z6 ]

0 R7 x; s! i* \  W+ J    PoW回顾
$ }; T! b/ `9 s! q& Q( h9 M% ~# o8 F5 |! M) }
    简而言之,比特币的PoW就是SHA-2哈希满足特定的条件的一个解,这个解很难找到。通过要求哈希满足一个特定的数字,就确定了一个难度(difficulty),难度的值越小,满足输入的数字越少,找到解的难度就越大。" _& l# n6 b0 w+ h

0 a& ?6 ~$ I5 X: w" B' f2 Y    这就是所谓的“工作量证明”,因为满足哈希要求的解非常稀少,这意味着找到这样一个解需要很多试错,也就是,“工作(work)”。而工作也就是意味着时间。
. e" s* W( j- J9 K4 p8 u( y! `7 S/ {( m. O
    块间无变化  e% G0 c: `  e& j8 l; O5 c

6 M! q2 i2 X- X* n& G  i    链的状态由块所反映,每个新的块产生一个新的状态。区块链的状态每次向前推动一个块,平均每个块10分钟,是区块链里面最小的时间度量单位。
  O( @6 \, Y7 ]% q6 w) {
7 w( U  v: Z& B! e' m4 a: s/ M7 u    SHA无记忆,无进展
" G$ e1 f8 u" H. m0 k3 _* C7 h* R- A- i9 k' H1 q2 f' j# }4 M
    SHA(SecureHashAlgorithm)在统计学和概率上以无记忆性(memoryless)闻名。对于我们人类而言,无记忆性有点反直觉。所谓无记忆性,就是无论之前发生了什么,都不影响这一次事件发生的概率。
: Z; Z# h9 M$ N. Y5 U1 q6 a
, L+ n! X7 `4 f  T9 v( S: v    关于无记忆性,最好的例子就是抛硬币。如果一个硬币连续10次都是正面,那么下一次是反面的可能性会不会更大呢?我们的直觉是会,但是实际上,无论上一次的结果是什么,每次抛硬币正反面都是一半一半的概率。
: j5 ?* o1 |8 a# O2 V
: X: `  }* o% X- l- v" r    而对于需要无进展(progress-free)的问题,无记忆性又是必要条件。progress-free意味着当矿工试图通过对nonces进行迭代解决难题时,每一次尝试都是一个独立事件,无论之前已经算过了多少次,每次尝试找到答案的概率是固定的。换句话来说,每次尝试,参与者都不会离“答案”越近,或者说有任何进展(progress)。就下一次尝试而言,一个已经算了一年的矿工,与上一秒刚开始算的矿工,算出来的概率是一样的。2 ~6 }0 L5 B  e/ C/ Z- X
& Y& C) H! U- k
    在指定时间内,给定一个难度,找到答案的概率唯一地由所有参与者能够迭代哈希的速度决定。与之前的历史无关,与数据无关,只跟算力有关。
7 h' U7 h% D  X6 j7 n9 d7 [
7 }2 K3 {* `( b. b6 c# B, n' _  [    因此,算力是一个与参与者数量,和那些用来计算哈希设备的速度相关的函数。+ K& M7 k9 b) Y: [7 b- ?0 J( V4 d# M1 v
% X$ K" z4 n9 n3 S
    SHA与输入无关
7 y+ |& Z9 V0 F, x, |% v- m) }6 L! ?. v" [3 ?' @
    在比特币中,输入的是区块头。但是如果给它随机传入一些值,找到一个合适哈希的概率仍然是一样的。无论输入是一个有效的块头,还是/dev/random中随机的一些字节,都要花费平均10分钟来找到一个解。- r/ B0 h* ~% p% K9 G8 s1 `

* {  }) P2 j; o2 M$ e5 F& }    如果你找到了一个合适的哈希,但是输入却不是一个有效的块头,虽然无法将块上链,但是它仍然是一个工作量证明(即使没啥用)。' ~1 P9 b$ F2 z5 m2 g) W) @8 [
7 E& x  V2 z% w% y" d! F  j
    难度属于银河系
/ U- I4 [5 _+ D% }) v( @/ N
% ^0 V( u5 ~" E1 t9 d7 n* S    令人惊奇的是,难度是universe(全宇宙,或者说通用的),也就是说它充满了整个宇宙,无处不在。火星上的矿工也同样能参与挖矿,但是他们不需要感知到地球矿工的存在,也不需要与地球上的矿工有交流,仍然是每10分钟就会解决一个“难题”。(好吧,当他们解出难题时,需要告诉地球上的矿工,否则我们永远也不知道)。+ X2 U4 x- w4 I4 S+ F: w5 n
9 d/ F. m: @* b& Y
    了不起的是,远距离参与者不需要通过真正的相互交流进行沟通,因为他们在共同地求解同一个统计学问题,并且他们甚至互相感知不到对方的存在。
8 Y2 R) p6 x) j7 G* R, K4 ?
/ C4 r% Y3 ^+ r% Y$ _    “通用属性(universalproperty)”一开始看起来很神奇,实际上很容易解释。我用了“通用”一词,因为就这一个词即可表达到位,但是它实际指的是“所有参与者都知道(这个难度)”。
. l# v, ~, ^# p% ^; s) g) J! r, b: Z) L% m( f4 k: x7 @+ O  K$ D
    SHA-256的输入可以是0到2的256方之间的任何一个整数(因为输出是32字节,也就是在0到2^256,任何超过该范围的数将会导致冲突,也就是多余)。即使这个集合已经非常大了(比已知宇宙里所有原子总数都大),不过每个参与者都知道这个集合,并且只能从这个集合里选取一个数。
: r6 X' X. u& B( w  ]
: U" }5 m9 m/ J- J, X* v* Z    如果输入的集合全世界都知道,SHA-256全世界都知道,难度要求也是全世界都知道了,那么找到一个解的概率自然也就是“全世界都知道(universe)”。
+ d% U8 p9 Z* w  k. \8 ]- j! B2 A2 z. d9 ]& j2 g
    计算SHA即参与% N5 E( N( A, g' A8 G- ?% u
/ ^4 l( m4 ?+ c" f& d
    如果所述问题是找到一个合适的哈希,那么要想解出这个问题,只需要去试一次,但是,哪怕就试一次,你就已经影响了整个算力。就这次尝试而言,你就已经成为了一个帮助其他人解决问题的参与者。虽然你不需要告诉其他人你“做了”(除非你找到了答案),其他人也不需要知道,但是想要找到解的这次尝试真真切切地影响到了结果。对于全宇宙而言,也是如此。
/ y+ @/ k' F' z) |+ U) X9 T" [1 e3 m! b/ g+ p4 g7 E
    如果上面这段话看起来仍然不是那么令人信服,一个很好的类比就是寻找大素数问题。找到最大的素数很难,并且一旦找到,它就是“被发现”或者“已知的”。有无数的素数,但是在全宇宙中,每个数只有一个实例。因此无论是谁试图找到最大素数,就是在解同一个问题,而不是这个问题另一个单独的实例。你不需要告诉其他人你已经打算寻找最大素数,你只需要在找到时通知其他人。如果从来没有人寻找最大素数,那么它永远也不会被找到。因此,只要参与(也就是试图找到素数),即使它正在秘密进行,仍会影响结果,只要公布最后的发现(如果找到)。6 c% u3 B1 L5 ?1 u8 r0 v! Z; u

8 G& g' r# P$ e! I$ Z8 |( D! d    这就是中本聪设计的精妙之处,他利用了这个令人难以置信的统计学现象,即任何参与都会影响结果,即使秘密进行,即使尚未成功。
: F! ?0 q9 ]( [/ b% g8 _% l3 s- i. u$ U9 g/ i" k4 q# r& ]& F
    值得注意的是,因为SHA是progress-free,每一次尝试都可以被认为是一个参与者加入其中,然后立即退出。因此可以这么理解,矿工们来了又走,每秒无数次轮回。0 d8 j' ^% x$ o  t% i
+ f. C$ l0 z* ~$ D8 J0 I
    参与度由统计学揭示. C# n& ^: C% t: K6 y* h5 ]  A* U
1 ~! a4 u) {9 F' a9 K
    这个神奇的秘密参与(secretparticipation)属性反过来也成立。很多网站上显示的全球算力,并非是由每个矿工在某个“矿工注册办公室”注册,并定期汇报他们的算力而来。并不存在这种事情。
9 e" O: J3 E2 L' Y8 b
9 y8 D& L; W/ E2 s& S    因为对于在10分钟找到一个指定难度的解,所需算力是已知的,一个人平均必须尝试这么多次(截止成文之时大概10^21)才能找到答案,无论这个人是谁,他在哪儿。) ^& g9 d$ `9 e* U

+ E3 F% y3 I1 L! {& }    我们不知道这些参与者是谁,他们也从来都不会说我正在参与其中,没有找到解的人(实际上他们都是)从来不会告诉其他人他们正在进行计算,他们可能在世界上任何一个地方,但是我们肯定他们必然存在。因为生活还要继续,问题(找到满足条件的哈希)始终还是要被解决。" B3 S9 T' G  t( z; w
, `3 W, _! C. m9 U
    工作(work)是一个时钟(clock), j1 x3 t% @# Z1 D" o. j; {( |
& _5 C3 D  z0 W- W! R, w4 K- W
    关键之处在于:找到满足条件的哈希的难度,就类似于一个时钟的角色。一个宇宙(universe)时钟,因为全宇宙只有一个这样的时钟,不需要同步,任何人都能“看”到这个时钟。' Z+ S; V- {# a8 {% E. M
* P- ?9 V8 m  A- {3 ^
    即使这个时钟不精确也没关系。重要的是,对所有人来说,它都是同一个时钟,链的状态与这个时钟的滴答(tick)无歧义地绑定到一起。; Y: i; ]" g5 l8 R
- d- |/ c3 U0 j# ?9 c$ |8 u( l
    这个时钟由遍布地球上的未知数量的参与者共同操作,参与者相互之间完全独立。; n; o% y8 D5 M: d! T$ E

0 ~: l0 x' _  @5 N: i    谜题的最后一部分
2 u: L4 u  R. C: G  ]
4 m. T6 E2 c; N, o- p. e. m+ n    解决方案必须是块哈希(准确来说,是块头)。上面已经提到,对于SHA来说,输入的内容并不重要,但是如果它是真实的块,那么无论何时找到一个解,它都发生在PoW这个时钟的滴答处。没有早一点,没有晚一点,而是恰好在这个点。我们知道这是毫无歧义的,因为块是整个机制的一部分。
& o$ L. T5 W/ o) f6 K* U0 M+ _* D/ M4 {4 U
    换句话来说,如果块不是SHA256函数的输入,我们仍然有一个分布式时钟,但是我们无法将块绑定到这个时钟的滴答上。将块作为输入就解决了这个问题。& \2 P8 x: Z& |* p

! i2 E# k7 ~8 N+ J    值得注意的是,我们的PoW时钟只提供了滴答。但是我们没办法从滴答中分出顺序,于是就引入了哈希链(hashchain)。
" s; [" Y3 \/ B9 D  |% y# p6 k
$ W9 g; C! g, u" Y' P& \) b    分布式共识* Z# t. @+ R+ S8 z. U
. d+ x1 Q  @2 h2 l! v
    共识(consensus)意味着意见一致(agreement)。所有参与者别无选择,只能同意“时钟已然滴答”。并且每个人都知道滴答和附加的数据。正如中本聪在邮件里面所解释的,这确实解决了拜占庭将军问题,。- ]2 b( y' P2 |! ~2 e6 G
2 o+ i3 X- f0 @) c$ V3 F; ?( f
    在一个罕见却又常见的情况下,会出现共识分离,有两个连续的滴答与一个块有关联,这就发生了冲突。通过哪个块与下一个滴答相关联解决了这个冲突,同时将有争议的块变为“孤儿块(orphan)”。链如何继续是个概率问题(amatterofchance),这也可能间接地归因于PoW的时钟。% l6 v; d' n7 u" z( Z5 S
6 L2 E. Z. e% i4 J" T8 ^
    就这样; }4 i9 q% }$ n& j2 e! B6 ^. X
2 a: j4 t. C+ |! i" i3 ]  Y
    这就是区块链的PoW(工作量证明)。它并不是一个为了让矿工赢得出块权的“乐透”,也不是为了将实际能源转换成一个有价值的概念,这些都偏离了本质。
6 g$ w: W% ^3 A. W* \  G0 q# t% i7 c- \3 K' k* \, m4 K
    比如矿工奖励的角度来看,虽然这些奖励激励了矿工参与,但是这并不是区块链诞生的必要因素。块哈希形成一条链,但是这与工作量并没什么关系,它是从密码学上强制保证了块的顺序。哈希链使得前一个滴答“更确定”,“更加不可抵赖”,或者简单来说,更安全。- b3 e1 y# R9 p8 X3 B! M# K7 y
1 }3 i% m7 m& {9 _
    PoW也能使块不可更改,这是一种好的副作用,也使得隔离见证(SegregatedWitness)成为可能,但是隔离见证也能通过保留签名(见证,witness)实现,所以这也是次要的。; h, N0 L3 Z: _; n

: T: A9 g# i/ w" U4 a0 `    结论; u, R' T) _0 a- S# c1 j7 G" ^

. _) J+ {. ?& @7 r+ d$ F$ h    比特被的PoW只是一个分布式,去中心化的时钟。
0 T8 A/ B/ z/ p; T8 v; _1 I0 P3 _( O
    如果你理解了这个解释,那么你应该能够更好地理解PoW与PoS的异同。显然,两者不具有可比性:PoS是有关于(随机分布的)权力(authority),而PoW是一个时钟。+ W0 f& d* i+ N& n$ Q
; ~0 ^; Y; [# b. T/ |
    在区块链的背景下,PoW这个名字可能是个误用,起的并不太好。这个词来源于Hashcash项目,它确实用于证实工作(work)。在区块链中,它主要关于可验证的花费时间。当一个人发现满足难度的哈希时,我们知道它必然会花费一些时间。实现时间延迟的方法就是“工作”,而哈希就是这段时间的证明。1 }9 y0 ~" e. Q& G: T3 O

/ s6 Q2 r9 D' x" h( @# e, D    PoW是关于time而非work的事实也表明,可能存在一些其他的统计学问题,这些问题同样消耗时间,但却需要更少的能源。这也可能意味着比特币算力有些“过分”,因为我们在上面所描述的比特币时钟,在只有部分算力的情况下,也是可信的,这是这种激励结构推动了能源消耗。
/ B1 u1 V# A9 ^
6 j; V' X* _- V6 S4 o$ Q    如果你找到了一个方法能够同步滴答,并且需要更少的工作,这是一个价值万亿美元的问题,请一定要告诉我!
- t: Q4 A7 t, B
( D  u& E( t6 a  M    P.S.特别感谢UChicagoStatistics的SashaTrubetskoy对上述文字的review和建议。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

haranN 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    26