区块链技术与应用 - P08 - 比特币的挖矿

Posted by raftale on October 5, 2024

全节点和轻节点

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

如果只是想进行转账操作,轻节点就可以进行验证。 全节点用于挖矿,在挖矿过程中,如果监听到别人已经挖出了区块并在最长合法链上,此时应该在本地接受这个区块并重新开始挖矿。

比特币是如何保证安全的?

  1. 密码学的保证:私钥保证了无法伪造身份。
  2. 共识机制的保证:恶意交易不被系统承认。

挖矿设备

挖矿设备逐渐专业化,设备内部逐渐没有多余部件。

  1. CPU
  2. GPU
  3. ASIC: Application Specific Integrated Circuit

矿池

矿池的出现是因为单个矿机挖矿收益并不稳定。 加入矿池可以提高挖到区块的概率,并共享挖矿收益。

矿池有两种组织形式:

  1. 大型数据中心:一般是属于同一个机构,在同一个地方,没有信任问题。
  2. 分布式加入矿池:可以按照协议远程加入矿池,矿主分配任务,矿工进行计算。

利益分配

  1. 平均分配:有的矿工就不干活了
  2. 按贡献分配:按工作量分配。矿主设置一个低难度的挖矿,然后分配给矿工,矿工提交答案来作为工作量证明,矿主根据工作量来分配真正的挖矿收益。

问题:

  1. 会不会出现一个矿工挖到了区块然后自己偷偷提交出去?
    • 不可能,矿主分配任务,区块的地址是矿主的。
  2. 矿工有没有可能捣乱,挖到了区块但是扔掉了。
    • 有可能。竞争对手有这样的动机。

      缺点

矿池的缺点: 矿主并不一定自己要有大部分的算力,矿池可以吸引不明真相的算力来构成攻击。

占有51%算力的矿池能具体发动什么攻击?

  1. forking attack
  2. boycott: 抵制某些交易地址