酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(9):如何理解比特币矿池的工作原理?

买彩票的中奖几率是很小的,大部分人买一辈子彩票可能都中不了大奖。后来就出现了合买的方式,能够投更多的组合,相对来说提高了中奖的几率,也降低了风险。

比特币矿工加入矿池一起挖矿的模式,跟彩票合买的模式,其实是有点类似的。

挖矿的奖励是赢者通吃,抢到区块记账权的矿工能获得该区块的全部挖矿奖励。我们知道,比特币10分钟出一个区块,一天也就100来个区块,全世界有那么多矿工,对于单个矿工来说,用单独挖矿的方式,挖到矿的几率是很低的,有可能几年都挖不到一个区块。如果一直挖不到矿,那么风险是非常大的,毕竟机器需要更新、电费要交。

在这种情况下,矿池就应运而生。矿工加入矿池,大家一起挖矿,有钱一起分。虽然比起独享奖励分得少,但中奖的几率高了,能够有持续的收益运转下去。

但是,一起加入矿池挖矿,就涉及到利益的分配问题。
平分收益,肯定不可行。吃大锅饭的话,干多干少一个样,矿工干活没有动力,说不定会偷偷不干活,毕竟挖矿也需要电费。

具体该如何分配利益呢?这里同样是采用工作量证明的方法。

矿池把任务通过矿池的网络协议发给矿工。我们之前说过,挖矿的过程就是把区块头的几个字段拼起来取哈希,核心要素是调整nonce随机数,使得计算出来的哈希值小于目标值。在矿池分给矿工的任务里,矿工只需要找nonce随机数,其他字段都由矿池提供。矿工要找到的随机数,跟其他字段取哈希得到的值,可以比真正需要的目标值大,这样计算的难度就降低了。也就是说,矿工找到的这个哈希值,很有可能是超出真正的目标值范围的,也就是说,这个随机数对真正的挖矿是没有用的。但这个计算的过程,作为一种工作量证明,证明该矿工是实实在在的做挖矿的事情,并且完成了他的任务。

通过这样的方式,大部分矿工的计算过程难度降低,并且做计算的过程证明了他的工作量。当有其中一个矿工找到真正的随机数,矿池用这个随机数抢得记账权,获得区块的出块奖励。这个奖励按照矿工们的工作量证明进行分配。

这里有一个问题。挖到真正符合出块要求的随机数的矿工,会不会偷偷把这个随机数拿给自己用,自己打包数据发布到网络,把奖励独吞了呢?

这个是不可能实现的。因为,取哈希的区块头字段里面,有一个merkle_root_hash,是由该区块里面的交易数据构建的merkle树的根哈希值。每个区块的交易数据里,有一个特殊的交易,就是挖矿的奖励转账,这笔交易的收款地址,填的是矿池的地址。矿池不会把交易数据细节发给矿工,即使矿工知道了这些数据也没用,因为挖矿奖励的收款地址是矿池的,如果改了地址,最后取得的哈希值也变了。因此,矿工没办法独吞这个挖矿奖励,除非是自己构建交易数据,挖矿奖励收款地址填自己的,但这样的话就是自己单独挖矿了。

综上所述,矿池的工作原理就是矿池打包交易数据,将区块头里面除了nonce之外的字段确定下来,按照矿池通讯协议发给加入该矿池的矿工,矿工找一个随机数,跟其他字段一起取哈希,得到的哈希值可以比真正的目标值稍大一点。这个计算的过程,作为矿工参与矿池挖矿的工作证明。当矿池里某个矿工找到的随机数满足真正的出块目标值,矿池把数据打包发布到比特币网络,抢得记账权和获得奖励。奖励将按照工作量证明分配给矿工。

未经允许不得转载:酸饼 » 区块链入门100问(9):如何理解比特币矿池的工作原理?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼