Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

PoW有趣的属性 本质是去中心化的时钟

haranN
104 0 0
PoW是如何工作的一些有趣的属性,这些属性并不那么直观,甚至可以说相当反直觉,比如参与者如何在从来没有相互交流的情况下,共同地求解一个问题。7 k  Q/ [) A  u0 r
( k( u% ~7 U$ d9 z! e  d+ C2 f7 z$ j
    当理解了这些属性,你应该能够得出一个结论:PoW的机制主要实现了一个分布式,去中心化的时间系统,即一个时钟。* J9 H3 L- l# E& F- o: D

  S. e/ [6 G) g0 n% n) T    注意本文并非关注PoW算法本身的细节,而是探究区块链如何“严丝合缝”地将PoW运用其中。如果你还没听过PoW,请先阅读这里。
4 R, h+ t2 C: S. t' O" c
3 A! @& K% V* U4 i' v/ W; c    分布式账本时间排序问题
( {$ S5 R1 M5 A2 k0 F+ j: t9 E. a, @2 G, ]! y: @
    在讲解决方案之前,先来关注问题本身。很多PoW的相关资料都很令人费解,因为它们常常在没有阐明问题的情况下,就试图讲清楚解决方案。. M# b; w+ Y' d' q

0 d, [6 V7 w. C( f  K8 m7 \/ N' ?* f    毫无疑问,任何账本都需要有序。你不能发费还没有收到的钱,也不能花费已经花出去的钱。区块链交易(或者说包含交易的块)必须有序,无歧义,同时无需可信的第三方。
0 J! S$ q2 w1 B0 y6 }/ k; d" F7 i# h: _
    即便区块链不是一个账本,而是就像日志一样的数据,对于所有节点来说,如果要想共同保有一份完全相同的区块链副本,有序也是必不可少的。交易顺序不同,就是不同的两条链。7 |3 T% ^! C2 O: I7 d

8 Z4 `' O7 @9 t8 q; t. R    但是,如果交易是由全世界的匿名参与者生成,也没有中心化机构负责给交易排序,那又如何实现这一点呢?有人会说,交易(或者块)可以包含时间戳,但是这些时间戳又如何可信呢?
# y& X- f9 d: x4 j* ~0 i2 H% k6 j7 r5 Q8 d- U
    时间是一个人类概念,时间的任何来源,比如一个原子时钟,就是一个“可信第三方”,除此之外,由于网络延迟和相对论效应,时钟的大部分时间都有轻微误差。很遗憾,在一个去中心化系统中,不可能通过时间戳来决定事件的先后顺序。0 c7 v) m0 U  A# W8 D, U' X
1 U& N. J9 w$ X; M& T
    我们所关心的“时间”并不是所熟悉的年,月,日这种概念。我们需要的是这样一种机制,它可以用来确认一个事件在另一个事件之前发生,或者可能并发发生。
: Z: O1 a1 ?# X$ u1 F" L6 ?0 q4 I+ Z1 Z2 g( G  h
    首先,为了建立之前与之后的概念,首先必须要建立一个时间点的概念。理论上来说,建立一个点时间的概念似乎并不太可能,因为没有技术能够足够精确地测量普朗克时间。但是你会看到,比特币通过创建属于自己的时间概念变相解决了这个问题,使得确立精确的时间点概念在事实上成为可能。
9 b7 _# Z! d3 q6 \
4 b% S; R3 Q! K$ S+ Z) F4 |    LeslieLamport1978年的论文“分布式系统中的时间,时钟和事件顺序”中对这个问题有了详细描述,但是除了“正确同步的物理时钟”,实际上并没有提供一个详细的解决方案。1982年Lamport同样描述了“拜占庭将军问题”,中本聪在他早期的一封邮件中解释了PoW如何解决了这个问题,比特币白皮书指出“为了在端到端的基础上实现一个分布式的时间戳服务器,我们将会使用一个工作量证明系统”,也表明了它主要解决了时间戳的问题。4 D$ t% ]' i1 N' ^7 o

' O0 Z$ M7 {. q: ?+ J    时间是根本问题9 [" Y2 n7 U1 k+ y

1 L) T/ s8 F: l) f. N& \    必须要强调的是,在分布式系统中,不可能将事件与时间点关联起来,这是一个尚不可解问题,直到中本聪找到了一个解决方案,才使得分布式账本成为可能。在区块链中还有很多其他的技术细节,但是时间是最基础也是最重要的。没有时间,就没有区块链。
3 h0 \, W6 |. }+ n, j0 |5 w% ^* n
    PoW回顾6 y5 p& R2 f1 L- o& d: F; ~! M

8 Q$ _( [. K" t& |    简而言之,比特币的PoW就是SHA-2哈希满足特定的条件的一个解,这个解很难找到。通过要求哈希满足一个特定的数字,就确定了一个难度(difficulty),难度的值越小,满足输入的数字越少,找到解的难度就越大。
1 x5 ?% W$ W" l. R! D# _+ N& I5 y$ V* m) y8 z: n5 N) i7 S5 @
    这就是所谓的“工作量证明”,因为满足哈希要求的解非常稀少,这意味着找到这样一个解需要很多试错,也就是,“工作(work)”。而工作也就是意味着时间。
- ]: T0 i- Z9 g$ d/ P  G& G8 c$ S( _5 W4 s1 c( k% i" \/ T" ]
    块间无变化
, T" v- l4 N5 N' v  H
: }; A& E9 L3 x7 A' u$ p    链的状态由块所反映,每个新的块产生一个新的状态。区块链的状态每次向前推动一个块,平均每个块10分钟,是区块链里面最小的时间度量单位。: ~/ q* ~$ E# e

- s8 c3 C/ t0 Z! M: g% b    SHA无记忆,无进展$ k- Z1 E8 H9 ^% V
/ I0 R2 m% w- Y
    SHA(SecureHashAlgorithm)在统计学和概率上以无记忆性(memoryless)闻名。对于我们人类而言,无记忆性有点反直觉。所谓无记忆性,就是无论之前发生了什么,都不影响这一次事件发生的概率。
' d( h+ i9 R3 s3 ?% k& l/ J, N8 l7 R2 k' h& u/ s# Z1 [# \
    关于无记忆性,最好的例子就是抛硬币。如果一个硬币连续10次都是正面,那么下一次是反面的可能性会不会更大呢?我们的直觉是会,但是实际上,无论上一次的结果是什么,每次抛硬币正反面都是一半一半的概率。
$ f- |' C* X2 X, ]& z
2 _" G6 W; D; j    而对于需要无进展(progress-free)的问题,无记忆性又是必要条件。progress-free意味着当矿工试图通过对nonces进行迭代解决难题时,每一次尝试都是一个独立事件,无论之前已经算过了多少次,每次尝试找到答案的概率是固定的。换句话来说,每次尝试,参与者都不会离“答案”越近,或者说有任何进展(progress)。就下一次尝试而言,一个已经算了一年的矿工,与上一秒刚开始算的矿工,算出来的概率是一样的。
4 P: A4 u2 I! P  Z
, n) S  D7 d( ^+ }4 A, k( J    在指定时间内,给定一个难度,找到答案的概率唯一地由所有参与者能够迭代哈希的速度决定。与之前的历史无关,与数据无关,只跟算力有关。+ B6 W! T& J5 u+ ^; x
6 C% B. G, ^- U' D3 F6 W5 Y4 c
    因此,算力是一个与参与者数量,和那些用来计算哈希设备的速度相关的函数。  ~7 {- Q5 h4 Z8 V% e9 _

( O* K' `8 v0 h- W5 }    SHA与输入无关% R$ l% L; k  H

; R% c$ l1 L* U    在比特币中,输入的是区块头。但是如果给它随机传入一些值,找到一个合适哈希的概率仍然是一样的。无论输入是一个有效的块头,还是/dev/random中随机的一些字节,都要花费平均10分钟来找到一个解。" S  {1 P+ a  \
! u% U7 k# Q$ W2 h8 H% X4 ?
    如果你找到了一个合适的哈希,但是输入却不是一个有效的块头,虽然无法将块上链,但是它仍然是一个工作量证明(即使没啥用)。2 h! `; K8 {$ Q7 H% N
1 Y. V' |* I, q* I. w
    难度属于银河系; t1 N2 P- V* h, e; Q8 s

$ ]: M+ P  b7 V: `    令人惊奇的是,难度是universe(全宇宙,或者说通用的),也就是说它充满了整个宇宙,无处不在。火星上的矿工也同样能参与挖矿,但是他们不需要感知到地球矿工的存在,也不需要与地球上的矿工有交流,仍然是每10分钟就会解决一个“难题”。(好吧,当他们解出难题时,需要告诉地球上的矿工,否则我们永远也不知道)。
6 C! h4 W- n# W3 B% u
2 Z& d; `+ r, m: F+ o    了不起的是,远距离参与者不需要通过真正的相互交流进行沟通,因为他们在共同地求解同一个统计学问题,并且他们甚至互相感知不到对方的存在。
! r- {  i" |7 V8 a' R* y& i
+ r% `+ Q! X3 a    “通用属性(universalproperty)”一开始看起来很神奇,实际上很容易解释。我用了“通用”一词,因为就这一个词即可表达到位,但是它实际指的是“所有参与者都知道(这个难度)”。
8 z3 v: ]( g/ g2 \1 |
) m+ a1 B1 W% S1 b7 p  l, z( `! h. R    SHA-256的输入可以是0到2的256方之间的任何一个整数(因为输出是32字节,也就是在0到2^256,任何超过该范围的数将会导致冲突,也就是多余)。即使这个集合已经非常大了(比已知宇宙里所有原子总数都大),不过每个参与者都知道这个集合,并且只能从这个集合里选取一个数。' [6 L* z$ c8 L  _8 a  O
" ?* ?1 j6 D4 I
    如果输入的集合全世界都知道,SHA-256全世界都知道,难度要求也是全世界都知道了,那么找到一个解的概率自然也就是“全世界都知道(universe)”。4 Y. I1 E# A2 p8 m) B$ G+ E
4 x9 V; t/ n5 u; m
    计算SHA即参与7 v+ r+ V, U' Y" Q- r! c" m

, e2 E- E  B3 Q2 Q( s+ ?    如果所述问题是找到一个合适的哈希,那么要想解出这个问题,只需要去试一次,但是,哪怕就试一次,你就已经影响了整个算力。就这次尝试而言,你就已经成为了一个帮助其他人解决问题的参与者。虽然你不需要告诉其他人你“做了”(除非你找到了答案),其他人也不需要知道,但是想要找到解的这次尝试真真切切地影响到了结果。对于全宇宙而言,也是如此。
* r* ~7 }' M3 _
  ~% p3 P, o/ ?6 K% h' o2 X    如果上面这段话看起来仍然不是那么令人信服,一个很好的类比就是寻找大素数问题。找到最大的素数很难,并且一旦找到,它就是“被发现”或者“已知的”。有无数的素数,但是在全宇宙中,每个数只有一个实例。因此无论是谁试图找到最大素数,就是在解同一个问题,而不是这个问题另一个单独的实例。你不需要告诉其他人你已经打算寻找最大素数,你只需要在找到时通知其他人。如果从来没有人寻找最大素数,那么它永远也不会被找到。因此,只要参与(也就是试图找到素数),即使它正在秘密进行,仍会影响结果,只要公布最后的发现(如果找到)。
5 F0 e: K4 o6 n9 N* Z8 g1 M+ `3 J9 S0 ?9 s* U. Z
    这就是中本聪设计的精妙之处,他利用了这个令人难以置信的统计学现象,即任何参与都会影响结果,即使秘密进行,即使尚未成功。5 e* @! n1 A5 L" m
+ u8 u! L# T' d) z- N0 S
    值得注意的是,因为SHA是progress-free,每一次尝试都可以被认为是一个参与者加入其中,然后立即退出。因此可以这么理解,矿工们来了又走,每秒无数次轮回。' d9 E, G9 z0 e1 S% [

2 I( ?# d7 l' s! [- Z4 ]& g+ Z    参与度由统计学揭示
, J% R% p* I9 M2 [
$ l$ {, z3 ^+ n    这个神奇的秘密参与(secretparticipation)属性反过来也成立。很多网站上显示的全球算力,并非是由每个矿工在某个“矿工注册办公室”注册,并定期汇报他们的算力而来。并不存在这种事情。) C& h" Y% q* I% B0 I7 V  ?
5 m/ ?$ P, t$ r2 K/ T
    因为对于在10分钟找到一个指定难度的解,所需算力是已知的,一个人平均必须尝试这么多次(截止成文之时大概10^21)才能找到答案,无论这个人是谁,他在哪儿。
) P2 V+ b1 S4 \3 p; a* e, J. u1 L: t! V- D) P3 N
    我们不知道这些参与者是谁,他们也从来都不会说我正在参与其中,没有找到解的人(实际上他们都是)从来不会告诉其他人他们正在进行计算,他们可能在世界上任何一个地方,但是我们肯定他们必然存在。因为生活还要继续,问题(找到满足条件的哈希)始终还是要被解决。) v0 ]# a0 _5 R% V4 q
- x0 ~' R$ [5 d6 t0 h4 t6 \
    工作(work)是一个时钟(clock)) b' U8 G+ p6 G% J8 h
3 E' V3 H' |1 V  U# o, n% g' ]
    关键之处在于:找到满足条件的哈希的难度,就类似于一个时钟的角色。一个宇宙(universe)时钟,因为全宇宙只有一个这样的时钟,不需要同步,任何人都能“看”到这个时钟。
' m7 z0 T6 I6 M! H7 }& s" q$ k  k) B/ ^5 x3 R
    即使这个时钟不精确也没关系。重要的是,对所有人来说,它都是同一个时钟,链的状态与这个时钟的滴答(tick)无歧义地绑定到一起。# d0 E" [: S# J
2 a9 q5 K$ J2 u9 M7 t0 a
    这个时钟由遍布地球上的未知数量的参与者共同操作,参与者相互之间完全独立。) u; t" E& Z. w5 q
( B) d+ S! D& @% N% x1 N
    谜题的最后一部分2 v8 N2 \2 M% t6 g( e: N. y; k/ u+ m

. B8 @9 M3 A8 ?    解决方案必须是块哈希(准确来说,是块头)。上面已经提到,对于SHA来说,输入的内容并不重要,但是如果它是真实的块,那么无论何时找到一个解,它都发生在PoW这个时钟的滴答处。没有早一点,没有晚一点,而是恰好在这个点。我们知道这是毫无歧义的,因为块是整个机制的一部分。
5 @' G9 o9 ]- m* l% a' c6 \0 V$ z' k) S- k) H  D/ c
    换句话来说,如果块不是SHA256函数的输入,我们仍然有一个分布式时钟,但是我们无法将块绑定到这个时钟的滴答上。将块作为输入就解决了这个问题。
* d! ?  U2 t8 b& @
% i3 L8 `0 @$ w( M    值得注意的是,我们的PoW时钟只提供了滴答。但是我们没办法从滴答中分出顺序,于是就引入了哈希链(hashchain)。6 j1 u0 s- ~% ]" j$ r. x7 b
* Z5 o0 ~% x7 y- a6 p& q
    分布式共识
3 ~/ `) T2 p' h$ Y1 p1 z$ U5 C0 o! x/ g) S" O) z1 ~/ c
    共识(consensus)意味着意见一致(agreement)。所有参与者别无选择,只能同意“时钟已然滴答”。并且每个人都知道滴答和附加的数据。正如中本聪在邮件里面所解释的,这确实解决了拜占庭将军问题,。
0 v8 Q: w" S( Q% Q
& k  f9 `- d' [7 r$ r7 h    在一个罕见却又常见的情况下,会出现共识分离,有两个连续的滴答与一个块有关联,这就发生了冲突。通过哪个块与下一个滴答相关联解决了这个冲突,同时将有争议的块变为“孤儿块(orphan)”。链如何继续是个概率问题(amatterofchance),这也可能间接地归因于PoW的时钟。0 Q) z9 `, f: A4 l/ c3 S
: g* F. t, h  C& R  a0 J# I& _
    就这样. a7 m& d' _* O6 o
' o1 a: j. ]' b% |6 g- N4 G4 D
    这就是区块链的PoW(工作量证明)。它并不是一个为了让矿工赢得出块权的“乐透”,也不是为了将实际能源转换成一个有价值的概念,这些都偏离了本质。
6 E! _% {4 _( C6 {: _: s4 D. ^
, z1 m, S- d$ Q    比如矿工奖励的角度来看,虽然这些奖励激励了矿工参与,但是这并不是区块链诞生的必要因素。块哈希形成一条链,但是这与工作量并没什么关系,它是从密码学上强制保证了块的顺序。哈希链使得前一个滴答“更确定”,“更加不可抵赖”,或者简单来说,更安全。) B2 t9 B7 V7 q( W
1 E+ _4 `- J4 t* h% d- p
    PoW也能使块不可更改,这是一种好的副作用,也使得隔离见证(SegregatedWitness)成为可能,但是隔离见证也能通过保留签名(见证,witness)实现,所以这也是次要的。" w' T* {' r" m7 n5 q
. n8 {& F6 N; L; w7 c. O4 R. Z
    结论
/ v6 E6 y; G8 r" U
* m  n) {# t1 e4 F$ @; p    比特被的PoW只是一个分布式,去中心化的时钟。
9 {6 C( [8 O& A( j% ?7 E  ?
+ f# _/ x8 U/ _" U: ^( B- B/ S4 d    如果你理解了这个解释,那么你应该能够更好地理解PoW与PoS的异同。显然,两者不具有可比性:PoS是有关于(随机分布的)权力(authority),而PoW是一个时钟。
! n; v: A% \( v" c3 ~- i1 Y# o' x# q+ k9 i1 O' {
    在区块链的背景下,PoW这个名字可能是个误用,起的并不太好。这个词来源于Hashcash项目,它确实用于证实工作(work)。在区块链中,它主要关于可验证的花费时间。当一个人发现满足难度的哈希时,我们知道它必然会花费一些时间。实现时间延迟的方法就是“工作”,而哈希就是这段时间的证明。
+ k# l* O3 X7 i2 d& a; y* p0 Z  P3 \$ b0 n; J, B  p' a
    PoW是关于time而非work的事实也表明,可能存在一些其他的统计学问题,这些问题同样消耗时间,但却需要更少的能源。这也可能意味着比特币算力有些“过分”,因为我们在上面所描述的比特币时钟,在只有部分算力的情况下,也是可信的,这是这种激励结构推动了能源消耗。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

haranN 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    26