工作量证明:要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备、能源作为担保成本,以确保服务与资源是被真正的需求所使用。
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.
为了在点对点的基础上建立一个分布式的时间戳服务器,我们将使用一种与AdamBack的Hashcash相类似的工作量证明(POW)系统,而不是像报纸或Usenet发帖子。
重点:作者参考的Hashcash,是由Adam Back在1997年提出的工作量证明系统。起初是为了抵御垃圾邮件和DoS拒绝服务攻击,即要求发送端在请求的时候附加一段以多个0开头的哈希值,这种哈希值只能用通过暴力枚举的方法尝试不同的随机数来生成,需要消耗一定的CPU计算时间。
工作量证明的技术原理:
工作量证明最常用的技术原理是散列函数。由于输入哈希h()的任意值n,会对应到一个h(n)结果,而n只要变动一个比特,就会引起雪崩效应,所以几乎无法从h(n)反推回n,因此借由指定查找h(n)的特征,让用户进行大量的穷举运算,就可以达成工作量证明。
我们若指定h(n)的16进制值的前四值,求n,这样统计上平均约要运行216次h(n)散列运算,才会得到答案,但验算只要进行一次就可以了。如果想要增加难度,那就增加指定的位数即可。以SHA256函数举例,假设我们要处理数据Hello World,并找出h(n)前四值为0000的n,如果从Hello World0开始加上一个十进制数ASCII进行穷举猜测,到Hello World107105时才会得到匹配条件的h(n):0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9
验算时只要将Hello World107105代入SHA256函数一次即可。
The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits.
这个工作量证明需要在哈希(Hash)的过程中(以枚举的方式)寻找一个以一定数量0比特开头的哈希值,比如用SHA-256算法。
The average work required is exponential in the number of zero bits required and can be verified by executing a single hash.
所需的平均工作量随所需的0比特位数量以指数级增长,而验证工作量只需做一次哈希。
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.
在我们的时间戳网络中,我们不断递增区块中的nonce随机数来找到那个满足所需0比特数量的区块哈希值,并将这个计算过程作为PoW。
Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it.
一旦CPU的消耗使之满足了工作量证明要求,这个区块就不能改变了,除非重做这项工作。随着后来的区块在其后链接,改变区块的工作量将包括改变之后所有的区块。
工作量证明的步骤如下:
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. Proof-of-work is essentially one-CPU-one-vote.
如果多数(的统计)是基于一个地址一票的,那么可以分配多个IP的人将破坏规则。工作量证明本质上是一个CPU一票。
The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.
那么大多数的决定表达为最长的链,因为有最多工作了证明的努力投入其中。
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.
为了补偿日益增长的硬件速度和日益变化的运营节点的利息,工作量证明的难度由一个每小时平均区块产生数量为目标的变化的均值来决定。如果它们(区块)产生的太快,难度就会增加。
重点:寻找工作量证明的过程就是传说中的“挖矿”。比特币为了控制出矿的速度,加入了难度设定。随着科技的进步,计算机硬件性能的提升,以及参与人群的扩大,中本聪预料到会有越来越多的算力投入到挖矿的行列。如果对出矿速度不加控制,比特币将会很快达到预设的上限。