## 挖矿

### 原理与过程
了解比特币，最应该知道的一个概念就是“挖矿”，挖矿是参与维护比特币网络的节点，通过协助生成新区块来获取一定量新增的比特币。

当用户发布交易后，需要有人将交易进行确认，写到区块链中，形成新的区块。在一个互相不信任的系统中，该由谁来完成这件事情呢？比特币网络采用了“挖矿”的方式来解决这个问题。

目前，每 10 分钟左右生成一个不超过 1 MB 大小的区块（记录了这 10 分钟内发生的验证过的交易内容），串联到最长的链尾部，每个区块的成功提交者可以得到系统 12.5 个比特币的奖励（一定区块数后才能使用），以及用户附加到交易上的支付服务费用。

*注：每个区块的奖励一开始是 50 个比特币，每隔 21 万个区块自动减半，即 4 年时间，最终比特币总量稳定在 2100 万个。因此，比特币是一种通缩的货币。*

挖矿的具体过程为：参与者根据上一个区块的 hash 值，10 分钟内的验证过的交易内容，再加上自己猜测的一个随机数 X，让新区块的 hash 值小于比特币网络中给定的一个数。这个数越小，计算出来就越难。系统每隔两周（即经过 2016 个区块）会根据上一周期的挖矿时间来调整挖矿难度（通过调整限制数的大小），来调节生成区块的时间稳定在 10 分钟左右。为了避免震荡，每次调整的最大幅度为 4 倍。

为了挖到矿，参与处理区块的用户端往往需要付出大量的时间和计算力。算力一般以每秒进行多少次 hash 计算为单位，记为 h/s。

> 汇丰银行分析师 Anton Tonev 和 Davy Jose 表示，比特币区块链（通过挖矿）提供了一个局部的、迄今为止最优的解决方案：如何在分散的系统中验证信任。这就意味着，区块链本质上解决了传统依赖于第三方的问题，因为这个协议不止满足了中心化机构追踪交易的需求，还使得陌生人之间产生信任。区块链的技术和安全的过程使得陌生人之间在没有被信任的第三方时产生信任。


### 如何看待挖矿

2010 年左右，挖矿还是一个很有前途的行业。但是现在，建议还是不要考虑了，因为从概率上说，由于当前参与挖矿的计算力实在过于庞大（已经超出了大部分的超算中心），获得比特币的收益已经眼看要 cover 不住电费了。特别那些想着用云计算虚机来挖矿的想法，意义确实不大了。

从普通的 CPU（2009 年）、到后来的 GPU（2010 年） 和 FPGA（2011 年末）、到后来的 ASIC 矿机（2013 年初，目前单片算力已达每秒数百亿次 Hash 计算）、再到现在众多矿机联合组成矿池。短短数年间，比特币矿机的技术走完了过去几十年的集成电路技术进化历程，并且还颇有创新之处。确实是哪里有利益，哪里的技术就飞速发展！目前，矿机主要集中在中国大陆（超过一半的算力）和欧美，大家比拼的是一定计算性能情况下低电压和低功耗的电路设计。全网的算力已超过每秒 $$ 10 ^{18}$$ 次 Hash 计算。

很自然的，有人会想到，如果我有很强大的计算力，所有的块都是我算出来了，拒不承认别人的交易内容，那是不是就能破坏比特币网络。确实如此，基本上拿到 1/3 的计算力，比特币网络就存在被破坏的风险了；拿到 1/2，概率上就掌控整个网络了。但是这个将需要付出巨大的计算成本。

那么有没有办法防护呢？除了尽量避免计算力放到同一个组织手里，没太好的办法，这是目前 PoW（Proof of Work）的协议规定的。

也有人觉得为了算出一个块，大部分计算力（特别是没算出来的算力）其实都浪费了。有人提出用所谓的 PoS（Proof of Stake）和 DPoS，即大节点作为多个节点代理人的模式来节约计算力。那怎么选大节点？又容易导致“富则越富”问题。这其实就是完全民主 vs 选举人制度嘛。

个人认为，无论 PoW 还是 PoS，都无法解决所有问题。要从根本上解决，得引入随机代理人制度，通过算法在某段时间内只让部分节点参加计算，并且要发放一部分“普世奖励”给所有在线节点。
