区块链介绍-Pow

原创
2016/06/07 14:09
阅读数 147

区块链 是由P2P网络(peer-to-peer network)协作维护的, 比特币网络要求在创建区块的时候要提供一定的工作量证明,以保证那些想改变历史区块的不诚实的节点必须付出比那些仅仅想在链上加一个新区块的诚实节点更多的资源。

如果不修改后面所有的区块,修改已经打包到区块中的交易成为一件不可能的事情,这也是把区块链接到一起的用处。 因此,修改一个区块的费用会随着新区块的增加而增加,工作量证明的作用也就随之变大。

比特币网络中的工作量证明利用了密码学哈希算法的伪随机性。一个好的密码学哈希可以把任意的数据转换成一个看起来随机的数字。如果这个原始数据的任何地方被更改,然后重新计算哈希,将会生成一个完全不同的新的哈希结果。所以修改数据以预知哈希的结果是不可能的。

为了证明你已经做了一些创建区块的工作,你需要计算出一个不大于某个特定值的块头的哈希值。举个例子: 如果这个最大哈希值是2256 − 1,你只要证明你做了两次组合就可以使哈希值小于2256 − 1。

在上面的例子中,你很有可能在第一次尝试的时候就生成了一个成功的哈希值。你甚至可以估算你要达到的某个阈值所需要的尝试的次数。比特币本身并不能控制这个可能性,但是单纯假设这个阈值越小需要尝试的次数越多,平均下来也就是个平均数(这个是概率平均)。

只有当哈系值至少跟P2P网络预期的难度值难度相当的时候,新的区块才会被加到区块链上。比特币网络使用储存在2016个区块头的时间戳的差值来计算下一轮的难度。这个差值的理想的间隔是1,209,600秒(两周)。

如果产生2016个区块的时间小于两周,预期的难度将成比例地提高(大约300%)以便于下一个块能够准确地在两周生成,前提是保证在当前的HASH在同一算力.如果产生2016个块的时间超过两周,同样地,预期难度将降低(75%左右)。

(注意: 比特币内核实现的一个差一错误,导致每到2016区块的时候,因为使用了第2015块的时间戳,难度就会更新,这导致了轻微的偏差。

由于每一块头的哈希值必须小于某个阈值,每一区块也必须链接到它前面的一个区块。要在原始区块生成到当前这段时间里传送一个已修改的区块,(一般来说)需要消耗和整个比特币网络消耗的算力一样多的哈系算力。只有你掌握了全网大多数哈希算力,你才能有效地实现对交易历史进行51%的攻击。

区块头提供了一些容易改的字段,例如dedicated nonce field,所以获取新块的哈希不需要等新的交易的到来。同样,只有80字节的区块头会被计算到POW的哈希中,因此添加更多的交易信息不会降低伴有额外I/O的哈希计算速度.

展开阅读全文
POW
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部