POW(Proof of Work),即工作量证明,是指系统为达到某一目标而设置的度量方法。可以简单理解为就是一份证明,用来确认你做过一定量的工作。POW为按劳分配,算力决定一切,谁的算力多谁记账的概率越大。
工作量证明的本质是:尝试大量随机数进行哈希运算。具体为找到一个随机数加入到块头中,计算区块的块头的哈希值,使得计算的哈希结果小于或等于块头中目标值。若不满足目标条件,则重新找随机数进行重复操作,直到满足目标条件为止。在比特币中使用的哈希函数为SHA256算法函数,是密码哈希函数家族中输出值为256位的哈希算法。
公式为:H(block header + nonce) <=target
根据哈希性质之一:谜题友好性(puzzle friendly),计算的哈希值结果是不可预测的,比如某个输入x,想要哈希值H(x)在某个范围内,没有什么捷径可走,只能一个个去尝试这个x(因此要做大量工作)。之所以只计算区块块头的哈希值而不包含区块体,是因为在块头中的根哈希值(merkle root hash)保证了区块体中的内容不被篡改。
POW工作量证明的主要流程为:
1.生成Merkle根哈希:节点自己生成一笔筹币交易并与其他所有即将打包的交易通过Merkle树算法生成Merkle根哈希。
2.组装区块头:区块头包括父区块(也就是上一个区块)哈希值、版本、时间戳、Merkel根哈希值、难度以及工作量证明中需要给出的随机数。
3.计算工作量证明的输出:将区块头进行哈希函数运算后得到一个输出,比较其是否小于目标值,若小于则说明工作量完成,反之则需要修改随机数重复上述步骤直到满足目标条件。
比特币系统中规定,只要工作量证明在全网达成共识并加入到区块链中后就可以获得比特币,也就是出块奖励(block reward)。比特币的来源就是通过出块奖励产生,也是比特币增多的唯一来源。
奖励规则:比特币系统中维持着平均每10分钟会有一个工作量证明成功(挖矿成功)。比特币系统最初始的挖矿奖励是50BTC,区块链中的区块每21万个后奖励就减半,也就是25BTC,以此类推。
根据2个条件:
1.平均每10分钟出一个块(挖矿成功)
2.每21万个区块后奖励减半
那么开采21万个区块所需的时间:
*21000010/60/24/365= 3.995年**
计算得到时间为 3.995年,约等于4年。也就是说比特币奖励大约每4年减半。
也就是大约到2140年左右比特币将不再增长,达到饱和。矿工挖矿不再获得奖励。