比特币白皮书翻译-part2

比特币白皮书翻译-part2

比特币白皮书翻译-part2

编者按:本文由Peter 王广忠的技术分享,转载请注明来自Peter 王广忠,并联系作者获得授权。Peter 王广忠,程序员,专业区块链讲解员

接上一篇:Peter 王广忠:比特币白皮书翻译-part1

4. 工作量证明

我们真正需要的是一个类似 Adam Back 的哈希现金的工作量证明系统,而不是报纸或者论坛,来达成点对点的分布式时间戳服务器。工作量证明涉及到去找一个值,当对这个值进行类似 SHA-256 这样的哈希运算的时候,得到的哈希值满足以特定数量的零打头。随着零的数量的增加,找到这个值所需要的工作量会呈指数增长,但是要验证这个值是合格的只需要一次哈希运算即可。

我们给区块数据添加一个随机数,每次运算区块的哈希的时候都把它加一,这样经过不断尝试就能找到一个合格的随机数的值,保证区块哈希以所需位数的零打头,这就是我们需要为时间戳服务器构建的工作量证明机制了。当我们花费了 CPU 算力去让区块满足了工作量证明机制的要求,那么这个区块就很难被改动了,因为改动区块必须要重新运算获得合格的随机数。随着新区块不断的添加的这个区块的后面,形成一条链,那么修改区块的工作量中还会包含重新制作之后的所有区块。

比特币白皮书翻译-part2

工作量证明机制同时解决了如何在投票的时候计票的问题。如果用一个 IP 地址代表一票,那么就很容易捣鬼,因为有人可以很轻易的获得很多 IP 。而工作量证明机制的思路是一个 CPU 一票。这样最长的那条链就可以代表多数票,因为它是用最多的算力生成出来的。如果诚实的节点控制了大多数的 CPU 算力,那么诚实的链就会比任何竞争链都要延长的更快。要想修改一个过去的区块,攻击者需要完成这个以及后面所有区块的工作量证明过程所需的工作量,然后赶上并超过所有诚实节点的工作量。稍后我们会展示,运算速度比较慢的攻击者追上所有诚实节点的概率会随着后续区块的增多而呈指数减小。

因为硬件速度和节点数量的变化,工作量证明的难度是会不断调整的。调整通过不断改变每小时平均能够生成的区块数来实现。如果生成的太快,那么难度就会增加。

5. 网络

网络运行的步骤如下:

  • 1 新交易被广播给所有节点2 节点把交易收集到一个区块中3 节点开始计算这个区块的工作量证明4 当一个节点找到工作量证明后,它就会把区块广播给所有节点5 只有当区块中的交易都是有效的并且是没有被花费的,其他的节点才会接受这个区块6 接受的表现形式是把这个区块的哈希作为前哈希来制作下一个区块。

所以节点都始终认为最长的那条链是正确的,并基于这条链来运算。如果两个节点同时广播出了不同版本的下一个区块,那么某些节点可能会先收到其中一个,而其他节点却先收到另一个。这样,节点会基于它先收到的节点来运算,但是也会保存另外一个分支,因为这个分支也很有可能成为最长的。当下一个工作量证明被找到后,到底哪条分支比较长就明确了,发现自己站错队的节点会切换到最长的这个分支上。

新的交易不一定非要到达网络上的所有节点。只要足够多的节点收到了这个交易,那么它不久后就可以被收入到区块中。区块广播的时候也是有容错能力的,不必担心个别的信息丢失。如果节点没有收到区块,那么当它收到下一个区块的时候,就会发现自己少了一个区块,然后会再次请求。

6. 激励

按照约定,区块中的第一个交易是比较特殊的,里面会生成一个归区块创建者所有的币。这个激励措施让节点有动力去支持网络。同时这也是发行新币的方式,因为网络上不会通过中央权威发行新币。我们稳定的去增加币的数量,很像去花费资源挖矿来增加黄金的流通量,只不过我们这里花费的资源是 CPU 时间和电力。

交易手续费是另外一种激励。如果一笔交易的输出值小于它的输入值,那么其中的差额就是手续费。手续费会被添加到交易所在区块的激励总额之中。一旦既定数量的币已经进入流通,那么奖励将全部由交易手续费来完成,整个系统不会有通货膨胀。

这样的激励形式也很有可能让节点保持诚实。如果一个贪婪的攻击者手里真的掌握了比全部诚实节点还要多的 CPU 算力,那他可以有两种选择。一是可以选择欺骗他人来把自己已经花掉的币再偷回来。另外就是可以用算力来生产新币。他会发现遵守规则会获利更多。因为规则可以让他获得的币比其他所有人加起来还要多。而如果破坏规则了,那么他自己手里的币也就不值钱了。

7. 回收硬盘空间

当一个币的最近一个交易被埋在足够多的区块之下,就可以扔掉之前花费这个币的交易来节省硬盘空间了。区块中的交易是通过默克尔树的形式来生成哈希的,这使得扔掉交易之后区块的哈希也不会变,因为只有默克尔根会被包含在区块哈希中。把默克尔树的一些分支砍掉,删掉一些内部哈希,这样就能压缩老区块。

比特币白皮书翻译-part2

一个不带交易的区块头大概是80字节。假定每十分钟生成一个区块,每年生成的数据总量就是:80字节 * 6 * 24 * 365 = 4.2M 。就2008年来看,计算机系统一般都是 2G 的内存。根据摩尔定律,每年会增加 1.2G ,这样算的话,即使把所有的区块头都保存到内存里也不成问题。


分享到:


相關文章: