hash256算法:单向哈希函数,输入数据会被运算生成256位哈希值,相同的数据生成相同的hash
pow计算:进行多次SHA256算法,找到一个nonce值,使得当前区块头的hash值小于目标值,目标值越小,所需的计算量越大
区块头:nVersion、hashPrevBlock、hashMerkleRoot、nTime、nBits、nNonce
难度:nBits,它的前两位十六进制数字为幂,后六位为系数
计算目标值:target = nBits后六位* 2^(8 * (nBits前两位– 3))
目标值计算举例:区块277316中,nBits为0x1903a30c,该区块目标值用上述公式计算为:0x0000000000000003A30C00000000000000000000000000000000000000000000
区块277316实际hash值为:
0x0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4
比特币网络通过调整难度值nBits的大小来将出块时间控制在10分钟一块。每2016个块调整一次难度(20160分钟,2周)。难度调整是在每个完整节点中独立自动发生的,也就是说每个完整节点都拥有难度调整的代码(其他节点广播的错误难度值区块是无法通过验证的)。
新难度值 = 旧难度值 * (最近2016块实际用时 / 20160minutes)
为防止难度变化过快,每个周期的调整幅度小于一个因子(值为4),即当最近2016块的实际用时小于20160minutes/4或大于20160minutes*4时,分别按照20160minutes/4和20160minutes*4进行计算