1261 字
6 分钟
Priceton University BlockChain Note 5 挖矿二三事

矿工的工作#

矿工即通过打包区块来获取打包收益的节点,在比特币生态中扮演十分重要的角色,完成以下任务:

  1. 存储与广播区块链
  2. 验证新的交易
  3. 通过哈希计算进行共识投票(打包新区块)

在POF模式下,矿工需要按照特定的规则计算哈希,找到满足要求的nounce字段,来提供一个合法的区块,需要注意的是,在计算过程中可变的部分除了nounce之外,还有挖矿奖励交易中的一个变量——extra variable。通过便利extra variable与nounce的组合,计算嵌套的sha256哈希(两层),矿工将获得奖励。

需要额外注意的是,比特币协议按照全网算力动态变化难度,使得矿工的计算难度也随之变化,这样可以保证区块的生成速度在预期的10分钟左右。

挖矿设备#

随着全网算力的演进,挖矿设备也在不断的发展,经历了多个世代:

  1. CPU挖矿
  2. GPU挖矿
  3. FPGA挖矿
  4. ASIC挖矿

能源消耗#

按照兰道尔原理,任何不可逆计算都需要消耗kTln2每比特的能量,所以,计算哈希不可避免地需要消耗能量,这样看似无用的做工引起了环保人士的不满。

从上界的角度看,我们可以从矿工挖矿的收益计算;从下界角度看,我们可以以全网算力所对应的能耗来计算。但同时,我们应当记住,传统的支付系统也需要消耗许多能量——ATM的电耗、人工的消耗等等,这些消耗和比特币的消耗一样,都只是为了维持系统自身的运转。

矿池#

随着全网算力越来越高,独立矿工能够挖到矿的概率越来越小,而单个比特币的价值又非常之高,导致矿工的收入在数学期望上看满足矿工的需求,当时过度的方差却又导致了矿工的收入不稳定,这样的情况下,矿工们就会选择加入矿池,通过矿池的分配机制来提高收益。

矿池吸纳矿工为矿池挖矿,而后按照矿工的贡献分配收益。那么这里存在两个问题:

  1. 如何衡量贡献
  2. 如何分配收益

如何衡量贡献——份额#

矿池管理员首先打包区块,然后将计算任务分配给矿工,矿工计算出结果后,将结果提交给矿池。然而大多数矿工在都无法计算出区块(前n位为0的哈希),故矿池管理员设置难度较低的计算任务(前t位(t < n)),矿工每次计算出一个这样的哈希即为计算出了一个份额,最后按照份额进行利益分配。

收益分配方案#

  1. Pay per share:按照份额进行支付,无论矿池是否计算出区块
  2. Proprtional:计算出区块后再进行分成
  3. Luke-jr:矿工持续挖矿,直到其收益达到一个阈值再进行提现

矿池的存在,分摊了单个矿工的风险,但也使得算力集中化,乃至于矿池主可以借用矿工的算力发动一些攻击;而且由于仅需完成矿池的任务,矿工也就不再需要运行维护完整的区块链了,降低了区块链的稳定性。

挖矿策略与激励#

尽管大部分矿工挖矿时遵循默认的挖矿策略,但是我们还是要指出,事实上矿工在挖矿过程中面临相当多的决策:

  1. 选择交易
    • 默认行为:所有提供了最小交易费的交易
  2. 接续哪个区块
    • 默认行为:最长链
  3. 如何处理竞争区块
    • 默认行为:最初接收的块
  4. 何时广播区块
    • 默认行为:立即公布

因而存在许多攻击方案:

  1. 分叉攻击:利用50%以上的算力进行分叉,但是会导致区块链信用降低,一般只有区块链整体的敌对方才会进行。
    • 应对方式:检查点,防止太长的分叉
  2. 隐藏区块攻击:发现新区块后不立即公布,而是先进行下一个块的挖掘,抢占优势
    • 应对方式:该方式仅在优先两个区块的情况下才能稳定进行,否则都面临竞争风险,而优先两个块的成功率仅有所占算力比的平方,成功率较低
  3. 惩罚性分叉:针对某些类型的交易不予以接收
    • 应对方式:难以为继,容易陷入孤立块
  4. 轻量级攻击:用低于50%的算力发起攻击,使其他人承担攻击者算力平方的损失风险,从而改变其余人的倾向
Priceton University BlockChain Note 5 挖矿二三事
https://blog.logres.icu/posts/priceton-university-blockchain-note/priceton-university-blockchain-note-5/
作者
Logres
发布于
2022-11-27
许可协议
CC BY-NC-SA 4.0