比特币挖矿原理(学习中)

哈希算法

hash就是找到一种数据内容和数据存放地址之间的映射关系

hash有MD5,SHA-1,SHA-256

难度(diffculty)

难度随着难度增加,矿工在循环4亿次后未找到,则会启动超额随机数

难度目标bits

使整个网络的算力大概在10分钟产生一个区块

bits是用来储存难度目标的16进制数值
比特币挖矿原理(学习中)_第1张图片

  1. block = 516532
  2. bits = “391,129,783”==“0x17502AB7”
  3. coefficent系数 :coefficent = 0x502AB7
  4. exponent指数 : exponent = 0x17
  5. target == coefficent * Math.pow(2.8*(exponent - 3))
  6. 目标哈希 : 000000000000000000502ab700000000d6420b16625d309c4561290000000000
  7. 实际哈希:00000000000000000041ff1cfc5f15f929c1a45d262f88e4db83680d90658c0c

难度重定

  • 全网中每新增2016个区块,全网难度将会重新计算,该新难度将依据前2016个区块的哈希算力而定
  • 如果bitcoin每10分钟一个块,14天将重新计算难度

区块结构

区块头
  • 区块头: 每个区块的前80个字节(640bits(二进制))
    1. ​ Version版本,4字节
    2. 前一个区块哈希,32字节
    3. 本区块的所有交易的默克尔根,32字节
    4. 时间戳,4字节(1970.0.0)
      • 每个节点的时间戳可能不同,所以新区块的时间戳要大于前11个区块的平均时间戳,不超过当地网络事件2小时
      • 所以后一个区块的时间戳比前一个区块的时间戳也有可能小。
    5. 难度目标,4字节
    6. 随机数nonce,4字节
      • nonce是全网旷工计算当前区块的hash值的核心参数
      • nonce的取值范围是0-2^32(42亿)
字节 字段 说明
4 版本Version 区块版本号,表示本区块遵守的验证规则
32 父区块头哈希值 前一区块的哈希值,使用SHA256(SHA256(父区块头))计算
32 Merkle根Merkle root 该区块中交易的Merkle树根的哈希值,同样采用SHA256(SHA256())计算
4 时间戳Timestamp 该区块产生的近似时间,精确到秒的UNIX时间戳,必须严格大于前11个区块时间的中值,同时全节点也会拒绝那些超出自己2个小时时间戳的区块
4 难度目标Bits 该区块工作量证明算法的难度目标,已经使用特定算法编码
4 随机数Nonce 为了找到满足难度目标所设定的随机数,为了解决32位随机数在算力飞升的情况下不够用的问题,规定时间戳和coinbase交易信息均可更改,以此扩展nonce的位数
默克尔根
  • Merkle Tree:Hash树
  • 每条交易都有hash值,将所有交易按照手续费高低排序,第一笔交易是挖矿所得的coinbase交易
  • Coinbase交易是每个区块的第一笔交易,由矿工创建,交易内容是系统奖励给矿工的比特币
  • 生成一颗完整的默克尔树需要将每两笔交易两两哈希持续进行最后生成的一个哈希叫默克尔根,如果单数将自身复制进行哈希。

比特币挖矿原理(学习中)_第2张图片

挖矿原理
  • 不断地计算区块头的hash,不断修改随机数Nonce,直到得到小于Bits的哈希数值,则出块成功
    比特币挖矿原理(学习中)_第3张图片比特币挖矿原理(学习中)_第4张图片
    部分资源,图片来源于:
    默克尔树(Merkle Tree)总结:https://blog.csdn.net/xushiyu1996818/article/details/90265545
    千峰教育:https://ke.qq.com/course/322833

你可能感兴趣的:(区块链,区块链,比特币)