说起挖矿这两字给人的第一印象是一帮黑不溜秋的矿工拿着锄头和探照灯,在漆黑的地下挖掘,在无数声叮叮当当的敲打声后,突然有个矿工拿起一枚通透的宝石或者黄灿灿的金子叫喊到,“挖到了,挖到了”,这是电影或者小说中的情节,真实情况是,在区块链的网络世界,“挖矿”这俩字用的并不准确。
不过“挖矿”这俩字如今已经深入人心,我也只好顺着往下说。
“挖矿”其实是对比特币等数字货币发行的一种通俗称呼,这个行为背后的真正含义是---网络上的无数台电脑对某一个特定的问题求解,哪台计算机先解出了这个问题,在全网所有计算机的见证下,那台求出解的计算机就会得到网络奖励的比特币。
那这个问题是什么?
是对某个区块的区块头求一个特殊的hash值,这个特殊的hash值要满足小于预先设定的目标值
这句话怎么理解呢?
方便起见,先举个简单的例子,区块链世界中用到一种叫做SHA256的算法,它的特点是,给定任何一段语句,在经过该算法后都能得到一个hash值。
比如输入“power overwhelming”,经过SHA256算法,得到一个32字节的hash值:
'8fe12dec3dc8433bfe04ca1e4381feaa58d30c5ece06d37756d88face23aa3e1'
由于sha256算法的特殊性,使得对这段语句修改或增减任何一个字符,输出的hash值都会改变:
比如在原句后加一个“1”,输入“power overwhelming1”,得到一个新的32字节的hash值:
'd9e940764a410ecf7eae1f27a63248070ab45292e41de1cdfc89433ba2c20ac7'
现在设个目标,通过修改语句尾巴上的数字,使得输出十六进制hash值的首位为0(相当于256位的二进制hash的前四位都是0),下面通过一段简单的代码,来实现对语句尾部迭代不同数字,并统计满足要求的hash值
代码如下
执行程序,分别输入语句“power overwhelming”和数字“4”,数字“4”表示目标hash值的十六进制首位为0
以上运行结果显示,