当前位置: 首页 > news >正文

【BTC】挖矿

目录

一、比特币节点类型及职责

二、挖矿原理及相关注意事项

三、挖矿设备的演化

四、矿池的出现及运作

五、矿池带来的问题


这节课讲解比特币挖矿中出现的一些趋势。

首先总结一下前面的讲课内容。

一、比特币节点类型及职责

比特币中有全节点和轻节点。全节点一直在线,维护 utxo 集合,监听交易信息并验证交易与区块合法性,每两周调整挖矿难度;轻节点不一直在线,只保存区块头,只能验证与自身相关交易及挖矿难度,依赖全节点保证交易合法性。

这部分内容老师对比特币中的两种节点类型(全节点和轻节点)的定义、特征、职责等方面进行了详细讲解,具体如下:

  1. 全节点:
    • 在线状态:一般是一直在线的。
    • 维护内容:在内存当中要维护 utxo 集合,即 unspent transaction output 集合,以便快速检验交易的正确性。
    • 监听与验证交易:监听比特币网络上的交易信息,然后验证每个交易(普通交易和铸币交易)的合法性,包括检查交易有没有合法的签名,是不是存在 double spending(双花问题)。缺省状况下,只要是合法的交易,并且交易费符合要求,就会被认可。
    • 验证区块:同时要监听别的矿工挖出来的区块,并从三个方面验证其合法性。
      • 一是检查区块中的每个交易是否合法,比如有没有篡改 block reward(出块奖励,18年是 12.5 个比特币);
      • 二是检查发布的这个区块是不是符合难度要求,通俗来说就是检查 block header 取哈希值之后,前面有没有足够多的零,同时检查 block header 里面难度目标阈值设置是不是正确的;
      • 三是检查这个区块是否在延伸最长合法链
    • 调整挖矿难度:每两周还要按照比特币协议的要求调整挖矿难度。

  1. 轻节点:
    • 别称:也叫 SPV client(simplified payment verification,简易支付验证)。
    • 在线状态:一般来说不是一直在线,与全节点始终连在比特币网络中不同。
    • 存储内容:只要保存每个区块的 header 即可,其存储大小与保存整个区块相比差了约 1000 倍,且不用保存全部的交易,只要保存与自己相关的那些交易就行
    • 验证能力:由于没有保存完整的交易信息,所以没有办法验证大多数交易的合法性,无法检测 double spending,只能检测与自己相关的那些交易的合法性;也无法检测网上发布的区块的正确性,但可以验证挖矿的难度,因为挖矿计算哈希值只用到块头的信息,而块头信息轻节点是保留的
    • 假设前提:轻节点假设发布这个区块的全节点是不会把非法的交易发布出来的,因为发布这样的交易对全节点没有好处;同时假设矿工是有理智的,不会沿着不合法的链挖下去,因为挖出一个区块代价很大,若挖不合法区块就白挖了。
    • 实际应用:比特币网络中大部分节点都是轻节点,如果只是想进行转账,不需要挖矿的话,使用一个轻节点就可以了。一般我们本地下载的钱包就是一个轻节点。

二、挖矿原理及相关注意事项

挖矿分为决定沿哪条链挖和实际挖矿两部分,通常沿最长合法链挖。若监听到合法且在延伸最长合法链的新区块,应停止现有挖矿重新开始,虽看似可惜,但挖矿具有无记忆性,不影响成功概率。挖到合法区块发布后也不一定成功,可能因竞争条件导致交易冲突。

这部分内容中老师围绕比特币挖矿的原理,详细阐述了挖矿的具体步骤、面临新情况时的处理方式,以及挖矿成功后的不确定性和背后的特性原理,具体如下:

  1. 挖矿的步骤:
    • 选择挖矿链:挖矿分为两部分,第一个部分是要决定沿着哪条链挖下去。缺省情况下,应该沿着最长合法链挖下去;当出现等长的分叉的时候,缺省情况下是选择最先听到的那个分叉,这是全节点的职责。
    • 实际挖矿操作:这一步才是真正能够带来收益的挖矿操作。
  2. 遇到新区块的处理方式:在挖矿过程中,如果监听到别人发布了一个区块,且这个区块是合法的,也是在延伸最长合法链,此时应该停止已有的挖矿,然后重新进行挖矿。这是因为要沿着新发布的区块往下挖的话,block header 的内容会发生变化,像 block header 里由交易所组成的 merkle root 哈希值,还有指向前一个区块的指针等都会改变,所以要停止已有挖矿并从头开始挖。
  3. 重新挖矿不可惜的原因:看似前面的努力白费很可惜,但其实不可惜。因为挖矿具有无记忆性(memories,也叫 progress free)的性质,无论继续在原来的区块上挖,还是停下来改成挖新组装出来的区块,只要当前还没有挖到符合要求的目标值(nonce值),前面已经挖了多长时间对最后的结果都没有影响,成功的概率是一样的。
  4. 挖到合法区块后的情况:即使挖到了合法的区块并把它发布出去,也不意味着就胜利了。因为有可能发布的这个区块最终没有成为最长合法链,可能存在一些竞争条件(race condition),即别人同时发布了一个合法的区块,使得自己发布的区块中某些交易最后变成是有冲突的,导致该区块不被认可。

三、挖矿设备的演化

挖矿设备从通用走向专用。最早用普通 cpu 挖矿,因性价比低被淘汰;gpu 挖矿效率高于 cpu,但仍有资源闲置;现在多用 asic 芯片挖矿,它专为挖矿设计,性价比高,但研发周期长,比特币价格波动会影响其收益,且易过时。

这部分内容中老师主要讲述了比特币挖矿设备从早期到现在的发展历程,分析了不同阶段设备的特点、优势与不足,以及设备演化带来的影响和问题,具体如下:

  1. CPU 挖矿阶段:最早的时候,人们使用普通的 CPU 去挖矿,比如家里的计算机、笔记本电脑都可以用来挖矿。但用计算机专门挖矿很不划算,因为计算机中的大部分内存都是闲置的,挖矿只用到其中很少一部分内存;CPU 当中的大部分部件也是闲置的,挖矿计算哈希值的操作只用到通用 CPU 中的很少一部分指令,硬盘和其他很多资源也都是闲置的。随着比特币挖矿难度的提高,用 CPU 挖矿、用通用计算机挖矿很快就变得无利可图,性价比太低。
  2. GPU 挖矿阶段:随着 CPU 挖矿的淘汰,挖矿设备进入第二代,即 GPU 挖矿。GPU 主要用于大规模的并行计算,有大量的矩阵乘法运算能力,相比 CPU 挖矿,GPU 挖矿的效率有了很大提高。然而,GPU 挖矿仍然存在浪费现象,因为 GPU 是为通用并行计算而设计的,用于挖矿时,里面有很多部件仍处于闲置状态,比如用于浮点数运算的那些部件,而比特币的挖矿只用到了整数操作。所以,虽然 GPU 挖矿比 CPU 效率大幅提升,但还是有不少资源浪费。此外,最近几年 GPU 的价格因挖矿需求上涨很快,不过随着比特币挖矿难度的进一步提升,用 GPU 挖矿已经超过了其算力范围,变得划不来,因此也使得因挖矿而竞争购买 GPU 的情况减少,这对打游戏等应用来说是个好消息,不过仍有一些新开发的加密货币会用 GPU 挖矿。
  3. ASIC 芯片挖矿阶段:现在一般使用 ASIC 芯片进行挖矿。ASIC 是专门为了挖矿而设计的芯片,上面没有多余的电路逻辑,整个芯片就是为比特币挖矿计算哈希值的操作而设计的,所以它的性价比是最高的。但这种芯片功能单一,除了挖矿之外什么事都干不了,而且为某一种加密货币设计的 ASIC 芯片,通常只能挖该种加密货币,除非两种加密货币使用同一个挖矿算法(如有些加密货币新发行时,为解决启动问题,会采用和比特币一样的挖矿算法,以吸引更多人来挖矿,这种情况叫 “imitation mining”)。ASIC 芯片的研发周期很长,一款比特币 ASIC 芯片从设计、流片到最后生产出来可能需要 1 年时间,这已经算是非常快的速度,与通用芯片相比,这样的研发速度创造了芯片史上的奇迹。在如此长的研发周期内,如果比特币的价格出现剧烈变化,前期投入的研发费用就有可能打水漂,历史上比特币价格曾多次在几个月内下跌 80% 然后又慢慢恢复。即使在比特币发展的黄金时期,价格不断上涨,挖矿有利可图,但竞争也越来越激烈,定制的 ASIC 芯片可能用不了几个月就过时,又得购买新的、更强大的芯片,就如同一个军备竞赛。有研究表明,一款 ASIC 矿机刚刚上市的前两个月,大部分利润都能获得,因为此时它的算力在同类产品中最强,基本上头两个月就能获得整个生命周期中一半以上的利润,之后可能就会被淘汰。购买矿机时,时机很重要,需要先交钱,过很长一段时间厂商才会发货,如果厂商不能及时交货,对矿工伤害很大。有些不良厂商生产出 ASIC 矿机后,自己先用这些矿机挖矿,等最赚钱的前两个月过去后才发给用户,还找借口说矿机在生产测试当中。当比特币系统中算力突然明显提高时,通常意味着某个大厂商有新的矿机生产出来了。所以在比特币浪潮中,真正赚大钱的不一定是挖矿的,可能是卖矿机的。
  4. 对挖矿设备演化的评价:挖矿设备总的演化趋势是从通用变成越来越专用,CPU 属于通用计算,GPU 是通用并行计算,ASIC 则变成挖矿专用。现在基本上都得用 ASIC 芯片去挖矿,该芯片一旦过时就作废,不像 CPU 和 GPU 还能作其他用途。很多人认为这种情况不好,违背了比特币去中心化的理念和设计初衷,因为最初设想是用普通家里的计算机(CPU)挖矿,不论是否从事 IT 行业都能参与,进入 GPU 时代后,用普通家里的计算机挖矿已比较困难,且 GPU 噪音大,例如一台计算机配上四块 GPU 后,运行时噪音大到让人无法在房间里呆下去。当然现在一些比较新的加密货币,引入了一些机制,可以让通用设备也能参与挖矿。

四、矿池的出现及运作

单个矿工挖矿收入不稳定且任务重,矿池将矿工组织起来。矿池架构一般是一个全节点驱动很多矿机,矿主负责全节点其他职责,矿工只计算哈希值。矿池有两种组织形式,收益按矿工贡献分配,通过降低挖矿难度,以矿工提交的 almost valid block(share)数量衡量工作量。

这部分内容中老师详细讲述了矿池出现的原因,其架构、组织形式、收益分配方式,以及矿工行为的可能性和矿池存在的潜在问题等方面,具体如下:

  1. 矿池出现的原因:
    • 收入不稳定:单个矿工即使用了 ASIC 芯片挖矿,从平均收益上看是有利可图的,但收入非常不稳定。比特币系统中所有矿工作为一个整体,平均每十分钟产出一个区块,但具体到某一个矿工,可能要挖 1 至 2 年才能挖出一个区块,而18年的出块奖励是 12.5 个比特币(价值几万美元),这使得挖矿像买彩票,中奖概率小,挖到等于中大奖,挖不到则电费白花。
    • 任务繁重:单个矿工除了挖矿之外,还要承担全节点的其他责任,如监听网上的交易、验证交易和区块的合法性、调整挖矿难度等,任务较重。
  2. 矿池的架构:矿池就是把矿工组织起来作为一个整体。其架构一般是一个全节点会驱动很多矿机,一个矿池有一个矿主(pool manager),下面连着很多矿工。矿工只负责计算哈希值(也就是矿工只负责挖矿),全节点的其他职责都由矿主承担,矿主要负责监听网上的交易,查看有没有其他节点抢先发布区块,并进行相应调整。
  3. 矿池的组织形式:
    • 大型数据中心式:类似大型数据中心,如有的互联网公司有成千上万的服务器,大型矿池中也有成千上万的矿机。如果这些矿机属于同一个机构,收入分配相对随意。
    • 分布式:矿工和矿主不在同一个地方,可能分散在世界各地。矿工要加入一个矿池,按照矿池规定的通讯协议跟矿主联系,矿主把要计算的哈希值的任务分配给矿工,矿工计算完后把结果返回给矿主,将来有出块奖励时一起参与分红
  4. 收益分配方式:如果矿池中的矿工来自不同机构,平均分配收益不可行,因为会出现 “吃大锅饭” 的情况,导致有的矿工不干活(挖矿需耗电交电费)。所以收益分配要按照每个矿工的贡献大小进行,即需要工作量证明具体做法是降低挖矿难度,原来要求矿工找到的数值(nonce)计算 block header 的哈希值前面至少有 70 个零才是合法的,现在降低难度,比如前面只要有 60 个零就行,这样挖到的叫做一个 share(almost valid block)。矿工挖到 share 后提交给矿主,矿主记录每个矿工提交的 share 数量,将来某个矿工真的挖到合法区块后,矿主再把出块奖励按照每个矿工提交的 share 数目进行分配。因为每个矿工挖到矿的概率取决于他尝试的 nonce数目,尝试的 nonce越多,找到的 share 就越多,所以可以用提交的 share 数目衡量其工作量
  5. 矿工行为分析:
    • 偷出块奖励:不可能出现某个矿工挖到合法区块后不提交给矿主而自己发布获取出块奖励的情况。因为每个矿工的任务由矿主分配,矿主负责组装好一个区块交给矿工尝试各种 nonce值,且 coinbase transaction(铸币交易) 里面收款人的地址填的是矿主的地址,所以矿工挖到区块后不提交给矿主自己无法发布,也取不出钱如果矿工自己组装区块并修改收款地址,提交的 share 矿主不认,因为交易列表改变,算出的 merkle root 哈希值也不一样,相当于该矿工自己单干,与矿池无关
    • 捣乱行为:存在矿工挖到合法区块后丢弃不提交的可能,这种行为损人不利己,因为本来挖到合法区块提交上去大家都能分红,自己也能得到一份,丢弃则谁也得不到。但由于矿池之间存在竞争关系,有可能某个矿池为打击竞争对手,故意派一些矿工加入到对方矿池中,采用这种丢弃合法区块的方法进行破坏,这些矿工仍参与分红(分的是别的矿工挖出来的出块奖励)。

五、矿池带来的问题

矿池使得 51% 攻击更容易,攻击者可隐藏算力,通过降低管理费吸引矿工,发动分叉攻击回滚交易或封锁特定账户交易。虽然目前算力分布看似不集中,但仍存在潜在风险。

这部分内容中老师主要从矿池导致攻击的可能性、算力分布的潜在风险以及矿池攻击的具体方式等方面,阐述了矿池带来的一系列问题,具体如下:

  1. 降低 51% 攻击门槛:矿池的存在使得发动 51% 的攻击更加容易。在没有矿池的情况下,攻击者要发动 51% 攻击,需自己投入大量硬件成本购买足够多的矿机,以达到系统中半数以上的算力。而有了矿池后,攻击者自身可能只占很少比例的算力,通过降低矿池管理费等手段吸引足够多不明真相的矿工加入自己的矿池,就能发动攻击。因为矿工转换矿池很容易,只需按照不同矿池的通讯协议与相应矿主联系,接受任务并计算哈希值即可。
  2. 算力分布的潜在风险:从统计数据来看,中国的矿池算力占比达到 81%,远超其他国家。在 2014 年,曾有 GHash.io 的矿池,其算力占到全球算力的一半以上,这足以发动 51% 的攻击,在当时引起了恐慌,后来该矿池主动大幅减少了算力占比。虽然目前的算力分布看起来没有那么集中,且该矿池已停止运营,但挖矿集中化程度仍然较高,几个大型矿池占据了相当大的比重。尽管没有哪个矿池的算力占比达到一半以上,但可能存在表面现象。假设某个机构拥有半数以上的算力,它可以将这些算力分散隐藏在很多个矿池中,平时分散状态下不易被察觉,而在真正需要发动攻击时再将算力集中起来。
  3. 常见的攻击方式:
    • 分叉攻击:当出现某个大额转账交易,如 A 转给 B 很多比特币,等了六个确认的区块后,B 认为交易已安全。此时 A 在前面发动一个分叉攻击,把钱转回给自己。攻击者要使分叉后的下面这条链成为最长合法链,虽然看似追赶的过程漫长,但如果攻击者拥有 51% 的算力,那么下面这条链的平均增长速度会比上面这条链快,最终会成为最长合法链,从而使 A 到 B 的转账交易被回滚。矿池中的矿工往往是不明真相的,他们只负责计算哈希值,并不知道网上有哪些交易、发布了什么区块,也不清楚分叉攻击和双花问题的存在。

  • 封锁交易(boycott):攻击者如果不喜欢某个账户(如 A 账户),怀疑其参与非法交易,想封锁该账户,使所有跟 A 账户相关的交易都不上链。此时攻击者可马上进行分叉,一旦有与 A 账户有关的交易上链就进行分叉操作。这种情况与为了回滚交易而进行的分叉攻击不同,不需要等待六个确认区块,因为其目的是阻止特定账户交易上链,希望别人沿着自己分叉后的链往下挖。即使系统中大部分算力掌握在诚实的矿工手里,也不能完全排除记账权落到坏人手里的可能性,因为这都是概率问题。当坏人拥有 51% 以上的算力时,他可能公开抵制特定交易,一旦出现就进行分叉,并利用半数以上的算力让分叉链变得更长,导致别人挖出来的区块可能白费。
  1. 无法直接转走他人钱财:攻击者即使掌握了半数以上的算力,也不可能把别人账户的钱转走,因为他没有别人账户的私钥,无法伪造签名。但攻击者算力很强时会造成分叉,因为诚实的矿工会沿着另外的一条分叉去挖,而不会沿着攻击者发布的区块往下挖,所以无法实现转走他人钱财的目的。

 相关文章:【BTC】比特币网络-CSDN博客
                   【BTC】比特币系统的具体实现_btc操作系统-CSDN博客 
                   【BTC】协议(共识机制)_btc协议-CSDN博客
                   【BTC】数据结构_比特币区块头数据结构-CSDN博客
                   【BTC】密码学原理-CSDN博客
                   【BTC】挖矿难度调整-CSDN博客

http://www.lryc.cn/news/608282.html

相关文章:

  • 优选算法 力扣1089.复写零 双指针 原地修改 C++解题思路 每日一题
  • Git 的基本使用指南(1)
  • Arpg第二章——流程逻辑
  • 自动驾驶中的传感器技术15——Camera(6)
  • 数字化转型驱动中小制造企业的质量管理升级
  • TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》
  • 【深度学习②】| DNN篇
  • 编译器与解释器:核心原理与工程实践
  • 基于Postman进行http的请求和响应
  • 操作系统:远程过程调用( Remote Procedure Call,RPC)
  • Jupyter notebook如何显示行号?
  • SQL Server从入门到项目实践(超值版)读书笔记 22
  • Spring事务失效场景
  • kotlin小记(1)
  • 集合框架(重点)
  • linux ext4缩容home,扩容根目录
  • 网络安全基础知识【6】
  • Ext系列文件系统
  • 【软考中级网络工程师】知识点之级联
  • 错误处理_IncompatibleKeys
  • 企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第6章 锁
  • 在linux(ubuntu)服务器上安装NTQQ并使用
  • junit中@InjectMocks作用详解
  • Redisson高并发实战:Netty IO线程免遭阻塞的守护指南
  • 零基础 “入坑” Java--- 十六、字符串String 异常
  • wxPython 实践(六)对话框
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要生成与智能检索优化进阶(377)
  • ARMv8/v9架构FAR_EL3寄存器介绍
  • 图漾AGV行业常用相机使用文档