深入比特币原理(十四)——矿池

作者 Aaron 发表于 2018-03-29 14:52:43

文章来源:华为云社区

原文地址:https://bbs.huaweicloud.com/blogs/113546

 

比特币挖矿的发展过程

比特币挖矿硬件总共经历了四次迭代:
2009年 CPU挖矿

深入比特币原理(十四)——矿池_第1张图片

(普通PC电脑)

 

2010年 GPU挖矿(显卡)

显卡GPU的并行能力远超CPU,对于简单的并行Hash计算相对CPU有巨大优势。

深入比特币原理(十四)——矿池_第2张图片

(显卡阵列)

2011年 可编程门阵列(FPGA)挖矿
比起GPU,FPGA的性能更胜一筹,单片哈希速度接近GH/s级别(每秒十亿),冷却也更容易。但是普通FPGA在连续超负荷条件下容易出现硬件错误、计算性能也没有指数级的飞跃,所以最后只是昙花一现

深入比特币原理(十四)——矿池_第3张图片

(八核FPGA矿机)

2013年 专用集成电路(ASIC)挖矿
ASIC矿机的出现使比特币挖矿速度出现指数级的提升,从此挖矿开始演变成需要大量资金投入的的大型工程。

深入比特币原理(十四)——矿池_第4张图片

(大型ASIC矿场)

由于比特币的价格每年不断的攀升和挖矿技术的提升,比特币挖矿的算力每年呈指数级增长。尤其在硬件技术出现迭代的时间更是突飞猛进,如下:

年份 年初算力 年末算力 增长
2009 0.5 MH/sec 8 MH/sec 16倍
2010 8 MH/sec 116 GH/sec 14500倍
2011 116 GH/sec 9 TH/sec 78倍
2012 9 TH/sec 23 TH/sec 2.5倍
2013 23 TH/sec 10 PH/sec 450倍
2014 10 PH/sec 300 PH/sec 30倍
2015 300 PH/sec 800 PH/sec 2.66倍
2016 800 PH/sec 2.5 EH/sec 3.12倍
2017 2.5 EH/sec 13.8EH/sec 5.5倍
2018 13.8EH/sec 24.8EH/sec  


从下图可以看到比特币从诞生以来挖矿难度的增长曲线

深入比特币原理(十四)——矿池_第5张图片

矿池(Mining Pool)
从上面的内容可以看到,比特币的算力一直处于高速增长中,这种增长使得独立矿工已经越来越难以获得收益,首先我们来计算一下:

深入比特币原理(十四)——矿池_第6张图片

上图是当今单台算力最强达到14TH/s的矿机(一台矿机几乎相当于2012年整个比特币网络的算力,ASIC矿机实力可见一斑),价格为1864 USD,以现在比特币全网24.8EH/s计算,挖出一个块的平均时间约为33年。
也就是说如果你投资12万元拥有10台这样的矿机,挖出一个块的平均时间也达到3.3年。而在你挖出比特币的这段时间里,算力还在不断增长,再过半年这个时间可能又会翻倍,且矿机可能还会损坏,购买10台矿机在几年时间里可能一无所获,对于独立矿工,挖矿具有极大的不确定性。

基于以上原因,矿池应运而生,矿池中可能有大型矿场的参与,也可能有独立矿工加入。矿池根据大家的算力贡献,平均分配挖矿所得的比特币,使得矿工获得收益的稳定性大大增加。

矿池的运作原理

  • 大部分矿池有矿池管理员的角色,矿池管理员至少与一个或多个全节点相连。

  • 矿池中的所有矿工通过矿池协议(如Stratum、GetBlockTemplate等)与矿池管理员连接。

  • 在每次算力竞赛前,矿池管理员会将交易打包成区块,并将自己的地址写入coinbase中,然后分发给矿池中的矿工。

  • 矿工们根据矿池管理员打包好的区块,不断尝试修改Nonce值以寻找满足难度要求的工作量证明。(详见《深入比特币原理(十一)》)

  • 管理员通过收取一定的手续费作为管理矿池的回报。


注:这种矿池模式下,不仅使矿工收益变得稳定,而且矿工不再需要维护全节点,也不需要维护各种内存数据,大大减轻了独立矿工的负担。

那么问题来了,矿池是如何分配收益的呢?
关键在于矿池协议中对矿池中矿工分配的难度实际与比特币整网的难度不一样,通常要低很多倍,降低的难度每个矿池可能不同,我们假设为1000倍进行举例:
如果挖矿难度降低1000倍,即使只有1台矿机,完成此难度的平均时间也仅为4天,假设4天内整个矿池完成这样难度的次数为10000次,那你就可以获得整个矿池1/10000的收益。
而矿池在降低难度后如何完成比特币网络的工作量证明呢?
虽然矿工的难度降低了,但是矿工会更频繁的完成工作量证明,由于比特币整网的工作量证明答案一定包含在矿工计算的低难度答案中,随着低难度答案数量的增加,总会有一个矿工计算的低难度结果正好符合比特币高难度的结果,使整个矿池获得比特币挖矿奖励。

注:以上描述的矿池,由于有一定的中心化特征,矿池管理员权利较大,所以引起了一定的争议,于是人们又发明了P2POOL,这是一种去中心化的矿池,但这种矿池由于技术和不便利,目前还没有大规模应用,有兴趣的朋友可以自行Google了解。

Extra Nonce
在《深入比特币原理(十一)》中我们描述了矿工通过不断改变区块头中的Nonce值来尝试完成工作量证明。但是从区块头的结构可知Nonce值长度为4 bytes,即32 bit,仅有42亿个不同的值可以尝试。
目前单台矿机的最高计算能力是14TH/s,即每秒可以计算约140000亿个值,所以原有的Nonce值的长度已经完全无法满足日益增长的Hash计算能力。
 

我们知道在比特币网络中,区块头的时间戳(Timestamp)字段是有一定的可浮动范围的,所以人们开始使用同样是4 bytes长度的时间戳来作为第二个变量,这样就把矿工可尝试的值从232提升到264。但实际上,虽然时间戳是可变的,却必须在一定的范围内,否则区块可能被其他节点拒绝,存在一定的局限性。
 

在矿池协议中,使用了一种新的扩展方法,即在coinbase data中添加一个Extra Nonce。在coinbase data中添加信息我们之前已多次提到过,这部分的信息绝大部分是可以自定义的,并且coinbase data会影响Merkle Root值,所以会影响整个区块头的Hash值。

Extra Nonce又被分为Extranonce1与Extranonce2

Extranonce1:由矿池管理员生成,同一个矿池中的矿工都有一个唯一的Extranonce1,这样同一个矿池的矿工们就不会进行重复劳动了。
Extranonce2:由矿工生成,矿工用于扩展计算空间的新Nonce值。
Extranonce2_size:由矿池管理员指定的Extranonce2的长度,如长度指定为4 bytes,那计算空间将由原来的232提升到264。

当前TOP10矿池算力分布

深入比特币原理(十四)——矿池_第7张图片

目前最大的矿池约占比特币总算力的26.5%左右,但TOP10的矿池占据了比特币95%的算力资源。比特币挖矿越来越规模化,也引来了人们对比特币矿工中心化和算力攻击的担忧。
早前曾经出现有单个矿池算力接近50%的情况,在比特币社区中引起了极大的担忧。但现在各大矿池都很自觉的保持在30%以下,似乎成了一种默认的“潜规则”。
关于矿池的详细信息可参考以下网址中的内容:
https://btc.com/


ASIC矿机的思考
ASIC矿机的出现,一定程度上违背了中本聪在白皮书中一CPU一票的想法,导致普通用户基本无法参与挖矿,如果只是购买少量矿机也收益甚微,而且ASIC矿机除了挖矿几乎没有其他用途。
于是人们开始探索抗ASIC的挖矿算法,比如最典型的内存依赖性算法,使内存成为计算瓶颈。
但是抗ASIC同样会带来新的问题,没有ASIC矿机的网络算力规模有限,在云计算高度发达的今天,完全可以通过短期租用大量云算力对区块链网络进行攻击,使得攻击成本大大降低,整个区块链网络的安全性将受到巨大的威胁。

所以对于如何挖矿,用什么挖矿的话题至今仍然争论不休,你是怎么看呢?
 

至此,比特币的基础内容已经完结,后面我们将对目前比特币最主要的扩容手段——隔离见证和闪电网络进行探讨。


本文部分内容参考知乎猫本聪:[block #6] 比特币挖矿与淘金

 

你可能感兴趣的:(区块链,比特币,区块链,比特币)