北大肖臻老师《区块链技术与应用》系列课程学习笔记[5]BTC挖矿

目录

一、结点

1.全节点的职责

2.轻节点的职责

二、mining趋势

1.设备

2.大型矿池的出现

3.矿池的分布数据

4.矿池的危害

一、BTC节点

1.全节点的职责

(1)一直在线;

(2)在本地硬盘上维护完整的区块链信息;

(3)在内存中维护UTXO集合,以便快速检验交易的正确性;

(4)监听比特币网络上的交易信息,验证每个交易的合法性;

(5)决定哪些交易会被打包到区块里;

(6)监听别的矿工挖出的区块,验证其合法性:

        ①区块中的每个交易都要合法,其中包括铸币交易及其出块奖励有没有被篡改;

        ②发布的区块是否符合难度要求(通俗地说,就是检查Block Header取哈希值之后前面是否有足够多的0);检查Block Header里面难度目标阈值的设置是否正确;全节点需要根据比特币协议的要求,每两周调整的挖矿难度;

        ③检查区块是否在延伸最长合法链。

(7)挖矿:

        ①决定沿着哪条链挖下去?正常一般是沿着最长合法链;

        ②当出现等长分叉的时候选择哪个分叉?缺省情况是选择最先接收到的区块的分叉。

2.轻节点的职责

(1)不是一直在线;

(2)不用保存完整区块链,只要保存每个区块块头,需要保存的内容大小大小比全节点小的很多,即区块块头大小比整个区块大小小很多;

(3)不用保存全部交易,只需要保存和自己相关的交易;

(4)没法验证大多数交易的合法性,只能检验与自己相关的交易的合法性;

(5)无法检测比特币网络上发布的区块的正确性,因为无法检查区块中所包含的交易是否合法;

(6)可以验证挖矿的难度,因为挖矿时候计算哈希值只用到块头信息,这部分信息轻节点保留;

(7)只能检测哪个是最长链,不知道哪个是最长合法链,因为无法检测这条链上所包含的交易都是合法的,但是轻节点可以检查这条链上包含的区块都是符合挖矿难度要求的。

        BTC中大部分节点都是轻节点,如果只需要交易不需要挖矿的话,只需要用轻节点即可。

        挖矿过程中如果发现新发布了一个区块,应当立即停止挖矿,重新组装一系列合法交易组成的候选区块,在刚发布的区块后面继续挖矿。因为挖矿具有无记忆性(memoryless | progress free),所以无论是在刚刚的区块上继续挖,还是新组装一个区块继续挖,挖矿成功的概率是一样的。如果继续挖之前的区块,一方面这个刚发布的区块中的交易可能和刚刚在挖的那个区块有重复,另一个本质的原因就是候选区块的块头有指向前一个区块的哈希指针,而最新的区块已经变了,所以这个哈希指针也要跟着改变。比特币系统中的安全性由密码学保证以及由共识机制保证,即没有私钥就无法转走比特币。这个安全性得以保证的前提是系统中的大多数算力掌握在诚实节点手中。

二、挖矿的趋势

1.设备

        挖矿的设备越来越趋于专业化,CPU(通用计算)->GPU(通用并行计算)->ASIC(专门为挖矿设计的芯片)。ASIC即Application Specific Integrated Circuit,是专门为了挖矿设计的芯片,没有多余的电路,做不了其他事情,其性价比最高,而且为某一种加密货币设计的ASIC芯片只能挖这一种加密货币的矿,除非两个货币用同一个Mining Puzzle。ASIC芯片的研发周期长,风险较大。为了让通用计算机也能参与挖矿过程,抗ASIC芯片化,有些加密货币采用Alternative mining puzzle,以去对抗那些只为了解决特定mining puzzle而设计出来的ASIC矿机。

2.大型矿池的出现

        单个矿工即使用ASIC芯片,挖矿从平均收益上看是有利可图的,但是其收益是很不稳定的。我们之前了解过,比特币系统中的平均出块时间是10分钟,但是平均出块时间是相对于比特币系统中的所有矿工而言的。一个矿工用一个矿机挖出矿的时间可能要很久,而且单个矿工还需要承担除了挖矿之外还要承担全节点的其它责任。

        矿池将很多矿工组织起来,一般的架构就是一个矿主(Pool Manager)全节点去驱动很多矿机,一个矿主下属许多矿工,下属矿工只负责计算哈希值,全节点的其它职能只由矿主来承担,ASIC芯片只能用来计算哈希值,不能进行全节点的操作。有了收益以后再大家一起分配,矿池的出现有便于解决收益不稳定的问题。矿池一般有两种组织形式,一种是像大型计算中心那样,一个大的矿池里面有成千上万的矿机,这些矿机如果属于同一个机构的话,收益的分配就比较方便了。如果矿机来自不同机构,这时候矿工很可能分布在世界各地,只是都加入了这个矿池。矿工加入矿池只需要按照矿池规定的通讯协议和矿主联系,矿主将要计算的哈希值的任务分配给他,矿工计算好后将结果发给矿主,最终得到出块奖励后一起参与分红。

        如果矿工来自于不同机构,分红的时候显然显然不能按照平均分配的原则,这里就需要用到工作量证明。每个矿工单独挖矿之所以收益不稳定,是因为挖矿难度太大了,所以可以考虑矿池将挖矿的难度降下来。如,本来要求前面有70个0,现在矿池只要求前面有60个0,这样挖到的是一个share(Almost Valid Block),即这个区块差不多在一定程度上是符合难度要求的。矿工挖到这样的share之后提交给矿主,矿主做下记录,记录每个矿工提供过多少个这样的share,用来衡量矿工所做工作量的大小,即根据矿工提交share的个数来分红。

        矿工能否独吞奖励?每个矿工的任务是由矿主来分配的,矿主负责组装好区块,然后交给矿工去不断尝试nonce和CoinBase transaction中的extra nonce,有可能就是划分一下,然后分配给不同的矿工去做,而铸币交易CoinBase transaction中的收款人地址是矿主的地址,不是任何一个矿工的地址,所以如果矿工自己发布区块是不成立的。如果自己把铸币交易的地址改成自己的,然后去挖矿,这样提交上去的share矿主是不认可的,所以还是没有用。

        矿工能否捣乱?平时得到share的时候提交给矿主,做工作量证明,当真的挖到符合规定的nonce值的时候不提交,矿工是有可能这么做的。但是这么做对他没有任何经济上的好处,是一种损人不利己的。

3.矿池的分布数据

         矿池在各个国家的分布比例如下图2-1所示,各个矿池在2022年8月3日的算力分布情况如图2-2所示。

图2-1
图2-2

4.矿池的危害

        如果没有矿池,如果要发动51%攻击,攻击者要花费大量的硬件成本。有了矿池以后,矿池实际上将算力集中了起来,攻击者未必拥有很多算力,只要吸引大量的不明真相的群众将算力集中到自己的矿池就可以。

(1)分叉攻击

        假设某个矿池掌握了51%的算力,那么该矿池挖到区块的速度是比较快的,甚至可能比现在的最长合法链要快,那么就可能形成分叉攻击,回滚某部分交易。交易对矿工来说是不知道的,他们的算力可能被矿主利用产生分叉攻击,如下图2-3所示。

图2-3

(2)Boycott

        假设攻击者不喜欢某个账户A,他怀疑账户A参与非法交易,想要把账户A封锁掉,他不允许和A有关的所有交易上链。这时,如果有人发布了含有和A有关的交易的区块,他就马上进行分叉,产生一个不包含这些交易的区块,然后不必等候6个确认区块,立即发布到比特币网络上竞争最长合法链,如图2-3所示。

图2-4
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值