挖矿的过程就是重复计算区块头的hash,不断修改随机数nonce,直到计算的值小于难度目标bits计算出来的hash
version 版本号
hashprevblock前一个区块的hash
hashMerkleroot交易Merkle树根
timestamp时间戳
bits难度
nonce随机数
挖到的条件为前n个比特位全部为0,n越大,难度越大。
举例12552
#125552
version = '01000000'
pre_hash='00000000000008a3a41b85b8b29ad444def299fee21793cd8b9e567eab02cd81'
merkle_root='2b12fcf1b09288fcaff797d71e950e71ae42b91e8bdb2304758dfcffc2b620e3'
time='1305998791'
bits='1a44b9f2'
nonce='1700635399'==>10进制转换成16进制==>9546a142==>42a14695
header_hex=version+pre_hash+merkle_root+time+bits+nonce
经过两次hash256算法以及转码,得出结果:
1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e00000000000000
将16进制的大小端颠倒顺序,得出结果:
000000000000001e8d........
高度为125552的区块的目标hash值为:
bits='1a44b9f2'
coefficient系数,coefficient=0x44b9f2
exponent指数:exponent=0x17
目标hash值=coefficientMath.pow(2,8(exponent-3))
计算值<目标hash值,OK,符合规范,证明挖到了此区块。






网友评论