作者:黄马褂
时间:2018年9月28日
来源:https://zhuanlan.zhihu.com/p/45361764

To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof of-work system similar to Adam Back’s Hashcash [6], rather than newspaper or Usenet posts.
为了实施一个基于点对点的分布式布式的时间戳服务器,我们需要采用一种工作量证明机制,类似Adam Back的hash现金,而不是登报或者在新闻组网络发帖。
之前文章比特币技术起源里面提过,1997年,英国的密码学家Adam Back,他发明了哈希现金(hashcash),其中就用到了工作量证明机制(proof of work)。这个原型本来是用来解决互联网垃圾信息问题的。
The proof-of-work involves scanning for avalue that when hashed, such as with SHA-256, the hash begins with a number of zero bits.
当进行hash运算时,这个工作量证明机制将参与扫描一个值,例如通过SHA-256,hash值从一些0位开始。
SHA,Secure Hash Algorithm,安全散列算法,由美国国家安全局(NSA)所设计,它就是一个哈希函数。即对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示
The average work required is exponential in the number of zero bits required and can be verified by executing a single hash.
平均工作量将呈指数级增长,随着0的增长,然而只执行一个hash运算就能验证。验证什么?验证前一句提到的那个扫描的一个hash值。
For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block’s hash the required zero bits.
对于我们的时间戳网络,我们部署工作量证明,用增加一个随机数在区块里,直到这个值被找到,这个随机数给予这个块的hash值所需要的0.
就是说,我们在区块中增加一个随机数(Nonce),这个随机数要使得这个区块的hash值出现了所需的那么多个0。通过反复运算来找到这个随机数,直到找到为止,找这个随机数的过程就是在做工作,谁做的工作越多,谁找到这个随机数的概率就越大,这样就构建了一个工作量证明机制。
Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work.
只要CPU的工作量被消耗来满足这个工作量证明机制,区块的信息就不能被修改,除非重新做一遍相当的工作量。
As later blocks are chained after it, the work to change the block would include redoing all the blocks after it.
由于后面的区块是链接在前面的区块上的,因此要修改区块信息,还得重新做一遍之后所有新区块的工作量。
也就是说,当我要改某个区块的信息,我得把这个区块的工作量做一遍,而且由于区块还在不断延长,等我做完前面的工作量的这段时间,这个区块又往后延伸了,那我还得去把后面产生新区块的工作量再去做一遍,等于我一直在追这个延伸的链条,在我追的过程中这个链条还在一直在继续延长,如果我没有足够强大的运算能力,我几乎不可能追上这条不断延长的链条,也就几乎不可能修改区块上的信息。

这个图是在区块中增补随机数的示意,Prev Hash是前一个区块的Hash值,后面Nonce就是随机数,是通过大量的运算来找到,作用就是补齐这个区块hash值所需的0。
The proof-of-work also solves the problem of determining representation in majority decision making.
工作量证明机制也解决了,在大多数决定作出时,决定代表的问题。
也就是工作量证明机制也解决了,也就是在做集体决定时,谁代表大多数的问题。怎么决定的?下面解释。
If the majority were based on one-IP-address-one-vote,it could be subverted by anyone able to allocate many IPs.
如果大多数是基于一个IP一票这种模式,那么大多数会被颠覆,被那些分配了很多IP的人颠覆。比如一个IP算一票,如果我控制了众多的IP,那么我就能代表大多数。
Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.
而工作量证明机制是一个CPU一票。大多数决定被最长的链代表,就是最长的链表示了大多数,这个最长的链有最大量的工作量。
因为中本聪创造比特币当时,还没有现在这些强悍的专业的矿机,他也没料想到今天有人能通过专业矿机控制大量的算力。当时的环境下,他设想的是一人一台电脑,一人一台CPU,顶多你有几十上百台电脑几十上百个CPU,但是在全世界范围几千万几亿几十亿人里面,这些量级的CPU数量根本也构不成控制大量算力。因此构成这个最长的链所消耗的CPU算力,这些CPU一定不是某个人某个公司能控制的。这是当时的情况。
If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains.
如果大多数CPU算力被诚实节点控制,那么诚实的链条将延长得最快,并且超过任何竞争链条,也就是任何攻击链条都超不过诚实链条。
To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes.
如果要修改之前的区块信息,一个攻击者不得不重新做一遍这个区块的工作量以及这个区块后所有区块的工作量,才能赶上并超过诚实节点的工作量。
We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added.
我们稍后展示,就是一个更慢的攻击者追上的可能性呈指数级下降,随着随后的区块不断增加进来。
就是一个更慢的攻击者想要追上随后不断延伸的区块链,这种追上的可能性是呈指数级下降的,就是越来越不可能追上。
To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour.
随着时间的过去,为了抵消硬件速度提升和节点变化的兴趣,就是节点参与维护的程度,比如有的节点算力增加了,有的节点中途退出了,有的退出了又重新进来了,为了抵消这些因素的影响,工作量证明机制的难度也在调整,怎么调整,通过移动平均目标,每小时生成一个平均数量的区块来调整。就是不管全网节点怎么变化,全网算力怎么变化,整个网络只按一个平均时间来生成一个区块。
If they’re generated too fast, the difficulty increases.
如果区块生成的速度太快,难度就会增加。为什么会增加,因为在计算随机数的时间变短了,为了维持恒定的出块速度,就要增加难度,让单位时间所需要的工作量更大。
本系列全部文章: