睿阳知识库 睿阳知识库
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
  • 视频监控
  • MySQL系列

  • 应用高可用
  • 静态代码扫描
  • OpenSSH升级
  • 区块链

    • 0.学习路线
    • 01.概述
    • 02.预备知识
    • 03.区块链原理
    • 04.比特币挖矿原理
      • 一. 什么是比特币
      • 二. 挖矿
      • 三. 挖矿原理
      • 四. 最长链原则(共识算法)
    • 05.比特币交易原理
    • 06.电子钱包
    • 07.以太坊概述
    • 08.以太坊账户
    • 09.以太坊交易
    • 10.以太坊数据结构
    • 11.以太坊客户端
    • 12.以太坊权益证明
    • 13.智能合约
    • 14.Solidity精解
    • 15.HardHat说明
    • 16.去中心化应用
    • 17.区块链-供应链
  • 技术
  • 区块链
孙超
2023-06-13
目录

04.比特币挖矿原理

# 一. 什么是比特币

比特币是一种 P2P 形式的数字加密货币,基于区块链的一种应用形式。

# 二. 挖矿

由于必须保证节点之间的同步,所以新区块的添加速度不能太快。试想一下,你刚刚同步了一个区块,准备基于它生成下一个区块,但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步。 因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块。所以,你别无选择,一听到信号,就必须立刻同步。

挖矿:将新的交易打包成一个新的区块。

矿工:在比特币的P2P网络中,有一类节点,它们时刻不停地进行计算,试图把新的交易打包成新的区块并附加到区块链上,这类节点就是矿工。

为什么要挖矿:因为每打包一个新的区块,打包该区块的矿工可以获取被打包交易中的手续费以及一笔比特币奖励。

比特币的数量:区块链的发明者中本聪规定,平均每10分钟,全网才能生成一个新区块,一小时也就六个。挖矿成功的矿工会获得50(每过4年减半)个比特币,所以总数计算如下:

总数

# 三. 挖矿原理

比特币的挖矿原理就是一种工作量证明机制。工作就是通过计算机计算数学问题。

区块哈希

BitCoin

数学问题:不断尝试计算区块的哈希,直到计算出一个特定的哈希值,它比目标值要小。

目标值(target):目标值是一个大整数,表示挖矿过程中哈希值必须满足的条件,即哈希值的二进制表示中必须有多少个前导零,目标难度值是由Bits字段来计算的。

target = coefficient * 256^(exponent – 3) = 系数 * 256^(幂 - 3)

target = target * (actual time / expect time)  ## 预期时间:每挖2016个区块后,调整一次

Bits:表示目标难度值的编码形式,十六进制。用于表示前导零的个数和目标哈希值中的非零部分。具体来说,Bits字段的高位字节表示前导零的个数,低位字节表示目标哈希值中的非零部分。例如,如果前导零的个数为 20,目标哈希值的非零部分为 0x1A2B3C4D,那么对应的Bits字段的值将是 0x14000000。

  • 幂:前2位十六进制数字
  • 系数:后6位十六进制数字

难度(difficulty):为了使区块哈希小于某个目标值(target),平均要尝试的计算次数。反映了矿工找到下一个有效区块的难易程度,难度随区块头目标值(target)的变动而变动,target值越小,难度越大。

difficulty = (创世区块目标值Target) / 当前目标值 = (0x00ffff * 256 ^ 26)/ target

工作量计数器(Nonce) 计算区块哈希时,头部信息除了Nonce都是固定不变的。挖矿就是不断的调整Nonce(随机数)来计算出满足要求的区块哈希。

# 四. 最长链原则(共识算法)

如果两个矿工在同一时间各自找到了有效区块,注意,这两个区块是不同的,因为coinbase交易不同,所以Merkle Hash不同,区块哈希也不同。但它们只要符合难度值,就都是有效的。

分叉

在分叉的情况下,有的矿工在绿色的分叉上继续挖矿,有的矿工在蓝色的分叉上继续挖矿。最终,总有一个分叉首先挖到后续区块,这个时候,由于比特币网络采用最长分叉的共识算法,绿色分叉胜出,蓝色分叉被废弃,整个网络上的所有矿工又会继续在最长的链上继续挖矿。

分叉

由于区块链虽然最终会保持数据一致,但是,一个交易可能被打包到一个后续被孤立的区块中。所以,要确认一个交易被永久记录到区块链中,需要对交易进行确认。如果后续的区块被追加到区块链上,实际上就会对原有的交易进行确认,因为链越长,修改的难度越大。一般来说,经过6个区块确认的交易几乎是不可能被修改的。

03.区块链原理
05.比特币交易原理

← 03.区块链原理 05.比特币交易原理→

最近更新
01
vue问题记录
10-11
02
RSP进度
10-09
03
贡献度
09-28
更多文章>
Copyright © 2014-2025 甘肃睿阳科技有限公司 陇ICP备15001783-1号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式