天涯书库 > 区块链:技术驱动金融 > 5.4 矿池 >

5.4 矿池

设想一下作为单个矿工。假设你花了辛苦赚来的6 000美元买了一台全新闪亮的比特币矿机,你所期望的性能是平均每14个月会找到一个有效区块(在2015年早期一个区块的奖励价值在10 000美元)。

考虑到电费和其他运营成本,矿机的平均收入期望值应该是每个月400美元。如果可以确定每个月都能获得400美元,那么购买一台矿机是合理的投资。但是别忘了,挖矿是一个随机过程,你不知道什么时候可以发现下一个有效区块。在找到有效区块之前,什么都赚不到。

高方差

从矿工第一年能找到有效区块数的概率分布上看,这个分布差异是很大的,期望值(也就是第一年能找到区块的平均数)是相当的低。因为发现区块的比率是一个很低的固定值,并且这个值和你上次发现一个有效区块所花费的时间完全没有关系,因而总的发现区块的期望值是以柏松概率分布[1]。柏松分布是指,如果有N个独立事件,每个事件成功的概率是λ/N,当N接近于无限大的时候的成功概率分布。比特币挖矿中,尝试每一个临时随机数的行为实际上就是一种超小成功概率事件,所以即使对于小矿工来说,N的值也确实很大,这种近似类比是很合适的。

如果你期望每14个月找到一个有效区块(根据泊松分布可知λ=6/7个有效区块/每年),则有超过40%的概率在第一年你不会找到任何有效区块。对于个体矿工来说,这可能是灾难性的。你在一个矿机上花费了数千美元,并且支付了很多电费来运行,结果什么都没有获得。第一年能获取一个有效区块奖励的概率大概是36%,这也就意味着即使你的电费不高,你也就可能刚刚够支付电费。当然也有很小的概率可能会发现两个甚至更多的有效区块,这种情况下才有可能真的赚钱。详见图5.11。

图5.11 挖矿成功的不确定性

注:假设全网哈希算力是不变的,平均发现一个区块的事件是14个月,对于一个小矿工来说这个成功概率的波动太大了。

这些数字只是一个近似估算,但主要的意思是,即使挖矿从期望值来说是合理的,也就是说,投资有足够的回报,但由于方差足够大以至于会有很大的概率什么都得不到。对于一个小矿工来说,这也就意味着挖矿就是一个赌博游戏。

矿池

历史上当小商人遇到大风险的时候,他们会自发组建一个互助保险公司来降低风险。比如,农夫会自发地聚在一起形成一个协议,如果任何一个个体农夫的谷仓不小心被烧掉了,那么其他的农夫可以把他们的利润拿来和这个不幸的农夫分享。那么对于比特币的小矿工是否也可以用类似的方式来降低风险呢?

矿池应运而生——矿池就是一个比特币矿工互相之间的保险。一组矿工可以形成一个矿池共同进行挖矿,并指定一个币基接受人。这个接受人就是矿池管理员。所以不管是谁最终发现了一个有效区块,矿池管理员将会收到这个区块的奖励,继而根据每个参与者所贡献的工作量按比例分配给所有矿池的参与者。当然,矿池管理员可能从中分一部分来作为矿池管理服务的收入。

假定每个人都信任这个矿池管理员,这样的分配安排可以极大地降低矿工成功寻找有效区块的概率波动。但是矿池管理员如何知道矿池里每个成员实际上到底贡献了多少工作量呢?同时他又是如何去分发收入的呢?很显然,矿池管理员不希望是靠每个成员的申明,因为他们可能会虚报自己的工作量。

挖矿工分

对于这个问题,我们有一个简洁的解决办法。矿工可以通过输出挖矿工分(mining shares)来证明他的工作量,工分就是那些接近有效区块的区块。比如目标值是个前面67位是零的数字,输出的哈希值必须要低于这个目标才算有效。在寻找这个哈希值的过程中,矿工可能找到其他一些区块,它们的哈希也有许多零,但达不到67个。矿工可以用这些区块来证明他们确实在工作(见图5.12),一个合格的工分可能要求40~50个零,取决于矿工所加入的矿池的要求。

图5.12 挖矿工分

注:矿工不断尝试去发现哈希值低于目标区域的有效区块。在这个过程中他们会发现一些区块的函数值比目标值少了几个0——但是已经是非常稀有的,这证明了他们确实在进行繁重的运算工作。在这个图中,浅色阴影的哈希值就代表工分,深色阴影部分是有效区块的哈希值。

矿池管理员也会作为参与者之一运行比特币节点,收集交易并组装区块。他会把他自己的接收地址放在币基交易里,然后把这个区块发给所有矿池里的矿工们。矿工们收到后会在这块上面开始挖矿,最后递交工分来证明他们确实进行了运算工作。

当矿池一个成员找到了一个有效区块,他会把这块发给矿池管理员,然后管理员会根据大家的工作量按比例分配奖励。发现这个有效区块的矿工并不会因此获得特别奖励,所以如果其他矿工的工作量更大,那么其他矿工就会获得更多的奖励,即使他们并不是真正发现有效区块的人。如图5.13。

图5.13 挖矿奖励

注:图上三个矿工在同一区块上挖矿。他们最后的奖励是根据他们工作量的大小来决定的。即使是右边那个矿工找到了有效区块,但左边那个获得了更多的奖励,因为他的工作量更大。找到有效区块的矿工并没有收到特别奖励。

矿池管理员如何分配奖励的方案有好几种,我们将会探讨一下最常见也是最简单的两种,也有其他一些方案被不同的矿池使用,但这两种基本上可以解释奖励方案之间的权衡选择。

工分分红

在这个模式里,管理员会对每一个超过特定区块难度的工分发放固定的奖励分红。在这个模式里,矿工在发送工分之后,管理员马上就会对其支付奖励,而不需要等到整个矿池发现一个有效区块。

从某些方面来说,工分分红的模式对矿工是最有利的,他们可以确保每次发现一个工分的时候都有一定的收入,而管理员其实担当了所有的风险,因为无论矿工是否找到有效区块,他都必须按照工分支付奖励。当然,和其他模式相比,因为风险的增加,管理员也会收取更高的管理费用。

这个模式的问题是,矿工没有动力把有效区块提交给管理员。也就是说,即使把有效区块丢弃了,他们也会得到同样的奖励,但对整个矿池来说是个巨大的损失。一个恶意的管理员可以作为矿工参与另外一个矿池,用这个方法攻击另一个竞争对手,让他的矿池无法维持下去。

按实际比列分红

在这个模式里,不是按照工分分发固定分红,每个工分所能得到的分红,取决于整个矿池是否可以找到一个有效区块。每次找到一个有效区块,区块奖励(25个比特币再加上交易费)会按照每个矿工的实际工作量按比例分配。

在这个模式里,矿工仍然会承担与矿池风险成一定比例的风险。但是如果矿池足够大,发现有效区块的概率波动会相当低。按实际比例分配的模式大大降低了矿池管理员的风险,因为只有矿池发现有效区块的时候才会支付矿工奖励。这也解决了工分分红模式的问题,矿工有动力把有效区块提交给管理员,因为只有那样他们的奖励才会被相应发放。

相比工分分红模式,这个模式略微增加了管理员的工作量,他要校验、计算和分配奖励。

矿池跳换

即使只有这两种矿池运营模式,我们可以看到矿工有动力去时不时地进行矿池跳换(pool hopping)。比如,一个按实际比例运行的矿池很快发现有效区块时,不管有效区块被发现的间隔是多久,管理员都会快速支付矿工奖励。

一个聪明的矿工可能尝试在挖矿周期的早期(也就是上一个区块刚刚被发现),在按实际比例分红的矿池中挖矿,这个时候的奖励可能相对比较高,然后只在周期的后期切换(“跳”)到一个工分分红模式的矿池,这个时候按实际比例分红的矿池收益可能相对较低。这样导致的结果就是按比例分配的矿池可能无法运行。实际上更加复杂的方案可以防止这种矿工行为,比如“根据最近N个工分提交的结果才分配”是比较平常的做法,但即使这些方案也有可能诱发矿工跳换的行为。如何设计一个矿池方案以使其更好地防止这种行为,仍旧是一个有待解决的问题。

历史和标准化

矿池兴起于2010年比特币的GPU时代,并迅速变得十分受欢迎。道理很简单,因为它降低了矿工的概率波动风险。时至今日,矿池已经发展得十分先进。已经有很多矿池管理协议应运而生,甚至有人建议这些矿池管理协议应该被标准化,并且作为比特币本身的一部分。就像比特币的点对点网络协议一样,这些矿池协议也提供了一种特定的通信应用程序编程接口(Application Programming Interface,简称API),用于矿池管理员与每个矿工交流分派工作和矿工们递交工分给管理员。获取有效区块模版(getblocktemplate,简称GBT)就作为一种标准化的矿池协议放进了比特币改进方案(Bitcoin Improvement Proposal,简称BIP)之中。一种被称为层(stratum)的竞争协议,目前在实际中运用很广泛,就是一份BIP。不像比特币本身的协议,从事存在多个互不兼容的矿池协议没有造成太多的不便。每个矿池可以选择它们喜欢的协议,然后让市场来判定孰优孰劣。

有些挖矿机甚至把这些协定放进了硬件,但这最终会对限制这些矿机的灵活性有所限制。然而这使得购买矿机加入矿池变得异常简单。只需要把矿机插上电并连接上网络,选择一个矿池,然后这个矿机立刻就会接受该矿池的指令开始挖矿,并把电力消耗转变成收益。

51%的矿池

2015年早期的时候,绝大部分矿工都通过加入矿池来挖矿,只有很少的矿工还在单独挖矿。而在2014年6月,网络里最大的矿池GHash.IO,曾经变得如此巨大,其算力甚至超过了比特币全网算力的50%。主要是因为这个矿池给矿工优厚的奖励,以至于大家都想加入。

图5.14 (a)矿池的算力分布

资料来源:blockchain.info(2014年6月)

图5.14 (b)矿池的算力分布

资料来源:blockchain.info(2014年8月)

图5.14 (c)矿池的算力分布

资料来源:blockchain.info(2015年4月)

但这也是比特币社区一直所担心的,也导致了对GHash的反击。到了8月,GHash不再接受新用户而主动下调了一些比例。即便如此,两个矿池依然掌控了整个网络一半左右的算力。

到了2015年4月,形势改变了许多,至少从表面上来看变得不是那么集中。但一个矿池掌控51%的算力依然是社区里一个令人担忧的问题。然而GHash遭受的负面的公众效应让很多矿池意识到这个问题,并尽量避免增长得过大。随着新的矿工加入市场,标准化的协议使得矿池之间的切换更加容易,矿池的市场份额一直在变动。矿池在长期如何发展,目前还不明朗。

无论如何,矿池有可能会掩盖这样一个事实:实际上的算力集中在几个大的挖矿机构手上,这些大的机构可以同时参与多个不同的矿池以掩盖它们的真实规模。这种做法被称为“洗算力”(laundering hashes,类似于洗钱)。因为矿池的原因,发现洗算力变得非常困难,这也使得外人无法知晓矿机的实际物理控制有多么集中。

矿池是有益的吗

矿池的好处在于矿工挖矿变得更加容易预测,也让小矿工更加容易参与。如果没有矿池的存在,挖矿效益上的概率波动会让小矿工承受不起。

矿池另外的一个好处在于,每一个矿池都有一个中心化的矿池管理员在网络中组装区块,所以网络更新变得更加容易。只要更新管理员的软件,即可更新所有矿池成员的软件。

当然矿池的一大问题是中心化管理。矿池管理员实际掌握了多大的算力是一个问题。当然,理论上一个矿工如果觉得管理员权力太大,可以自由地选择离开,但实际中有多少矿工会这样做还不清楚。

另一个坏处是减少了比特币网络上校验全部交易节点的数量(全节点)。以前,无论大小,所有矿工都必须自己运行一个全节点。他们要存储整个区块链,并校验每个交易。现在他们把这项工作交给了矿池管理员。这也是我们在第3章中提到的:整个网络中进行校验交易的全节点的数目在下降。

如果你对矿池的中心化模式感到不安的话,你可能会问:我们是否可以重新设计挖矿的流程,这样我们就不需要任何矿池,大家必须自己进行挖矿。我们会在第8章中探讨这个问题。

[1] 柏松是18世纪法国数学家,概率学奠基人之一,柏松分布被广泛用于各个领域的概率分析。——译者注