主页 > imtoken恢复身份币不见了 > 比特币挖矿简介
比特币挖矿简介
本文主要介绍比特币挖矿的基本算法。想知道什么是比特币的同学可以看这里:什么是比特币
比特币是基于区块链的底层应用程序。比特币挖矿就是将最新的比特币交易数据打包成一个新的区块,加入区块链。
比特币区块挖矿任务挖矿收益来源结构
在介绍挖矿算法之前,先来看看比特币区块的结构,一个完整的区块结构如下,主要数据是区块头和区块中包含的比特币交易信息
大小字段说明
4 个字节
块大小
该字段后面的块大小,以字节为单位
80 字节
区块头
组成区块头的区块几个字段
1-9(可变整数)
交易计数器
交易数量
变量
交易
区块中记录的交易信息
我们主要看区块头的具体结构
尺寸字段说明
4 个字节
版本
版本号比特币挖矿难度的历史演进,用于跟踪软件/协议更新
32 字节
父块哈希
指区块链中父区块的哈希
32 字节
默克尔根
区块中交易的默克尔根的Hash值
4 个字节
时间戳
生成区块的大致时间(精确到秒) Unix 时间戳)
4 个字节
难度目标
这个区块的工作量证明算法的难度目标(难度)
4 个字节
随机数
工作量证明算法的计数器
块头大小为80字节,其中包含前一个块的哈希值,通过它可以在链上找到前一个块。因此,区块链的结构类似于单链表的结构。通过任何一个区块,都可以向上找到比特币的第一个区块(创世区块)。
区块链结构示例(来自《区块链原理、设计与应用》)
在比特币区块链中,区块517552的头部如下:
区块链数据(来自 blockchain.info)
生成新区块
挖矿就是对80字节的区块头进行SHA256计算,运算结果是256位的值。然后通过大小与当前难度值的比较来判断当前区块是否合法。计算公式如下:
HASH256(HASH256(区块头)) 如果不满足以上条件,改变区块头中的随机值(Nonce),然后重复以上计算。公式中pdiff称为矿池难度,是一个256位长度的常数。 区块头的hash计算出来的值必须在0到pdiff之间,在这个范围内随机取值。 Difficult的值小于pdiff,Difficult越小比特币挖矿难度的历史演进,越难找到符合条件的Nonce值,挖掘的时间也越长。这里的难度是0~2^32之间的一个值,通常称为bdiff。 由于Hash算法的特点,上面的公式是不能倒转的。 Nonce值只能通过蛮力搜索,使得块头的hash值符合上式。根据矿机当前的算力,每十分钟可以计算出一个有效的Noce值来生成一个区块。但是,这个值不是确定性的,可能是几秒钟,也可能是一小时。 参考: 比特币区块链和挖矿原理: 比特币区块结构分析: 区块链技术指南: