深入理解比特币系列(19): 矿池

挖矿现在还赚钱吗一文中,我们看到,个人独立挖矿已经不再现实,他们找到一个区块以抵消电力和硬件成本的可能性非常小,即使是最快的消费型ASIC也不能和那些在巨大机房里拥有数万芯片并靠近水电站的商业矿池竞争。一种可行的方法是参加由数以千计的矿工们合作组成的矿池,贡献算力并分享挖矿奖励。

先来看一看比特币网络这些年的总算力变化:

2009: 0.5 MH/sec–8 MH/sec (16× growth)
2010:8 MH/sec–116 GH/sec (14,500× growth)
2011:16 GH/sec–9 TH/sec (562× growth)
2012:9 TH/sec–23 TH/sec (2.5× growth)
2013:23 TH/sec–10 PH/sec (450× growth)
2014:10 PH/sec–300 PH/sec (3000× growth)
2015:300 PH/sec-800 PH/sec (266× growth)
2016:800 PH/sec-2.5 EH/sec (312× growth))

NetworkHashingRate

伴随着网络算力的指数级增长,难度系数也随之相应变化:

BitcoinDifficulty

 

矿池

矿池通过专用挖矿协议(如STM或GBT)协调成百上千的矿工。个人矿工在建立矿池账号后,设置他们的矿机连接到矿池服务器。他们的挖矿设备在挖矿时保持和矿池服务器的连接,和其他矿工同步工作。这样,矿池中的矿工分享挖矿任务,之后分享奖励。

成功出块的奖励支付到矿池的比特币地址,而不是单个矿工的。一旦奖励达到一个特定的阈值,矿池服务器便会定期支付奖励到矿工的比特币地址。通常情况下,矿池服务器会为提供矿池服务收取一定百分比的费用。

矿池对任何矿工开放。一个矿池的参与者中,有人只有一台小矿机,而有些人有一车库高端挖矿硬件。有人只用几十度电挖矿,也有人会用一个数据中心消耗兆瓦级的电量。

矿池工作原理及利润分配

矿池衡量每个矿工贡献的方法是在设置一个较低难度的前提下,使用比特币的工作量证明算法来衡量每个矿工的贡献。通常矿池难度比比特币网络难度低1000倍以上,每当矿工发现一个小于矿池难度的区块哈希,就完成了一次贡献,并赚取了一个“份额”。当矿池中有人成功挖出一个区块时,矿池获得奖励,并和所有矿工按照他们做出贡献的“份额”数的比例进行分配。

以掷骰子游戏作比喻。如果骰子玩家的目标是扔骰子结果都小于4(整体网络难度),一个矿池可以设置一个更容易的目标,统计有多少次池中的玩家扔出的结果小于8。当池中的玩家扔出的结果小于8(矿池份额目标),他们得到份额,但他们没有赢得游戏,因为没有完成游戏目标(小于4)。但池中的玩家会更经常的达到较容易的矿池份额目标,规律地赚取他们的份额,尽管他们没有完成更难的赢得比赛的目标。

时不时地,池中的一个成员有可能会扔出一个小于4的结果,矿池获胜。然后,收益可以在池中玩家获得的份额基础上分配。尽管目标设置为8或更少并没有赢得游戏,但是这是一个衡量玩家们扔出的点数的公平方法,同时它偶尔会产生一个小于4的结果。

同样的,一个矿池会将矿池难度设置在保证一个单独的矿工能够频繁地找到一个符合矿池难度的区块哈希来赢取份额。时不时的,某次尝试会产生一个符合比特币网络目标的区块哈希,产生一个有效区块,然后整个矿池获胜。

托管矿池

大部分矿池是“托管的”,即有一个公司或者个人经营一个矿池服务器。矿池服务器的所有者叫矿池管理员,同时他从矿工的收入中收取一个百分比的费用。

矿池服务器运行专业软件以及协调池中矿工们活动的矿池采矿协议。矿池服务器同时也连接到一个或更多比特币完全节点并可直接访问区块链数据库的完整副本。这使得矿池服务器可以代替矿池中的矿工验证区块和交易,缓解他们运行一个完整节点的负担。对于池中的矿工,这是一个重要的考量,因为一个完整节点要求一个拥有最少100-150GB的永久储存空间(磁盘)和最少2GB到4GB内存(RAM)的专用计算机。

此外,运行一个完全节点的比特币软件需要监控、维护和频繁升级。由于缺乏维护或资源导致的任何宕机都会伤害到矿工的利润。对于很多矿工来说,不需要跑一个完全节点就能采矿,也是加入托管矿池的一大好处。

P2P矿池

托管矿池是中心化的,矿池管理人可以利用矿池进行双重支付或使区块无效。此外,中心化的矿池服务器代表着单点故障。如果因为DoS攻击导致服务器挂了或者减慢,池中矿工就不能采矿。在2011年,为了解决由中心化造成的这些问题,提出并实施了一个新的矿池挖矿方法。P2Pool是一个点对点的矿池,没有中心管理人。

P2Pool通过将矿池服务器的功能去中心化,实现一个并行的类似区块链的系统,名叫份额链(share chain)。一个份额链是一个难度低于比特币区块链的区块链系统。份额链允许池中矿工在一个去中心化的池中合作,以每30秒一个份额区块的速度在份额链上采矿,并获得份额。份额链上的区块记录了贡献工作的矿工的份额,并且继承了之前份额区块上的份额记录。当一个份额区块实现了比特币网络的难度目标时,它将被广播并包含到比特币的区块链上,并奖励所有已经在份额链区块中取得份额的池中矿工。本质上说,比起用一个矿池服务器记录矿工的份额和奖励,份额链允许所有矿工通过类似比特币区块链系统的去中心化的共识机制跟踪所有份额。

P2Pool采矿方式比在矿池中采矿要复杂的多,因为它要求矿工运行空间、内存、带宽充足的专用计算机来支持一个比特币的完整节点和P2Pool节点软件。P2Pool矿工连接他们的采矿硬件到本地P2Pool节点,它通过发送区块模板到矿机来模拟一个矿池服务器的功能。在P2Pool中,单独的矿工创建自己的候选区块,打包交易,非常类似于个人矿工,但是他们在份额链上合作采矿。P2Pool是一种比单独挖矿有更细粒度收入优势的混合方法。但是不需要像托管矿池那样给管理人太多权力。

最近,在中心化的矿池已经接近产生51%攻击的担忧下,P2Pool的份额增长显著。P2Pool协议的进一步发展有望去除对完整节点的需要,这将使去中心化采矿更容易。