区块链的每一个区块的第一个值是前一个区块的Hash值。
所谓Hash值就是一个函数,输入任何内容,都输出一个固定长度的字符串(即Hash值);输入内容不变,输出结果不变,即将输入内容固化;输入内容一旦发生变化,比如修改一个符号,输出的Hash值都会发生变化。
比特币的Hash值是256位二进制数,代表2的256次方个可能性或者状态。如果给宇宙中所有的原子一个不重复的数字作为其状态,仍然用不完。
Hash值重复(即Hash碰撞)的可能性很低,我们可能忽略。
因此,我们可以得出结论:往Hash函数中输入任意两个不同数字,最后得到的Hash值一定不一样,一定不会重复(即不会发生碰撞)。
每个区块首先引用前一个区块的Hash值,像指针一样,形成前后序列的关系;通过互相引用,就会形成一个区块的链条。
然后默克尔树(Merkle Tree)将每一个交易都取Hash值,两个Hash值之间再取Hash值。
比如原来的8笔交易会变成4个Hash值,再合并成2个Hash值,然后再合并成1个Hash值,最后将这个Hash值写入区块中,这样就把所有交易的内容都固化下来。
此外,还有一个区块用来存放交易的原文。
生成Hash值时非常快(大概几十毫秒),而我们通常所说的比特币挖矿要消耗很多电能,要做很大的运算,这到底为什么呢?
要想获得比特币,除了满足它是前一个区块内容的数据指纹之外,还得满足256位二进制数的前N位为0。
比特币运营初期时,只要生成一个Hash值,就很快生成一个新区块,即没有任何难度。
每个区块里都有一个时间戳,当两个区块的生成间隔小于10分钟时,难度就会增大,开始要求Hash值的前多少位为零,这样运算量就会增加;当两个区块的生成间隔大于10分钟时,难度就会降低。
由于比特币价格在上涨,所以比特币的运算难度不断增大。正是因为持续不断地调整难度,才使区块的平均生成时间保持在10分钟。