《区块链技术与应用》笔记(六)挖矿

全节点和轻节点的区别

全节点 轻节点
一直在线 不是一直在线
在本地硬盘上维护完整区块链信息 不保存整个区块链,只需要保存每隔区块块头
在内存中维护UTXO集合,以便于快速检验交易合法性 不保存全部交易,只保存和自己有关的交易
监听比特币网络中交易内容,验证每个交易合法性 无法验证大多数交易合法性,只能检验和自己相关的交易合法性
决定哪些交易会打包到区块中 无法检测网上发布的区块正确性
监听其他矿工挖出的区块,验证其合法性 可以验证挖矿难度
挖矿:1.决定沿着哪条链挖下去。2.当出现等长分叉,选择哪一个分叉 只能检测哪个是最长链,不知道哪个是最长合法链

监听其他矿工挖出的区块时:

  1. 区块中的每个交易都要合法,包括铸币奖励
  2. 发布的区块是否符合难度要求,检验block hader 计算出来的hash值前面由足够多的0
  3. block hader里难度目标阈值设置是否正确

在比特币网络中,大多数节点都是轻节点。如果只是想进行转账操作,不需要挖矿,就无需运行一个全节点。在挖矿过程中,如果监听到别人已经挖出区块延申了最长合法链,此时应该立刻放弃当前区块,在本地重新组装一个指向最后这个新合法区块的候选区块,重新开始挖。由于挖矿本身具备无记忆性,所以不论前面挖多久,对后续的挖矿没有影响

比特币安全性保证:
密码学保证:别人没有自己的私钥,无法伪造其合法签名(前提:系统大多数算力为好的)
共识机制:保证恶意交易不被系统承认

挖矿设备

目前,挖矿设备逐渐趋于专业化,其经历了三个过程,总体趋势从通用到越来越专用。
普通CPU -> GPU ->ASIC芯片(挖矿专用矿机)
挖矿的本质是计算,对于PC来说,挖矿时只有CPU内一小部分指令在运作,其他硬件基本都在闲置,所以普通PC挖矿根本不划算,因此转入第二代挖矿:GPU。效率是提升了很多,但仍然存在一定的浪费,如浮点数运算部件,挖矿只有整数操作,其他部件根本不会用到。 所以进化到第三种设备:ASIC芯片,专为挖矿设计的芯片,这种芯片设计流程长,BTC价格不稳定,前期投入可能血本无归,因此需要提前预定。如果BTC系统中算例突然猛烈增加,那么一般是大厂商生产出了新的ASIC矿机。ASIC芯片只能用于挖矿,一旦其过时,便完全作废。

思考:ASIC芯片的出现是好事吗?
ASIC芯片并不是普通人可以参与的,一定程度上提升了挖矿的门槛,违背了比特币系统去中心化的初衷。理想状态下,所有人用CPU挖矿,这样只要有一台家用计算机便可以参与挖矿。当然,后续有一些货币便考虑到了这个问题,设计了抗ASIC芯片化的解决方案,
但反过来想,如果大家都用ASIC矿机挖矿,如果有人想要颠覆BTC系统,必然会导致BTC价格跳水,从而导致其所购买ASIC矿机作废,投入成本血本无归。所以,很多人反倒认为ASIC芯片出现,一定程度上并不是坏事。

大型矿池

挖矿另一个趋势便是大型矿池的出现。对于单个矿工来说,即使使用了ASIC矿机,其算力在整个系统中仍然只占据很少一部分,即使从平均收益看有利可图,但收入很不稳定。
此外,单个矿工除挖矿还要承担全节点其他责任,造成了算力的消耗

为了解决这些问题,便引入了矿池的概念。矿池的架构如下图,通常是一个全节点驱动多台矿机。矿工只需要不停计算哈希值,而全节点其他职责由矿主来承担。ASIC芯片只能计算哈希值,不能实现全节点其他功能。此外,矿池出现解决了单个矿工收益不稳定的问题。当获得收益后,所有矿工对收益进行分配,从而保证了收益的稳定性。
矿池
矿池一般具有两种组织形式:

  1. 类似大型数据中心(同一机构),集中成千上万矿机进行哈希计算。
  2. 分布式。矿工与矿主不认识(不同机构),矿工与矿主联系,自愿加入其矿池,矿主分配任务,矿工进行计算,获得收益后整个矿池中所有矿工进行利益分配。

矿池利益分配

假使第二种情况,矿工来源于五湖四海(非同一机构),收益应该如何分配?

  1. 平均分配,所有人平分出块奖励。

这种吃大锅饭似的机制可能会导致某些矿工懈怠,不干活(挖矿要费电,需要成本)。所以,这里也需要进行按劳分配,需要一个工作量证明的方案

  1. 降低挖矿难度(可行)
    假设原本挖矿难度要求,计算所得126位的哈希值前70位都必须为0,现在降低要求,只需要前60位为0,这样挖矿会更容易挖到。但这种hash被称为share,share不会被系统承认,它只能证明矿工的工作量证明,等某个矿工真正挖到符合要求的的区块后,根据所有矿工提交的share数量进行分配。因为每个矿工尝试的nonce越多,挖到矿的可能性越大,所能得到的share也会越多,所以这种方案作为工作量证明方案是可行的

矿池中的一些恶意事件

  • 矿工平时提交share,挖到矿之后不提交给矿主自己偷偷发布出去,避免被别人评分奖励
    不可能。每个矿工的任务都是矿主分配的,矿主组装区块会将一个范围内的nonce交给矿工计算,区块中铸币交易的收款人地址是矿主,如果矿工修改该地址,计算的nonce值也会作废
  • 矿工最开始就自己组装区块,自己挖矿
    那么该矿工就脱离了矿池,提交的share不会被认可,得不到分配的收益
  • 矿工捣乱,平时提交share,挖到区块后扔掉
    是可行的,对本身没有利益,损人不利已的事,一般存在于矿池之间的恶意竞争,打击对手

51%算力矿池

矿池本身对BTC系统带来了较大威胁。某个恶意用户如果想发动攻击,以前需要自己达到51%算力,现在自己只需要作为矿主,只需要很少一部分算力就可以了。只要能够吸引到足够多的不明真相的矿工,便可以用较低成本实现51攻击

  • 分叉攻击
    对已经经过6次确认的交易分叉,利用51%算力将交易记录回滚。矿工只会计算hash值,并不清楚某个区块包含那些交易,区块链状况是什么,因此容易被利用

  • 封锁交易
    假如攻击者不喜欢某个账户A,不想让A的交易上区块链,在监听到有其他人将A的交易发布到区块链上时,立刻发动分叉攻击,使A所在链无法成为”最长合法链“。这样,便实现了对A账户的封锁。

  • 盗币
    是不可能的,由于没有别人的账户私钥。如果依仗算力强,强行将没有签名的转账发布到区块链,正常节点不会认为其合法,这样,即使这条链再长,其他人也不会认为其是最长合法链

矿池的优劣

  • 优点:解决了矿工收入不稳定的问题,减轻了矿工的负担。
  • 缺点:威胁到了区块链系统的安全,使得51%攻击变得容易起来(s)。
posted @ 2022-05-04 21:18  我永远喜欢石原里美  阅读(423)  评论(0编辑  收藏  举报