5.4采矿池

考虑成为一个小矿工的经济学。假设你是一个花费6000美元的辛苦钱购买一个漂亮而有光泽的新比特币矿机的人。说你的表现是这样的,你希望每14个月找到一个区块(记住2015年初,一个区块价值约6500美元)。

摊销后,如果你考虑到电力和其他运营成本,你的矿工的预期收入可能是每月400美元。如果你每个月实际收到一张400美元的支票,那么购买矿机就很有意义了。但请记住,采矿是一个随机过程。你不知道什么时候你会找到下一个区块,直到那时你什么也赚不到。

高方差。如果我们看一下在第一年可能找到的区块数量的分布情况,那么这个方差是相当高的,预期的数量是相当低的。因为你发现一个固定的低速率的区块,它与你发现的最后一个区块之后的时间无关,所以你预期的区块数很接近泊松分布。如果您有N次独立试验,每次都有λ/ N成功的机会,N接近无穷大,则会出现泊松分布。使用比特币挖矿,每个单独的随机尝试实际上是一个随机试验,成功的机会很小,所以对于小矿工而言,N确实非常大,近似值非常好。

如果你预计每14个月会发现约1个区块(λ= 6/7块/年的泊松分布),那么在第一年内你无法找到任何区块的机会大于40%。对于一个矿工来说,这可能是毁灭性的。你在矿工上花费了数千美元,付出了很多的电力来运行,没有收到任何回报。大概有36%的机会在第一年内找到一个区块,这意味着只要你的电费不算太高,也许你就能勉强度日。最后,有一个较小的机会,你会发现两个或两个以上的区块,在这种情况下,你可能会有一个很好的利润。

图5.11:采矿不确定性的图示。假设全局哈希率是恒定的,找到区块的平均时间为14个月,小矿工的方差相当高。

这些数字只是近似值,但这里的主要观点是,即使期望上你可能会做得好——也就是说,你的投资赚取足够的回报——方差足够高,所以又很大的机会,你根本不会做任何事情。对于一个小矿工,这意味着采矿是一个重大的赌博。

采矿池。历史上,当小企业面临很大的风险时,他们组建了互保公司降低风险。例如,农民会聚在一起,同意如果任何一个农民的谷仓烧毁别人,就会与这个农民分享利润。我们可以有一个适合小比特币矿工的互助保险模式吗?

一个采矿池就是比特币矿工的互相保险。一群矿工将组成一个采矿池,并尝试用指定的coinbase收件人挖掘一个区块。该接收者称为池管理器。所以,无论谁实际找到这个区块,池管理器都会收到奖励。池管理者将根据每个参与者实际执行的工作量,将收入分配给池中的所有参与者。当然,池管理器也可能会采取一些削减,为他们的管理池的服务。

假设每个人都信任池管理器,这对于降低矿工的差异非常有效。但是,池管理器如何知道池中每个成员实际执行多少工作呢?池管理器如何将收入与每个矿工的工作量相称?显然,池管理器不想仅仅因为每个人都说他们做了比他们实际做得更多的事,而接受每个人的话。

矿业股。这是一个优雅的解决方案。矿工可以通过输出股票或接近有效的区块来概述证明他们正在做多少工作。说目标是一个以67个零开头的数字。区块的哈希值必须低于该区块有效的目标。在寻找这样一个区块的过程中,矿工们会发现一些以很多零开始的哈希的区块,但没有67个。矿工可以显示这些几乎有效的块,以证明它们确实有效。一个份额可能需要说40或50个零,这取决于矿池所针对的矿工的类型。

图5.12:采矿股份。矿工们不断尝试在目标下方找到一个哈希区块。在这个过程中,他们会找到其他区块,其哈希的零包含较少的零,但仍然很少能够证明它们已经在努力。在这个图中,暗淡的绿色哈希是股票,而明亮的绿色哈希来自有效的区块(也是有效的股份)。

池管理员还将代表参与者运行比特币节点,收集交易并将其组装成区块。经理将在硬币交易中包含自己的地址,并将区块发送给池中的所有参与者。所有的池参与者都在这个区块上工作,他们证明他们一直在通过发送股份来处理它。

当池中的成员找到有效块时,它们将其发送给池管理器,该管理器按工作量分配报酬。事实上,发现区块的矿工没有得到特别奖金,因此如果一个矿工做的工作比另一个矿工多,其他矿工也会得到更多的报酬,即使他们没有找到一个有效的区块。见图5.13。

图5.13:采矿奖励。这里的三个参与者都在同一个程序上工作。它们与完成的工作量相称。尽管右边的矿工是找到有效区块的矿工,但由于左边的矿工做了更多的工作,所以这个矿工得到了更多的工资。(通常)没有奖金给实际找到区块的矿工。

有几个选项可以准确地说明池管理者根据他们提交的份额来计算每个矿工的支付金额。我们将看看两个常见的,更简单的。还有许多其他方案也被使用,但这些将会说明奖励计划之间的权衡。

每股付费模式。在每股付费模式中,池管理员为池中正在进行某个特定难度的区块的每个股票支付一个固定的费用。在这种模式下,矿工可以立即将他们的股份发送给池管理员,并且得到支付而不用等待采矿池找到一个区块。

在某些方面,每股付费模式对矿工而言是最好的。每次他们找到一份份额时,都会保证一定数量的钱。池管理员基本上可以吸收所有的风险,因为即使没有发现一个区块,他们也会付出回报。当然,由于风险增加,与其他模式相比,在每股付费模式中,池管理者可能会收取较高的费用。

每股付费模式的一个问题是,矿工实际上并没有任何动机向池管理员发送有效的区块。也就是说,他们可以丢弃有效的区块,但仍然会收到相同的奖励,这将对池造成很大的损失。一个恶意的池管理器可能会以这种方式攻击一个竞争的池,试图驱使它们停产。

比例模型。在比例模型中,而不是每股支付固定费用,支付金额取决于池是否实际找到一个有效的区块。每次发现一个有效的区块时,该区块的奖励将分配给与其实际工作成正比的成员。

在比例模型中,矿工一定程度上仍然承担与池的风险成比例的风险。但是,如果池足够大,则池找到区块的频率将相当低。比例支付为池管理者提供较低的风险,因为它们只在找到有效区块时支付。这也解决了我们提到的每股付费模式的问题,矿工被激励发送他们发现的有效区块,因为这会导致收入回报给他们。

与扁平的每股付费模式相比,比例模式需要代表池管理员进行更多的工作,以验证、计算和分发奖励。

矿池跳跃。即使只有这两类矿池,我们可以看到,矿工可能引发在不同时期之间的池开关。要看到这一点,考虑到如果一个块被快速发现,那么一个纯粹的比例池将有效地支付更多的份额,因为它总是支付一个区块的奖励,无论自从上一个区块被发现以来已经有多长时间了。

一个聪明的矿工可能会在周期初期(就在之前的区块被发现之后)尝试在比例池中进行采矿,每股收益相对较高,在周期之后,比例池中的采矿预期回报相对较低的情况下,只能将模式转换(“hop”)为每股付费。因此,比例池并不真正实用。更复杂的方案,如“最后一次提交的N股支付”更为常见,但即使这些计划也受到微妙的池跳跃行为的制约。如何设计一种不容易受到这种操纵的采矿池奖励计划仍然是开放的。

历史与标准化。采矿池首先开始于2010年左右的比特币矿业的GPU时代。他们立即变得非常受欢迎,原因很明显,他们降低了参与矿工的差异。他们现在已经变得非常先进。有许多关于如何运行采矿池的协议,甚至建议将这些采矿池协议标准化为Bitcoin本身的一部分。就像用于运行对等网络的比特币协议一样,采矿池协议提供了一个通信API,让池管理员发送所有成员对区块的细节进行工作,并让矿工将他们发现的股票送回到池管理员。getblocktemplate(GBT)正式标准化为比特币改进提案(BIP)。竞争协议Stratum目前在实践中更受欢迎,是一种提议的BIP。与比特币协议本身不同,拥有多个不兼容的采矿池协议只是一个小麻烦。每个池都可以选择他们喜欢的任何协议,这由市场来决定。

一些采矿硬件甚至在硬件层面支持这些协议,这将最终限制其开发的灵活性。然而,这使得购买一块采矿硬件并加入一个池很简单。你只需将其插入墙壁——电力和网络连接——选择一个游泳池,然后立即开始从池中获取指令,挖掘电力并将其转换为金钱。

51%采矿池。截至2015年初,绝大多数矿工都是通过非常少的采矿“独奏”的采矿池进行采矿。2014年6月,最大的采矿池Ghash.io如此之大,实际上比Bitcoin网络的整个容量的50%还要大。Ghash基本上为参与的大多数希望参与的矿工提供了一个很好的选择。

这就是人们担心很长一段时间的事,这导致了对Ghash的反弹。到八月份,Ghash的市场份额由于设计停止接受新参与者而下降。然而,两个采矿池控制了网络中大约一半的电力。

图5.14(a)采矿池的哈希功率,通过blockchain.info(2014年6月)

图5.14(b)采矿池的哈希功率,通过blockchain.info(2014年8月)

图5.14(c)采矿池的哈希功率,通过blockchain.info(2015年4月)

到2015年4月为止,情况看起来非常不同,而且集中程度较低,至少在表面上是如此。一个池获得51%的可能性仍然是社区关注的问题,但是自从收到GHash负面消息,已经导致采矿池避免变得太大。随着新的矿工和池进入市场,标准化协议增加了矿工池之间切换的易用性,不同池的市场份额仍然相当流畅。从长远来看,事情将会如何演变还有待观察。

然而,值得注意的是,采矿池可能会将几个大型矿业组织的实际集中采矿权力隐藏起来,这些矿业组织可以同时参与多个采矿池,以隐藏其真实大小。这种做法被称为洗钱的哈希值。目前还不清楚采矿设备的实际物理控制是多么集中,采矿池使得从外部确定这一点相当困难。

采矿池是一件好事吗?采矿池的优点在于,它们使得采矿对于参与者而言更加可预测,并且使小型矿工更容易参与到游戏中。没有采矿池,方差将使许多小矿工的采矿不可行。

采矿池的另一个优点是,由于有一个中央池管理员坐在网络上并组装块,因此更容易升级网络。升级矿池管理器正在运行的软件,可有效更新所有池成员正在运行的软件。

当然,采矿池的主要缺点是它们是一种集中化的形式。这是一个开放的问题,一个大型采矿池的运营商实际拥有多少权力。理论上,矿工们可以自由地离开一个池,如果它被认为是太强大了,但是矿工在实践中这样做的频率还不清楚。

采矿池的另一个缺点是它降低了实际运行完全验证的比特币节点的人口。以前所有矿工,无论多么小,都必须运行自己完全验证的节点。他们都必须存储整个区块链,并验证每个交易。现在,大多数矿工把这个任务卸载给他们的池管理员。这正是我们在第3章中提到的问题的主要原因,在Bitcoin网络中,完全验证节点的数量实际上可能会下降。

如果你担心采矿池引入的集中化水平,你可能会问:我们可以重新设计采矿过程,以便我们没有任何池,并且每个人都必须自己挖矿?我们将在第8章中考虑这个问题。

5.5采矿激励和策略

我们花了大部分时间来描述作为矿工的主要挑战是如何获得良好的硬件,发现便宜的电力,尽可能快地起身和运行,并希望有一些好运气。每个矿工在选择哪些工作之前,还有一些有趣的战略考虑。

1.要包括哪些交易。矿工们可以选择在区块中包含哪些交易。默认策略是包括交易费用高于某一最低成本的交易。

2.挖掘哪个区块。矿工们也可以决定他们想要挖掘哪个区块。此决定的默认行为是扩展最长的已知有效链。

3.在相同高度的区块之间选择。如果两个不同的区块在大约相同的时间被开采和宣布,它将产生一个1区块的分叉,任何一个区块都可以在最长的有效链路策略下被允许。矿工们必须决定哪个区块要延伸。默认行为是建立在他们首先听到的区块的顶部。

4.何时宣布新的区块。当他们找到一个区块时,矿工们必须决定什么时候向比特币网络公布。默认行为是立即公布,但可以选择等待一段时间才公布。

因此矿工面临着许多决定。对于每个决定,Bitcoin参考客户端采用了默认策略,在撰写本文时,该策略由绝大多数矿工运行。可能的是,非默认策略更有利可图。寻找这样的场景和策略是一个积极的研究领域。我们来看几个这样潜在的有利可图的偏离默认行为。在下面的讨论中,我们假设有一个非默认的矿工控制一些我们用α表示的采矿能力的一部分。

分叉攻击。最简单的攻击是分叉攻击,并且是获得双重支出的明显方式。矿工向一名受害人Bob付出一些好处或服务费用。Bob等待并且看到支付给他的交易确实已被包括在区块链中。也许他遵循共同的启发式,甚至等待六个了确认。相信他已经获得了报酬,Bob发出了好的商品或执行了这项服务。

矿工现在继续前进,并且开始工作于早期的区块——在包含与Bob的交易区块之前。在这个分叉链中,矿工插入一个备用交易(或双重支出),将支付给主链上的Bob的硬币发回到矿工自己的一个地址。

图5.15分叉攻击。恶意的矿工向Bob发送交易,并收到一些好的商品或服务来换取它。然后,矿工们分叉区块链以创建一个包含冲突交易的更长分支。在这个新的共识链中,对Bob的付款将无效。

为了成功的攻击,分叉链必须超过当前最长的链。一旦发生这种情况,支付Bob的交易就不再存在于共识区块链上。如果攻击矿工具有大部分哈希力——即如果α>

0.5,则最终会发生这种情况。也就是说,尽管在发现块时有很多随机变化,平均增长更快的链将最终变得更长。此外,由于矿工的硬币已经被用于(在新的共识链上),所以支付给Bob的交易不能再进入区块链。

51%是必须的吗?如果α> 0.5,则可能发生分叉攻击。实际上,由于其他因素,如网络开销,执行此攻击可能略低于此系数。在主链上工作的默认矿工通常会产生一些陈旧的区块,因为通常的原因:有一个潜伏的矿工去听对方的区块。但是,一个集中攻击者可以更快地进行通信,并产生更少的过时区块,这可能会节省1%或更多。

然而,接近50%的攻击可能需要很长时间才能成功,因为随机机会。如果进一步超过50%,攻击变得更加容易,效率更高。人们经常谈论一个51%的攻击者,好像51%是一个神奇的门槛,突然间就能够进行分叉攻击。在现实中,它更是一个渐变过程。

实用对策。不清楚分叉攻击是否会在实践中成功。攻击是可以检测到的,社区有可能通过拒绝接受替代链来阻止攻击,即使它更长。

攻击和汇率。更重要的是,这样的攻击很可能会彻底打乱比特币汇率。 如果一个矿工进行这样的攻击,对这个制度的信心就会下降,而且随着人们将财富从系统中移出,汇率就会下降。因此,虽然具有51%的散列能力的攻击者在短期内可能从双重支出中获益,但是他们可能会严重损害他们的长期盈利潜力,以诚实和现金挖矿的矿业回报。

由于这些原因,一个似是而非动机的分叉攻击可能会使其戏剧性丧失信心而专门摧毁货币。这被称为“金手指”攻击的恶棍,他们试图照射诺克斯堡中的所有金子,使其无价值。金手指攻击者的目标可能是摧毁货币,可能通过减持比特币或通过大量持有的竞争货币来获利。

通过贿赂分叉攻击。购买足够的硬件来控制大部分的哈希能力似乎是一项昂贵而艰巨的任务。但是可能有一个简单的方法来启动一个分叉攻击。如果直接购买足够的矿机,来获得比世界上其他所有人都多的开采能力,成本真的很昂贵,那么可能贿赂那些控制所有能力的人来代表你工作。

这里有一些方法,你可以贿赂矿工。一种方法是做个“带外”,也许是找一些大矿工,并给他们一个现金信号,促使他们在你的分叉上工作。一个更聪明的技术是创建一个新的采矿池,并运行它,提供比其他池更大的激励。尽管这种激励措施可能不可持续,但攻击者可以保持足够长的时间来成功地发起分叉攻击并获利。第三种技术是在分支链上留下大的“提示”——足够大,使矿工离开最长的链条,并在分支链上工作,希望它能成为最长的链条,并且可以收集提示。

无论贿赂的机制是什么,这个想法是一样的,攻击者只是付钱给那些已经拥有它的人来帮助他们克服最长的链,而不是直接实际获取所有的采矿能力。

也许矿工不愿意帮助,因为这样做会伤害他们投入了大量资金和采矿设备的货币。另一方面,矿工作为一个集团,可能想要保持货币流动,它们不会集体行事。如果他们认为在短期内可以赚更多的钱,个人矿工可能会出现瑕疵和接受贿赂。从经济角度来看,这是一个经典的公共悲剧。

这些都没有实际发生,如果这样的贿赂攻击实际上是可行的,这是一个公开的问题。

临时区块预扣攻击。你刚刚找到一个块。默认行为是立即将其通知给网络,但如果你正在执行临时区块预扣攻击,则不要马上公布。相反,你尝试通过在此区块的顶部进行一些更多的挖掘,希望在网络的其余部分找到一个区块之前再找到两个区块,并在整个过程中保持区块的秘密。

如果你通过两个秘密区块领先于公共区块链,则网络中其余部分的所有采矿工作都将被浪费掉。其他矿工将在他们认为是最长链的顶部采矿,一旦他们找到一个有效的区块,你就可以宣布你所扣留的两个块。这将立即成为新的最长有效链,并且网络的其余部分努力找到的区块将立即被孤立并从最长的链中切断。这就是所谓的自私开采。通过使剩余的网络浪费哈希能力,来试图找到一个你可以立即导致它失效的区块,你希望增加你有效份额的采矿奖励。

图5.16:自私采矿的插图。这显示了攻击可能发挥的几种可能的方式之一。(1)攻击前的区块链。(2)攻击者采到一个区块,预扣它,开始在它的头部开采。(3)攻击者很幸运,在网络的其余部分之前找到第二个区块,继续扣留区块。(4)非攻击者找到一个区块并进行广播。作为回应,攻击者广播了他的两个区块,清除了红色区块,并浪费了找到它的采矿者的采矿权。

关键的是,你需要幸运地连续找到两个区块。有可能当你只有一个区块在前面的时候,网络中的其他人宣布了一个有效的区块。如果发生这种情况,你需要立即自己公布你的区块密码。这将创建一个1区块的分叉,每个矿工都需要做出关于哪些区块要开采的决定。你希望的是,其他矿工的大部分人都会先听到你的区块,并决定着手处理。这种攻击的可行性在很大程度上取决于你赢得这些人群的能力,因此网络位置至关重要。你可以尝试与每个节点对等,以便你的区块首先到达大多数节点。

事实证明,如果你假设你只有50%的机会赢得这些人群,那么如果α> 0.25,那么自私的挖掘是对默认策略的改进。即使你失去了每一场比赛,如果α>0.333,自私的采矿仍然会更有利可图。这种攻击的存在是非常令人惊讶的,这与原来广泛认为没有绝大多数网络——即α≤0.5的原则相反,没有比默认更好的采矿策略。所以假设一个控制不到50%网络的矿工不能通过切换到另一个策略来获得任何东西,这是不安全的。

在这一点上,暂时扣留只是理论上的攻击,实际上并没有被观察到。自私的采矿很容易被发现,因为它会增加区块几乎同时公告的速度。

黑名单和惩罚性分叉。一个矿工想将地址X的交易列入黑名单。换句话说,他们想冻结那个地址所持有的钱,使它不可使用。也许你打算通过某种赎金或敲诈计划来获利,要求你列入黑名单的人付款给你,以便从黑名单中去除。黑名单也可能是由于法律原因而被迫做的事情。也许某些地址被政府指定为邪恶的。执法部门可能要求所有在其管辖范围内经营的矿池试图将这些地址列入黑名单。

传统的智慧没有有效的方法来黑名单比特币的地址。即使有一些矿工拒绝包括一些区块中的交易,其他矿工也会。如果你是一名企图黑名单的矿工,然而,你可以尝试更强大一点的,换句话说,惩罚性的分叉。你可以宣布,你将拒绝在包含源自该地址的交易链上工作。如果你拥有大部分的哈希能力,这应该足以保证黑名单交易永远不会被发布。事实上,其他矿工可能会停止尝试,因为这样做只会使他们的区块在分叉中被淘汰。

羽毛分叉。如果没有大部分网络哈希能力,惩罚性分支似乎不起作用。通过宣布你将拒绝任何具有某些交易的链进行挖掘,如果这样的链存在并被网络中其他部分接受为最长链,那么你将永远从共识链中切断自己(有效地引入硬叉),你所做的所有挖掘都将浪费。更糟糕的是,黑名单交易仍将使其成为最长的链。

换句话说,就其他矿工而言,通过以上述方式通过惩罚性分叉将某些交易列入黑名单的威胁是不可信的。但是有一个更聪明的方法来做到这一点。如果你看到一个有地址X的交易区块,你会宣布你将尝试分叉它,但是过了一会儿你会放弃,而不是一旦你看到一个来自地址X的交易,你宣布你会永远分叉它。

如果你在一次确认后放弃,你从X处理交易块的机会是。这样做的原因是,你必须找到两个连续的区块,以便在网络的其余部分发现一个区块之前摆脱来自地址X的交易区块,而是你幸运两次的机会。

的机会可能看起来不是很好。如果你控制20%的哈希力,那么只有4%的几率实际上可以摆脱你不想在区块链中看到的那个交易。但是,这比它似乎可以激励其他矿工加入你更好。只要你已经很公开你的计划,其他矿工知道如果他们包括一个来自地址X的交易,他们就有一个的机会他们发现的区块将最终被淘汰,因为你的羽毛分叉攻击。如果他们没有任何强烈的动机将该交易从地址X中包含,而且交易费用不高,失去采矿奖励的机会可能比收取交易费用要大得多。

那么其他的矿工可能会合理地决定加入你执行黑名单,因此即使α<0.5也可以执行黑名单。这次攻击的成功将完全取决于你明确地分叉对其他矿工有多大的说服力。

以交易费为主导的矿业回报。截至2015年,交易费用并不重要,因为区块收入占绝大多数——占矿工收入的99%以上。但每四年一次的积分奖励计划减半,最终区块奖励将低到足以让交易费用成为矿工收入的主要来源。当交易费用成为主要收入来源时,矿工们将会如何运作是一个开放的问题。矿工是否会更积极地执行最低交易费用。 他们会合作执行吗?

开放问题。总之,矿工们可以自由地实施他们想要的任何战略,尽管实际上我们看到除了默认策略以外的任何行为都很少。矿工行为没有完整的模型,表明默认策略是最佳的。在本章中,我们看到了具有足够哈希能力的矿工可能实施有利可图的具体偏差示例。采矿战略可能是实践领先于理论的领域。实际上,我们已经看到,在一个绝大多数矿工选择默认策略的世界里,比特币似乎运作良好。但是我们不知道它是否在理论上起作用。

我们也不能肯定,它在实践中将始终保持良好的运作。比特币的实地情况将会改变。矿工越来越集中,专业化,网络容量越来越大。此外,从长远来看,Bitcoin必须面对从固定矿业回报到交易费用的过渡。我们不知道这将如何发挥作用,并使用游戏理论模型试图预测它是当前一个非常有趣的研究领域。