跳转至

五、比特币挖矿

这一章是关于挖矿的。正如已经讨论过的,比特币依赖于矿工——他们验证每一笔交易,构建和存储所有区块,并就哪些区块要纳入区块链达成共识。我们也已经看到,矿工这样做可以获得奖励。但是许多有趣的问题仍然没有答案。矿工是谁?他们是怎么卷进来的?他们是如何操作的?矿工的商业模式是什么?它们对环境有什么影响?在这一章中,我们回答所有这些问题。

5.1。比特币矿工的任务

你想进入比特币挖矿吗?如果你这样做,我们不会完全阻止你,但请注意,比特币挖矿与淘金热有许多相似之处。历史上的淘金热充满了年轻人急于寻找财富的故事,其中许多人不可避免地失去了他们所拥有的一切。有些人一夜暴富,但即使是那些人,通常也要忍受艰难困苦。我们将在这一部分看到,为什么比特币挖矿与传统淘金热和其他快速致富计划面临许多相同的挑战和风险。

但首先,让我们看看技术细节。要成为比特币矿工,你得加入比特币网络,连接其他节点。连接后,需要执行六项任务:

1.监听交易。您监听网络上的事务,并通过检查签名是否正确以及正在使用的输出是否已经使用来验证它们。

2.保持区块链并监听新的数据块。你必须维护区块链。您首先要求其他节点提供您加入网络之前已经是区块链一部分的所有历史数据块。然后,您可以收听正在向网络广播的新数据块。您必须验证收到的每个块,方法是验证块中的每个事务,并检查块是否包含有效的 nonce。我们将在本节的后面返回随机数检查的细节。

3。组装一个候选块。一旦你有了区块链的最新版本,你就可以开始建造你自己的积木了。为此,您将听说过的事务分组到一个新的块中,该块扩展了您所知道的最新块。您必须确保块中包含的每个事务都是有效的。

4.找到一个使你的块有效的随机数。这一步需要做的工作最多,它给矿工带来了所有真正的困难。我们稍后将详细讨论这一步。

5.希望你的封锁被接受。即使你发现了一个障碍,也不能保证你的障碍会成为共识链的一部分。这里有一点运气;你必须希望其他矿商接受你的区块,并开始在它上面挖矿,而不是一些竞争对手的区块。

6.利润。如果所有其他矿工都接受你的区块,那么你就获利了!2015 年,区块奖励为 25 个比特币,目前价值约 1 万美元。此外,如果区块中的任何交易包含交易费,矿工也会收取这些费用。迄今为止,交易费一直是额外收入的适度来源,仅占大宗报酬的 1%左右。

我们可以将矿工必须采取的步骤分为两类。一些任务——验证交易和区块——有助于比特币网络,是其存在的基础。这些任务是比特币协议首先需要矿工的原因。其他任务——寻找区块和利润的竞赛——对比特币网络本身来说并不必要,但旨在激励矿工执行必要的步骤。当然,这两者都是比特币发挥货币功能的必要条件,因为矿商需要激励来执行关键步骤。

查找有效块

让我们回到寻找一个使你的块有效的 nonce 的问题。在第 3 章中,我们看到有两种主要的基于散列的结构:区块链(其中每个块头指向链中的前一个块头)和包含在该块中的所有事务的每个块内的 Merkle 树。

作为 miner,您要做的第一件事是将一组有效的事务从您的待处理事务池中编译到 Merkle 树中。当然,您可以选择包含多少个事务,直到达到块总大小的限制。然后,创建一个带有指向前一个块的头的块。块头包括一个 32 位 nonce 字段,您可以不断尝试不同的 nonce,寻找一个使块的哈希低于目标值的 nonce—粗略地说,从所需数量的零开始。作为一个挖掘者,你可能从一个随机数 0 开始,然后连续递增 1,寻找一个使块有效的随机数(图 5.1 )。

在大多数情况下,您将尝试 nonce 的每一个可能的 32 位值,它们都不会产生有效的散列。在这一点上,你将不得不做进一步的改变。注意在图 5.1 中,在 coinbase 事务中有一个额外的字段,您也可以使用一个额外的 nonce。在穷尽了块头的所有可能的 nonce 之后,您将在 coinbase 事务中更改额外的 nonce——比方说,将它递增 1——然后您将再次开始在块头中搜索 nonce。

Image

图 5.1。寻找有效的块。在本例中,挖掘器尝试使用全 0 随机数。它不会产生有效的散列输出,因此挖掘器将继续尝试不同的 nonce。

当您更改 coinbase 事务中的 nonce 时,整个 Merkle 事务树都必须更改(图 5.2 )。由于 coinbase 临时数的改变将沿着树向上传播,所以改变 coinbase 事务中的额外临时数是比改变块报头中的临时数更昂贵的操作。由于这个原因,挖掘者花费大部分时间来改变块报头中的随机数,并且仅当他们用尽了块报头中所有 2 个 ^(32 个)可能的随机数而没有找到有效块时,才改变 coinbase 随机数。

您尝试的几乎所有 nonce 都不会起作用,但是如果您坚持足够长的时间,您最终会找到 coinbase 事务中的额外 nonce 和块头中的 nonce 的正确组合,从而在目标下产生一个带有 hash 的块。当你找到它时,你想尽快公布它,并希望你能从中获利。

找到一个有效的块到底有多难?截至 2015 年底,挖掘难度目标(十六进制)为:

00000000000000000a9550000000000000000000000000000000000000000000

因此任何有效块的散列值都必须低于该值。换句话说,在你尝试的大约 2 ^(68) 随机数中,不到 1 个是有效的,这是一个非常大的数字。一种近似的说法是,它比地球人口的平方还要多。所以,如果地球上的每个人都是他们自己的星球地球,上面有 70 亿人,那么总人口将会是 265。

image

图 5.2。改变随机数。在 coinbase 事务中更改 nonce 会一直传播到 Merkle 树。

大家都在解同一个谜题吗?

你可能想知道:如果每个矿工都像描述的那样增加随机数,那么所有矿工不都在解决同一个难题吗?最快的矿工不会一直赢吗?答案是否定的!首先,挖掘者不太可能在相同的块上工作,因为每个挖掘者可能包括一组稍微不同的事务,并且顺序不同。但更重要的是,即使两个不同的矿工在同一个区块上处理相同的事务,这些区块仍然会有所不同。回想一下,在 coinbase 事务中,矿工指定他们自己的地址作为新铸造硬币的所有者。这个地址本身将引起传播到 Merkle 树的根的变化,确保没有两个矿工在完全相同的难题上工作,除非他们共享一个公钥。只有当这两个挖掘者是同一个挖掘池的一部分时,才会发生这种情况(我们稍后将讨论这一点),在这种情况下,他们将进行通信,以确保他们在 coinbase 事务中包含一个不同的 nonce,从而避免重复工作。

确定难度

开采难度每 2016 个区块变化一次,大约每 2 周发现一次。根据以下公式,根据之前 2016 个区块期间矿工的效率进行调整:

next difficulty = (previous difficulty · 2016 · 10 minutes)/
(time to mine last 2016 blocks)

请注意,2,016 10 分钟正好是 2 周,因此,如果恰好每 10 分钟创建一个数据块,则 2,016 个数据块将需要 2 周时间来挖掘。因此,该公式的效果是缩放难度,以保持平均大约每 10 分钟网络应该发现一次块的属性。2 周没什么特别的,但是很好的权衡。如果周期短得多,难度可能会因每个周期中发现的块数的随机变化而波动。如果时间长得多,网络的哈希能力可能会与难度严重失衡。

每个比特币矿工独立计算难度,只会接受符合他们计算的难度的区块。在不同分支上的矿工可能不会计算出相同的难度值,但是任何两个在同一个区块上挖矿的矿工都会同意这个难度值。这有助于达成共识。

从图 5.3 中可以看出,随着时间的推移,开采难度不断增加。它不一定是稳定的线性增长或指数增长,但它取决于市场的活跃程度。挖矿难度受到新矿工加入数量等因素的影响,而这些因素又可能受到比特币当前汇率的影响。一般来说,随着更多的矿工上线,挖矿硬件变得更高效,找到区块的速度更快,难度也增加了,所以找到一个区块总是需要大约十分钟。

图 5.3 中,困难在于一个阶跃函数,即使整体网络散列率平稳增长。离散步长是由每 2016 个块才调整一次难度的事实产生的。

查看网络增长率的另一种方法是考虑找到一个块平均需要多长时间。图 5.4a 显示了区块链中连续块之间经过的秒数。你可以看到这个逐渐下降,跳起来,然后又逐渐下降。当然,现在的情况是,每 2016 个方块,难度会重置,平均方块时间会回到大约 10 分钟。在接下来的时间里,难度保持不变,但越来越多的矿工上线。因为散列能力增加了,但是难度没有增加,所以块被更快地找到,直到难度在 2,016 个块或大约 2 周之后被再次调整。

尽管目标是平均每 10 分钟发现一个区块,但在 2013 年和 2014 年的大部分时间里,平均时间更接近约 9 分钟,在每个两周周期结束时将接近 8 分钟。快速计算表明,这需要每两周惊人的 25%的增长率,或者每年几百倍的增长率。

不出所料,这一速度是不可持续的,2015 年的增长率要慢得多(偶尔为负)。在图 5.4b 中,我们可以看到,随着挖矿功率接近稳定状态,找到每个区块的时间保持在接近 10 分钟。它甚至可能需要超过 10 分钟,在这种情况下,难度会降低。这曾经被认为是不可思议的,但在 2015 年却经常发生。

图 5.3。一段时间内的开采难度(2014 年中期)。请注意,y-轴从 80,000 万亿次哈希/秒开始。哈希速率是 1,008 个数据块的平均值。资料来源:bitcoinwisdom.com。

image

图 5.4 找块时间。2014 年初。请注意, y 轴开始于 460 秒。块生成时间平均为 2,016 个块。由于在此期间挖矿能力的持续快速增长,在每两周的时间内找到一个区块的时间稳步减少。2015 年初。请注意, y 轴开始于 540 秒。块生成时间平均为 2,016 个块。随着网络增长的放缓,找到每个数据块的时间更接近 10 分钟,在网络散列能力实际下降的时期,时间有时会更长。来源:bitcoinwisdom.com。

虽然到目前为止,网络的挖矿能力没有发生灾难性的下降,但没有内在的原因不能发生。比特币崩溃的一个假设场景是“死亡螺旋”,即汇率下跌导致一些矿商无利可图,导致大量矿工出逃,进而导致价格进一步下跌。

5.2。挖矿硬件

我们已经提到,矿工必须做的计算是困难的。在这一节中,我们将讨论为什么计算如此困难,并看看矿工用来执行这种计算的硬件。

矿工们正在研究的困难计算的核心是 SHA-256 散列函数。我们在第一章中抽象地讨论了散列函数。SHA-256 是一种通用加密哈希函数,是 2001 年标准化的更大函数家族的一部分(SHA 代表安全哈希算法)。SHA-256 是一个合理的选择,因为这是比特币设计时可用的最强的加密哈希函数。在比特币的生命周期中,它可能会变得不那么安全,但目前它仍然是安全的。它的设计确实来自美国国家安全局,这导致了一些阴谋论,但人们普遍认为它是一个非常强大的哈希函数。

近距离观察 SHA-256

图 5.5 显示了更多关于阿沙-256 计算的细节。我们不需要知道所有的细节来理解比特币是如何工作的,但对矿工正在解决的任务有一个大致的想法是很好的。

沙家

SHA-256 中的“256”来自其 256 位状态和输出。从技术上来说,SHA-256 是 SHA-2 家族中几个密切相关的职能之一,包括 SHA-512(国家更大,被认为更安全)。还有 SHA-1,更早一代的 160 位输出,现在被认为是不安全的,但仍然在比特币脚本中实现。

尽管包括 SHA-256 在内的 SHA-2 家族仍然被认为是密码安全的,但下一代 SHA-3 家族现在已经被美国国家标准与技术研究所举办的公开竞赛选中。SHA-3 目前处于标准化的最后阶段,但在比特币被设计出来的时候它还不可用。

Image

图 5.5。SHA-256 的结构。这是压缩功能的一个循环。 Maj 是按位应用的多数函数。 Ch 也按位应用,根据第一个输入的值选择第二个或第三个输入。σ[0]和σ[1]通过逐位旋转(即循环移位)和⊕运算来处理其 32 位字输入。

SHA-256 保持着 256 位的状态。该状态被分成八个 32 位字,这使得它对于 32 位硬件来说是高度优化的。在每一轮中,取该状态中的一些单词——一些应用了小的逐位调整——并加在一起 mod 32。然后整个状态右移,加法的结果成为该状态的新的最左边的字。该设计的灵感大致来自更简单的逐位线性反馈移位寄存器。

图 5.5 显示了 SHA-256 压缩函数的一个循环。SHA-256 的完整计算需要 64 次迭代。在每一轮中,应用稍微不同的常数,因此没有两次迭代是完全相同的。

矿工的任务是尽快计算出这个函数。请记住,矿工们正在和其他人赛跑,所以他们跑得越快,挣得就越多。为此,他们需要能够操作 32 位字,执行 32 位模加法,还需要做一些按位逻辑。

我们很快就会看到,比特币实际上需要对一个区块应用两次 SHA-256,以获得节点使用的哈希。这是比特币的一个怪癖。双重计算的原因还没有完全说明,但在这一点上,这只是矿工必须处理的事情。

CPU 挖掘

第一代挖掘都是在通用计算机上完成的——也就是通用中央处理器(CPU)。事实上,CPU 挖掘就像运行图 5.6 所示的代码一样简单。也就是说,矿工只是以线性方式搜索随机数,在软件中计算 SHA-256,并检查结果是否是有效的块。另外,请注意,在代码中,正如我们提到的,SHA-256 应用了两次。

图 5.6。CPU 挖掘伪代码。

这在通用计算机上能运行多快?在高端桌面上,您可能期望每秒计算大约 2000 万次散列。以这样的速度,在 2015 年初的难度水平(2 ^(67) )下,你平均需要几十万年才能找到一个有效的区块。当我们说挖矿将是一项艰难的任务时,我们不是在开玩笑!

如果你今天在一个通用的桌面上挖掘,CPU 挖掘在当前的难度下不再有利可图。在过去的几年里,任何试图在 CPU 上挖矿的人可能都不明白比特币是如何工作的,并且可能对他们从未因此赚到钱感到非常失望。

GPU 挖掘

第二代开始时,人们开始对他们的 CPU 有多慢感到沮丧,而是使用他们的显卡,或图形处理单元(GPU)。

几乎每个现代台式机都内置了 GPU 来支持高性能图形。它们被设计成具有高吞吐量和高并行性,这两者对比特币挖掘都很有用。比特币挖掘可以很容易地并行化,因为你可以尝试用不同的随机数同时计算多个哈希。2010 年,语言 OpenCL 发布。OpenCL 是一种通用语言,可以在 GPU 上做图形以外的事情。它是一种高级语言,随着时间的推移,人们已经用它在图形卡上运行许多类型的计算,比在 CPU 上更快。这为比特币在 GPU 上挖矿铺平了道路。

当时,使用 GPU 进行挖掘有几个吸引人的特性。首先,它们很容易获得,业余爱好者也很容易安装。你可以在网上订购显卡,也可以在大多数大型消费电子产品商店购买。它们是普通大众最容易接触到的高端硬件。它们也有一些特别适合比特币挖掘的属性。它们是为并行性而设计的,因此它们有许多算术逻辑单元,可用于同时进行 SHA-256 计算。一些图形处理器也有特定的指令来进行位运算,这对 SHA-256 非常有用。

大多数 GPU 也可以超频,这意味着如果你想承担它们可能过热或出现故障的风险,你可以比它们实际设计的速度更快地运行它们。这是游戏玩家多年来一直要求的属性。有了比特币挖矿,运行芯片的速度可能会比设计速度快得多,这可能是有利可图的,即使这样做会导致一些错误。

例如,假设您可以将 GPU 的运行速度提高 50%,但这样做会导致 SHA-256 计算出现高达 30%的错误。如果一个无效的解决方案被 GPU 错误地声明为有效——这种情况很少发生——您总是可以在 CPU 上仔细检查它。然而,如果一个有效的解决方案被错误地忽略了,你永远也不会知道。但是如果你超频带来的速度提升可以克服错误导致的输出下降,你仍然会领先。在上述示例中,与未超频相比,吞吐量是 1.5 倍,而成功率是 0.7 倍。乘积是 1.05,这意味着超频增加了你 5%的预期利润。人们已经花了相当多的时间来优化他们应该超频给定芯片多少,以实现利润最大化。

最后,您可以从一个主板和 CPU 驱动许多 GPU。因此,你可以将多个显卡连接到运行比特币节点(从网络收集交易并组装区块)的计算机上,并使用 GPU 尝试找到正确的随机数,以使区块的 SHA-256 有效。许多人创建了一些真正有趣的自制设置,如图图 5.7 所示,以从单个 CPU 驱动多个 GPU。这还是在比特币的早期,当时矿工仍然大多是业余爱好者,没有多少运行服务器的经验,但他们想出了一些非常巧妙的设计,如何将许多显卡打包到一个小地方,并保持它们足够冷以进行操作。

GPU 挖掘的缺点

GPU 挖矿有一些缺点。GPU 内置了许多硬件来进行视频处理,这些硬件不能用于挖矿。具体来说,他们有大量在 SHA-256 根本不用的浮点单元。GPU 也没有最佳的热特性:当你堆叠它们时,它们可能会过热。它们不是为了并排运行而设计的,如图 5.7 中配置的那样;它们被设计在一个盒子里,为一台计算机制作图形。

矿工对战游戏玩家

根据民间传说,到 2011 年,比特币矿工购买了足够多的 GPU,扰乱了这些单元的正常市场。这引起了与游戏玩家的摩擦,他们发现越来越难在当地电子商店获得某些流行的 GPU。然而有趣的是,这可能增加了人们对比特币挖矿的兴趣。这些沮丧的游戏玩家中的许多人在调查所有 GPU 的去向时了解到了货币,结果,一些游戏玩家自己成了矿工!

图 5.7。用于比特币挖矿的自制 GPU 机架。资料来源:伊什特万·芬塔,bitcointalk.org

GPU 也会消耗相当大的电量,所以相对于一台普通电脑来说用了很多电。最初的另一个缺点是,您必须要么构建自己的主板,要么购买昂贵的主板来容纳多个显卡。

在一个真正高端的 GPU 上,通过积极的调优,您可能每秒获得高达 2 亿次散列,比使用 CPU 好一个数量级。但是,即使有了这种改进的性能,即使你真的很有进取心,并且联合了 100 个 GPU,你仍然需要平均数百年才能找到 2015 年难度级别的块。因此,GPU 挖掘对于今天的比特币来说基本上已经死亡,尽管它有时仍会在早期的替代币中出现。

利用现场可编程门阵列进行挖掘

2011 年左右,一些矿工开始从 GPU 切换到现场可编程门阵列(FPGA),这是在 Verilog(一种用于编程 FPGA 的硬件设计语言)中首次实现比特币挖矿之后。FPGA背后的基本原理是试图接近定制硬件的性能,同时还允许卡的所有者“在现场”定制或重新配置它。相比之下,定制硬件芯片是在工厂里设计的,永远做同样的事情。

image

图 5.8。自制的 FPGAs 机架。承蒙相府刘、

FPGA 提供了比 GPU 更好的性能,特别是在“位摆弄”操作上,这在 FPGA 上指定是微不足道的。FPGAs 的冷却也更容易,而且与 GPU 不同,理论上你可以使用卡上几乎所有的晶体管来挖矿。与 GPU 一样,你可以将许多 FPGAs 打包在一起,并从一个中央单元驱动它们,这正是人们开始做的事情(图 5.8 )。总的来说,可以比使用显卡更灵活地构建一个大的 FPGAs 阵列。

使用一个精心实现的 FPGA,你可能每秒得到 1 千兆哈希,或者每秒 10 亿哈希。与 CPU 和 GPU 相比,这无疑是一个很大的性能提升,但即使你将 100 块板组合在一起,每块板的吞吐量为每秒 1 千兆哈希,你平均仍需要大约 100 年才能找到 2015 年难度级别的比特币块。

尽管性能有所提高,但由于几个原因,FPGA 挖掘的日子相当有限。他们被比特币挖矿驱动得更加艰难——通过一直在线和超频——超过了消费级 FPGAs 的设计水平。因此,许多人在挖矿时遇到了 FPGAs 出错和故障。优化 32 位加法步骤也变得很困难,这在进行 SHA-256 时至关重要。FPGA 也不太容易获得——在大多数商店都买不到,知道如何编程和设置 FPGA 的人比知道如何编程和设置 GPU 的人少。

最重要的是,尽管 FPGAs 提高了性能,但性能价格比与 GPU 相比仅略有提高。这使得 FPGA 挖掘成为一个相当短暂的现象。虽然 GPU 挖掘占据了大约一年左右的时间,但 FPGA 挖掘的日子要有限得多——在定制芯片到来之前,只持续了几个月。

利用专用集成电路进行挖掘

今天的挖矿由比特币专用集成电路(ASIC)主导。这些芯片是专为挖掘比特币而设计、制造和优化的。一些大的供应商向消费者出售各种各样的型号:你可以选择稍大和更贵的型号,更紧凑的型号,以及不同性能和能耗规格的型号。

设计专用集成电路需要相当多的专业知识,它们的开发周期也相当长。然而,比特币专用集成电路的设计和生产速度惊人地快。事实上,分析人士已经表示,这可能是集成电路历史上最快的周转时间——从确定问题到交付工作芯片。部分由于这个原因,最初几代比特币专用集成电路存在很多问题,其中大多数都没有达到承诺的性能数字。比特币专用集成电路已经成熟,现在已经有了相当可靠的专用集成电路。

直到 2014 年,由于网络散列率的快速增加,ASIC 的寿命相当短,早期 ASIC 时代的大多数电路板在大约 6 个月内就过时了。在此期间,大部分利润都是预先获得的。通常,在使用芯片的前 6 周,矿商就获得了 ASIC 使用寿命预期利润的一半。这意味着运输速度成为盈利的关键因素。由于行业的不成熟,消费者经常经历运输延迟,当他们到达时,主板几乎过时。因为比特币散列功率的增长率已经稳定,所以挖矿设备现在的寿命更长了,但早期时代看到许多沮丧的客户指责芯片供应商欺诈。

在比特币历史的大部分时间里,挖矿业的经济状况对想要上网、订购挖矿设备并开始赚钱的小矿工不利。在大多数情况下,基于挖矿难度的快速增加,订购挖矿硬件的人应该是亏损的。然而,直到 2013 年,比特币汇率的上涨足以防止大多数矿商直接亏损。实际上,挖矿一直是押注比特币价格上涨的一种昂贵方式,许多矿工——尽管他们从开采比特币中赚了钱——如果他们把打算用于挖矿设备的钱拿出来,投资于比特币,并最终出售获利,情况会更好。

今天你仍然可以订购比特币挖矿设备,我们不想阻止这种学习比特币和加密货币的方式。然而,挖矿并不是一种可取的赚钱方式。一旦你将电力和冷却的价格考虑在内,今天商业销售的大多数 ASICs 不太可能在挖矿奖励中收回成本。

今天的专业挖矿

今天,挖矿已经从个人走向专业的挖矿中心。这些中心如何运作的确切细节并不为人所知,因为公司保护他们的设置以保持竞争优势。据推测,这些业务通过以较大折扣购买比大多数个人可获得的稍新且更高效的 ASICs 来保持盈利。图 5.9 ,显示了佐治亚共和国的一个专业挖矿中心。

在决定在哪里建立挖矿中心时,三个最大的考虑因素是气候、电力成本和网络速度。特别是,您希望寒冷的气候保持较低的冷却成本。冷却对比特币挖矿来说尤其具有挑战性,据估计,比特币挖矿每平方英尺使用的电力比传统数据中心多一个数量级(因此释放的热量也多一个数量级)。你显然想要便宜的电。你还希望一个快速的网络连接能够很好地连接到比特币对等网络中的其他节点,这样你就可以在新区块宣布后尽快听到它们。据报道,格鲁吉亚和冰岛一直是比特币挖矿数据中心的热门目的地。

Image

图 5.9。比特弗瑞挖矿中心,格鲁吉亚共和国的专业挖矿中心。 马可·克罗恩的形象。

与黄金开采的相似之处

虽然比特币“挖矿”似乎只是一个可爱的名字,但如果我们考虑挖矿的演变,我们可以看到比特币挖矿和黄金挖矿之间有趣的相似之处。首先,两者都看到了类似的淘金心态,许多年轻的业余人士渴望尽快进入这个行业。

比特币挖矿从使用 CPU,到 GPU,到 FPGAs,再到现在的 ASICs。采金是从拿着金盘的个人进化而来的;一小群人带着水闸箱;砂矿开采(由大型挖矿集团组成,用水炸开山坡);现代金矿开采,通常使用巨大的露天矿山从地下提取数吨原材料(图 5.10 )。对于比特币和金矿来说,随着时间的推移,对个人的友好程度和可访问性已经下降,大公司已经整合了大部分业务(和利润)。在这两种努力中出现的另一种模式是,大部分利润都被那些出售设备的人赚取了,无论是黄金锅还是挖矿专用集成电路,而牺牲了希望暴富的个人。

未来

目前 ASIC 挖矿是比特币盈利的唯一现实手段,对小矿商不太友好。这引发了一些关于未来会发生什么的问题。小矿工是永远退出比特币挖矿了,还是有办法重新收编他们?ASIC 挖掘和专业挖掘中心的发展是否违反了比特币最初的愿景,即拥有一个完全去中心化的系统,网络中的每个人都在自己的计算机上进行挖掘?

图 5.10。挖矿的演变。比特币开采和黄金开采的发展有着明显的相似之处。这两家公司最初对个人都很友好,但随着时间的推移,它们变成了由大公司控制的大型企业。矿井挖矿照片。

如果这真的违反了中本聪最初对比特币的愿景,那么我们是否应该拥有一个只有通过 CPU 才能挖掘的系统?在第 8 章的中,我们考虑了这些问题,并着眼于可能对 ASICs 不太友好的替代形式。

这个循环不断重复

值得注意的是,几个较小的替代币确实使用了不同于 SHA-256 的谜题,但在挖掘方面经历了类似于比特币的轨迹。我们在第 8 章和第 10 章中更详细地讨论了这些替代硬币,但是回想一下,对于 ASIC 来说,设计芯片和发货之间还有很长的时间,所以如果一个新的替代硬币使用了新的拼图(即使只是 SHA-256 的修改版本),这将为 ASIC 尚未上市赢得一些时间。通常,挖掘将像比特币一样进行:从 CPU 到 GPU 和/或 FPGAs 到 ASICs(如果 altcoin 非常成功,例如 LiteCoin)。

因此,小型矿商的一个策略可能是尝试开发价值尚不足以让大型矿业集团投资的新替代货币——就像被赶出已探明金矿的小型金矿商可能会尝试勘探未探明的新区域一样。当然,这样的先驱将面临一个重大风险,即小说《替代硬币》永远不会成功。

5.3。能源消耗和生态

我们看到了大型专业挖矿数据中心如何接管比特币挖矿业务,以及这如何与金矿开采中的矿坑挖矿运动相类似。你可能已经意识到,这些年来,由于对环境的破坏,矿井一直是人们关注的主要问题。比特币还没有达到那个水平,但它已经开始使用大量的能量,这已经成为一个讨论的话题。在本节中,我们将讨论比特币开采使用了多少能源,以及这对货币和我们的星球有何影响。

热力学极限

拉尔夫·朗道尔在 20 世纪 60 年代提出的一条物理定律被称为朗道尔原理,该定律指出,任何不可逆的计算都必须使用最少的能量。逻辑上,不可逆计算可以被认为是丢失信息的计算。具体来说,该原理规定擦除任何位必须消耗最少 kT ln 2 焦耳,其中 k 是玻尔兹曼常数(大约 1.38×10^(23)焦耳/开尔文), T 是电路的温度,单位为开尔文,ln 2 是 2 的自然对数,大约为 0.69。这是一个很小的能量单位,但是从基础物理学的角度来看,它确实提供了一个能量使用的硬下限。

这里我们就不赘述推导了,但概念是,每次你以不可逆的方式翻转一个比特,都要用到一个最小的焦耳数。能量是永不毁灭的;它从一种形式转换成另一种形式。在计算的情况下,能量主要是从有用的高等级能量电转换成热量,热量消散在环境中。

作为加密哈希函数,SHA-256 不是可逆计算。回想一下第一章中的内容,这是加密哈希函数的一个基本要求。所以,由于不可逆计算必须使用一些能量,而 SHA-256——比特币挖矿的基础——是不可逆的,所以能量消耗是比特币挖矿的必然结果。也就是说,朗道尔原理所设定的极限远远低于今天使用的电量。我们离理论上的最佳计算消耗还差得很远,但即使我们真的达到了理论上的最佳消耗,我们仍然会使用能量来进行比特币挖掘。

比特币挖矿如何利用能源?这个过程中有三个步骤需要能量,其中一些可能不那么明显:

1.具体化能量。比特币挖矿设备需要制造。这需要物理开采原材料,以及将这些原材料转化为比特币开采 ASIC,这两者都需要能源。这是体现的能量。当你在邮件中收到一个比特币挖矿 ASIC 时,在你打开它之前,你已经消耗了大量的能量——当然包括运输能量!

希望随着时间的推移,随着越来越少的新容量上线,内含的能量会下降。随着购买新的挖矿专用集成电路的人越来越少,这些设备将不会很快被淘汰,所包含的能源将在多年的挖矿中摊销。

2.。当你的 ASIC 上电挖矿的时候,是要耗电的。根据朗道原理,这是我们知道要消耗能量的一步。随着挖矿设备变得更加高效,电能成本将会下降。但是由于兰道尔原理,我们知道它们永远不会消失;电能消耗将永远成为比特币矿工的生活现实。

3.冷却。比特币挖矿设备需要冷却,以防出现故障。如果你在寒冷的气候条件下小规模运营,你的制冷成本可能微不足道。但即使在寒冷的气候下,一旦足够多的 ASICs 被装在一个小空间里,你将不得不支付额外的费用来冷却设备产生的废热。一般来说,用于冷却挖矿设备的能量也将是电能的形式。

大规模挖矿

当大规模操作时,隐含的能量和电力都减少(每单位完成的挖矿工作)。构建设计用于大型数据中心的芯片更便宜,而且你可以更有效地提供电力,因为你不需要那么多电源。

然而,当谈到冷却时,情况通常相反:规模越大,冷却成本往往会增加。如果你想运行一个大型操作,并且在一个地方有许多比特币挖矿设备,那么设备周围的空气散热量就会减少。因此,您的冷却预算将按比例增加(每单位完成的挖矿工作),除非您将您的物理面积与您正在使用的芯片数量一起按比例增加。

估计能源使用量

整个比特币系统使用了多少能源?当然,我们无法精确计算,因为这是一个分散的网络,矿工们在各处作业,却没有记录他们到底在做什么。但有两种基本方法可以估算比特币矿工集体使用了多少能源。我们将根据 2015 年初的数值做一些粗略的计算。这些数字非常粗略,因为有些参数很难估计,而且变化很快。充其量,它们应该被视为数量级估计。

自上而下的方法

第一种方法是自顶向下的方法。我们从一个简单的事实开始,今天每发现一个区块,就会给矿工 25 个比特币,价值约 6500 美元。在比特币经济中,每秒钟大约有 11 美元被凭空创造出来,交给矿工。

现在让我们问这个问题:如果矿工们把每秒 11 美元全部转化为电能,他们能买多少?当然,矿工实际上并没有把他们所有的收入都花在电力上,但这将为用电量提供一个上限。电价差异很大,但我们可以用美国的工业电价来估算每千瓦时约 0.10 美元,或相当于每兆焦耳 0.03 美元。如果比特币矿工将每秒 11 美元的收入全部用于购买电力,他们每秒可以购买 367 兆焦耳,消耗稳定的 367 兆瓦。

能量和功率的单位。在国际单位制(SI)中,能量是用焦耳来度量的。一个瓦特是一个功率单位,其中一瓦特被定义为每秒一焦耳。

自下而上的方法

估计成本的第二种方法是使用自下而上的方法。在这种方法中,我们查看挖掘者实际计算的散列数,这是通过观察每个块的难度而知道的。如果我们假设所有的矿工都在使用最高效的硬件,我们就可以推导出耗电量的下限。

目前,在商业可用的挖矿钻机中,声称的最佳效率约为每秒每瓦 3 千兆哈希。也就是说,最尖端的 ASICs 声称每秒执行 30 亿次哈希运算,同时消耗 1 瓦的功率。总的网络哈希速率约为每秒 350,000,000 千兆哈希,或相当于每秒 350 千兆哈希。将这两者相乘,我们看到,以这样的效率,每秒产生这么多散列需要大约 117 兆瓦。当然,这个数字不包括所有的冷却能量和这些芯片中包含的所有能量,但我们正在进行优化计算,并得出一个下限,所以没问题。

结合自上而下和自下而上的方法,我们得出了一个大约几百兆瓦级的比特币挖矿用电量的粗略估计。

一兆瓦是多少?为了建立直觉,考虑一下大型发电厂的发电量。世界上最大的发电厂之一,中国的三峡大坝,是一个 10,000 兆瓦的发电厂。一个典型的大型水力发电厂发电量约为 1000 兆瓦。日本柏崎刈羽核电站是世界上最大的核电站,发电量为 7000 兆瓦,而普通核电站的发电量约为 4000 兆瓦。一家大型燃煤电厂的发电量约为 2000 兆瓦。

根据我们当时的估计,整个比特币网络大概消耗了一个大型发电厂 10%的发电量。虽然这是一个相当大的功率,但与地球上人们用电的所有其他事情相比,它仍然很小。

比特币挖矿浪费吗?

人们常说比特币浪费能源,因为花费在 SHA-256 计算上的能源没有任何其他有用的用途。然而,任何支付系统都需要能源和电力。对于传统货币,相当多的能量被消耗在印刷货币和运行 ATM 机、硬币分拣机、收银机和支付处理服务,以及用装甲车运输货币和金条上。你同样可以辩称,所有这些能量都被浪费了,因为除了维持货币体系之外,它们没有任何用途。因此,如果我们将比特币视为一种有用的货币系统,那么支持它所需的能源就没有真正被浪费。

尽管如此,如果我们能够用一个能源密集度较低的谜题取代比特币挖矿,并且仍然拥有一种安全的货币,那将是有利的。然而,我们将在第八章中看到,我们不知道这是否真的可能。

重新利用能源

让比特币变得更加环保的另一个想法是捕捉比特币开采产生的热量,并用它做一些有用的事情,而不是仅仅加热大气。这种从计算中捕捉废热的模型被称为数据炉方法。这个概念是,取代购买传统的电加热器来加热你的家,或者加热你家里的水,你可以购买一个加热器,作为比特币挖矿钻机的两倍,开采比特币,并作为计算的副产品来加热你的家。事实证明,这样做的效率并不比购买电暖器差多少,而且对于家庭消费者来说,使用数据炉可能不会比将加热器插入互联网连接和电源插座更复杂。

这种方法有一些缺点。虽然它的效率和使用电暖器差不多,但是电暖器本身的效率比气体加热器低得多。此外,当每个人都在夏天关掉他们的比特币挖矿机(或者至少是北半球的每个人)时,会发生什么?基于人们需要多少热量,煤矿的发电量可能会季节性下降。它甚至可能在比平均气温高的日子下降!如果数据熔炉模型真的流行起来,这将对比特币共识产生许多有趣的影响。

所有权的问题也不清楚。如果你买了一个比特币数据炉,你得到的比特币挖矿奖励是你自己的,还是卖给你的公司的?大多数人对比特币挖矿没有任何兴趣——可能永远也不会——因此,将它作为一种工具购买,并让出售给你的公司保留奖励可能更有意义。这可能意味着加热器以轻微的亏损出售,在这种情况下,一些有进取心的用户可能会购买它们并修改它们,以将挖矿奖励留给自己,从而导致一场潜在的丑陋的数字版权管理战。

将电力转化为现金

比特币的另一个长期可能性是,它可能提供将电能转化为现金的最有效方式。想象一下这样一个世界,比特币挖矿 ASICs 是一种随时可用的商品,挖矿的主要成本是电力。实际上,这将意味着提供免费或低价电力会导致新形式的滥用。

在许多国家,政府补贴电力,尤其是工业用电。除其他原因外,他们这样做通常是为了鼓励工业在他们的国家落户。但比特币提供了一种将电力转化为现金的好方法,如果政府补贴的电力全部转化为比特币,这可能会促使政府重新考虑这种模式。电力补贴旨在吸引有助于该国经济和劳动力市场的企业,补贴比特币挖矿可能不会产生预期的效果。

一个更大的问题是,在世界各地,人们的家里、大学、酒店、机场、办公楼等等,都有数十亿个免费的电源插座。人们可能会尝试插入挖矿设备,这样他们就可以在别人支付电费的时候获利。事实上,他们可能会使用过时的硬件,考虑到他们不用支付电费,也懒得升级。考虑到监控世界上每一个电源插座以防止潜在的未经授权的使用作为比特币挖矿的电力来源的可能性,这是非常令人生畏的。

5.4。挖矿池

想想做一个小矿工的经济效益。假设你是一个人,花了 6000 美元的血汗钱购买了一个漂亮、闪亮的新比特币挖矿平台。假设表现是这样的,你期望每 14 个月找到一个区块(记住,截至 2015 年,一个区块的价值约为 10,000 美元)。

摊销后,一旦你计入电费和其他运营成本,你的矿工的预期收入可能是每月 400 美元。如果你真的每个月都能收到一张 400 美元的支票,那就有理由去购买挖矿设备。但是要记住挖掘是一个随机的过程。你不知道你什么时候会找到下一个街区,在那之前,你什么也赚不到。

高方差

如果我们看看第一年你可能找到多少块的分布,方差相当大,而预期的数量相当低。因为您以一个固定的低速率找到数据块,该速率与您找到上一个数据块的时间无关,所以您的预期数据块数量可以很好地用泊松分布来近似。当 N 接近无穷大时,如果你有 N 个独立试验,每个试验都有λ/ N 个成功的机会,那么泊松分布就会出现。在比特币挖矿中,尝试的每个个体随机数实际上是一次随机试验,成功的机会很小,因此 N 即使对于小矿工来说也确实很大,并且近似性很好。

如果您期望每 14 个月找到大约 1 个数据块(泊松分布,λ = 6/7 数据块/年),那么您在第一年找不到任何数据块的可能性超过 40%。对于矿工个人来说,这可能是毁灭性的。你在挖矿设备上花费了数千美元,为运行它支付了大量的电费,却没有得到任何回报。第一年你有大约 36%的机会找到一个街区,这意味着如果你的电费不太高,你可能只能勉强度日。最后,你找到两个或更多区块的可能性较小,在这种情况下,你可能会获得可观的利润(图 5.11 )。

这些数字只是近似值,但这里的要点是,即使预期你可能赚到足够的投资回报,方差也足够高,很可能你什么也赚不到。对于小型矿商来说,这意味着挖矿是一场重大赌博。

【T2Image

图 5.11。挖矿的不确定性。假设全局散列率是恒定的,并且找到一个块的平均时间是 14 个月,那么对于一个小型挖掘者来说,方差是相当高的。

挖矿池

从历史上看,当小商人面临很大风险时,他们会成立互助保险公司来降低风险。例如,农民可能会同意,如果任何一个农民的谷仓被烧毁,其他人将与该农民分享他们的利润。我们能有一个适用于小型比特币矿工的相互保险模式吗?

一个矿池正是比特币矿工的相互保险。一组矿工将组成一个池,所有人都试图开采一个有指定硬币库接收人的区块。那个接收者被称为池管理器。所以,不管谁找到了那块石头,泳池管理员都会得到奖励。池管理器将根据每个参与者完成的工作量将收入分配给池中的所有参与者。当然,泳池管理者也可能会从管理泳池的服务中获得某种形式的提成。

假设每个人都信任池管理器,这种方法对于降低矿工的方差很有效。但是人才库管理员如何知道人才库中的每个成员贡献了多少工作呢?显然,泳池管理员不应该简单地相信每个人的话,因为人们可能会声称他们做的比实际做的多。

矿业股份

这个问题有一个很好的解决方案。矿工可以通过输出份额,或者接近有效的块,从概率上证明他们做了多少工作。假设目标是一个以 67 个零开头的数字。块的哈希必须低于块的目标值才有效。在搜索这样一个块的过程中,矿工会发现一些块的散列以很多零开始,但不完全是 67。矿工可以出示这些近乎有效的区块来证明他们确实在工作(图 5.12 )。比如说,一份股票可能需要 40 或 50 个零,这取决于资金池面向的矿工类型。

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

图 5.12。矿业股。挖掘者不断尝试寻找散列值低于目标值的块。在这个过程中,他们会发现其他块的散列包含更少的零——但仍然很少,足以证明他们一直在努力工作。在此图中,阴影哈希是共享,而粗体哈希来自有效数据块(也是有效共享)。

当池中的成员找到一个有效的块时,他将它发送给池管理器,池管理器根据完成的工作量按比例分配奖励。实际找到石块的矿工不会获得特别的奖金,因此如果另一名矿工做了更多的工作,后一名矿工将获得更多的报酬,即使他不是找到有效石块的人(图 5.13 )。

对于资金池经理如何根据每个矿工提交的股份计算出支付给他们的薪酬,有几个选项可供选择。我们来看两个常见的简单的例子。还有许多其他方案也在使用,但这些说明了奖励方案之间的权衡。

每股支付

按股付费模式中,资金池经理为资金池正在开发的区块中超过一定难度的每股支付固定费用。在这种模式下,矿工们可以马上把自己的股份发给资金池经理,不用等资金池找到区块就能拿到报酬。

在某些方面,每股付费模式对矿商来说是最好的。他们每找到一份,就保证有一定数额的钱。资金池经理基本上承担了所有风险,因为即使没有发现阻塞,他们也会支付报酬。当然,由于风险增加,在按股付费模式中,资金池管理人可能会收取比其他模式更高的费用。

按股付费模式的一个问题是,矿商实际上没有任何动力将有效区块发送给池管理者。也就是说,他们可以丢弃有效的区块,但仍然获得相同的奖励,这将对池造成很大的损失。恶意的池管理器可能会以这种方式攻击竞争池,试图将它们挤出市场。

【T2image

图 5.13。挖矿奖励。图中的三个参与者都在同一个街区工作。他们的报酬与工作量相当。尽管右边的矿工找到了有效的区块,但左边的矿工得到的报酬更多,因为这个矿工做了更多的工作。实际找到矿块的矿工(通常)没有奖金。

相称的

比例模型中,不是支付每股固定费用,而是支付的金额取决于池是否实际找到有效块。每当找到一个有效的方块,来自该方块的奖励就按成员实际完成的工作量成比例地分配给他们。

在比例模型中,矿工仍然承担一些与总的池风险成比例的风险。但是如果池足够大,池发现块的频率的变化将会相当低。比例支付为资金池经理提供了较低的风险,因为他们只在找到有效的资金时才支付。这也解决了前面提到的每股付费模式的问题,因为矿商受到激励,发送他们找到的有效区块,因为这将触发收入返回给他们。

与固定的每股支付模式相比,比例模式需要基金经理做更多的工作来验证、计算和分配奖励。

泳池跳跃

即使只有这两种类型的池,我们可以看到矿工可能会被激励在不同的时间在池之间切换。为了看到这一点,考虑如果块被快速找到,纯比例池将有效地支付更大的每股金额,因为它总是支付一个块奖励,而不管自上一个块被找到以来已经过了多长时间。

一个聪明的矿工可能会在周期的早期(就在发现前一个区块之后)尝试在比例池中挖矿,而每股的回报相对较高,只是在周期的后期(当在比例池中挖矿的预期回报相对较低时)切换(“跳”)到每股付费池。因此,比例池并不实际。更复杂的方案,如“按提交的最后股份支付”更常见,但即使是这些也受到微妙的跳池行为的影响。如何设计一个不容易受到这种操纵的矿池奖励方案仍然是一个公开的问题。

历史和标准化

矿池最早开始于 2010 年左右的比特币挖矿 GPU 时代。他们很快变得流行起来,原因很明显,他们降低了参与矿工的方差。他们现在变得相当老练了。对于如何运行矿池,存在许多协议,甚至有人建议这些矿池协议应该作为比特币本身的一部分进行标准化。正如运行对等网络有一个比特币协议一样,挖掘池协议为池管理器提供了一个通信 API(应用程序编程接口),用于向所有成员发送要工作的块的详细信息,并为矿工向池管理器发回他们正在寻找的份额。getblocktemplate 协议被正式标准化为比特币改进提案(BIP)。一个与之竞争的协议 Stratum 目前在实践中更受欢迎,它是一个提议的 BIP。与比特币协议本身不同,拥有多个不兼容的矿池协议只是一个小小的不便。每个池可以简单地选择他们喜欢的协议,市场可以决定哪一个更好。

一些挖矿硬件甚至在硬件级支持这些协议,这最终将在某种程度上限制它们的开发灵活性。然而,这使得购买一件挖矿硬件并加入池变得简单。你只要把它插在墙上——电和你的网络连接——选择一个水池,然后挖矿硬件就会立即开始接收来自水池的指令,进行挖矿,并把你的电转换成钱。

51%的挖矿池

截至 2015 年,几乎所有的矿商都在通过池子挖矿;很少有矿工单独挖矿了。2014 年 6 月,GHash。最大的矿池 IO 变得如此之大,以至于它实际上拥有比特币网络总容量的 50%以上(图 5.14a )。本质上,GHash 向参与的矿工提供了如此好的条件,以至于大多数人都想加入。

这是社区长期以来一直担心的事情,它导致了对 GHash 的强烈反对。到了 8 月份,GHash 的市场份额故意下降,因为资金池停止接受新的参与者(图 5.14b )。尽管如此,两个矿池控制了网络中大约一半的电力。

到 2015 年 4 月,情况看起来非常不同,而且不那么集中,至少表面上如此(图 5.14c )。pool 获得 51%的可能性仍然是社区中的一个问题,但 GHash 收到的负面宣传已经导致 pool 从那时起避免变得太大。随着新的挖矿者和池进入市场,标准化协议增加了挖矿者在池之间切换的便利性,不同池的市场份额保持相当大的流动性。从长远来看,这些资金池将如何演变还有待观察。

image

image

image

图 5.14。通过挖掘池散列功率。2014 年 6 月。2014 年 8 月。2015 年 4 月。来源:blockchain.info。

然而,值得注意的是,矿池可能隐藏了少数大型挖矿组织手中的实际挖矿权力,这些组织可以同时参与多个矿池,以隐藏其真实规模。这种做法被称为清洗哈希。挖矿硬件的物理控制实际上有多集中仍不得而知,挖矿池使这一点很难确定。

矿池有益吗?

挖矿池的优势在于,它们使参与者的挖矿更具可预测性,并使小型挖矿者更容易参与游戏。如果没有挖矿池,这种差异将使许多小矿工无法挖矿。

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

当然,矿池的主要缺点是它们是集权的一种形式。一个大型矿池的经营者实际上拥有多大的权力,这是一个悬而未决的问题。从理论上讲,如果认为权力过大,矿工可以自由离开泳池,但不清楚矿工们实际上多久会离开一次。

挖掘池的另一个缺点是,它们减少了实际运行完全验证比特币节点的参与者数量。以前,所有矿工,无论多小,都必须运行自己的完全验证节点。他们都必须存储整个区块链并验证每一笔交易。现在,大多数矿商把这项任务交给了他们的泳池经理。这是主要原因,正如我们在第 3 章中提到的,比特币网络中经过完全验证的节点数量实际上可能正在下降。

如果您担心挖矿池带来的集中化程度,您可能会问:我们能否重新设计挖矿流程,使我们没有任何池,每个人都必须为自己挖矿?我们将在第 8 章中考虑这个问题。

5.5。挖矿激励和战略

我们在这一章的大部分时间里描述了作为一名矿工的主要挑战是如何获得良好的硬件,找到廉价的电力,尽可能快地起床和跑步,并希望有好运。还有一些有趣的战略考虑,每个矿工在挑选工作区块之前都必须考虑。

1。包括哪些交易。矿工选择他们在块中包括哪些交易。默认策略是包含任何交易费用高于某个最小值的交易。

2.上哪个街区开矿。矿工们也决定他们想要在哪个区块上挖矿。该决策的默认行为是扩展已知的最长有效链。

3.在相同高度的块之间选择。如果两个不同的区块在大约相同的时间被开采和宣布,则导致 1 个区块的分叉,根据最长有效链策略,任一区块都是可接受的。然后,矿工们必须决定延长哪个区块。默认行为是在他们最先听说的块的基础上进行构建。

4.何时公布新区块。当他们发现一个区块时,矿工们必须决定何时向比特币网络宣布这一点。默认行为是立即宣布,但他们可以选择等待一段时间再宣布。

因此,矿工们面临着许多决定。对于每个决定,比特币参考客户端都有一个默认策略,在撰写本文时,几乎所有的矿工都在运行这个客户端。但可能非默认策略更有利可图。寻找这样的情景和策略是一个活跃的研究领域。让我们看几个这种潜在有利可图的偏离默认行为(通常称为“攻击”)。在下面的讨论中,我们假设一个非默认挖矿者控制一部分挖矿能力,我们用α表示。

分叉攻击

最简单的攻击是分叉攻击,最明显的获利方式是执行双倍消费。矿工给受害者 Bob 寄了一些钱,以支付一些货物或服务。Bob 等待并看到支付给他的交易确实包含在区块链中。也许他遵循普通的启发法,甚至等待六次确认才能确定。Bob 确信他已经得到了报酬,于是装运货物或提供服务。

miner 现在开始处理更早的块——在包含 Bob 事务的块之前。在这个分叉的链中,矿工插入一个替代交易——或双重消费——将主链上支付给 Bob 的硬币发送回矿工自己的地址之一(图 5.15 )。

为了攻击成功,分叉的链必须超过当前最长的链。一旦发生这种情况,向 Bob 付款的交易在一致区块链上就不再存在。如果攻击的矿工拥有大部分散列能力,也就是说,如果α > 0.5,这种情况最终肯定会发生。也就是说,即使发现块的时间有很多随机变化,平均增长更快的链最终会变得更长。此外,由于矿工的硬币已经被花掉了(在新的共识链上),支付 Bob 的交易不再能够到达区块链。

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

51%有必要吗?如果α > 0.5,发动分叉攻击当然是可能的。实际上,由于网络开销等其他因素的影响,执行这种攻击所需的时间可能会稍短。在主链上工作的默认挖掘器将生成一些陈旧的块,原因通常是:挖掘器之间有一段延迟时间来相互了解对方的块。但是集中式攻击者可以更快地进行通信,并产生更少的陈旧块,这可能相当于节省 1%或更多。

尽管如此,接近 50%的攻击可能需要很长时间才能成功,因为这是随机的。当你超过 50%的时候,攻击会变得更加容易和有效。人们经常谈论 51%的攻击者,好像 51%是一个神奇的阈值,可以突然启动分叉攻击。实际上,更多的是一种梯度。

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

攻击和汇率。更重要的是,这种攻击很可能会彻底摧毁比特币的汇率。如果一家矿商实施了这样的攻击,对系统的信心将会下降,汇率将会下降,因为参与者试图将他们的财富转移出系统。因此,虽然拥有 51%哈希能力的攻击者可能会在短期内从双倍支出中获利,但他们可能会严重破坏他们诚实挖矿和兑现挖矿奖励的长期收入潜力。

出于这些原因,也许分叉攻击的一个更合理的动机是通过大幅丧失信心来摧毁货币。这被称为金手指袭击,起因是詹姆斯·邦德恶棍试图照射诺克斯堡的所有黄金使其变得毫无价值。金手指攻击者的目标可能是摧毁比特币,可能通过做空比特币或持有大量其他竞争性货币来获利。

通过贿赂进行分叉攻击

购买足够的硬件来控制大部分的哈希功能似乎是一项昂贵而困难的任务。但是可能有一种更简单的方法来发起分叉攻击。尽管直接购买足够的挖矿能力来拥有比世界上其他任何人都多的产能确实非常昂贵,但贿赂那些控制所有产能的人为你工作却是可能的。

你可以用几种方式贿赂矿工。一种方法是“带外”做这件事——也许找到一些大规模的矿工,给他们一信封现金,作为他们在你的叉子上工作的报酬。一个更聪明的技巧是创建一个新的矿池,亏本经营,提供比其他矿池更大的激励。即使这种刺激可能无法持续,攻击者也可以让它们持续足够长的时间,从而成功发起分叉攻击,并从中获利。第三种技术是在分叉链上留下大块的“小费”——大到足以让矿工离开最长的链,并在分叉链上工作,希望它会成为最长的链,他们可以收集小费。

无论贿赂的机制是什么,想法都是一样的:攻击者不是直接获得所有的挖矿能力,而是付钱给那些已经拥有它的人,以帮助攻击者的叉子克服最长的链条。

或许矿商不想帮忙,因为这样做会伤害他们投入了大量资金和挖矿设备的货币。但即使矿商作为一个群体可能希望保持货币的偿付能力,他们也不会集体行动。如果个体矿工认为他们能在短期内赚更多的钱,他们可能会叛变并接受贿赂。从经济角度来看,这将是一场经典的公地悲剧。

这些都没有真正发生,像这样的贿赂攻击实际上是否可行还是个未知数。

临时拦截攻击

假设你刚刚找到一块积木。默认行为是立即向网络宣布,但是如果您正在执行临时拦截攻击,您不会立即宣布。相反,你试图通过在这个区块上做更多的挖掘来领先,希望在网络的其余部分找到甚至一个区块之前找到连续的两个区块,从而始终保持你的区块的秘密。

如果你领先公共区块链两个秘密街区,网络其余部分的所有挖掘工作都将浪费。其他矿工会在他们认为最长的链条上挖矿,但是一旦他们找到一个有效区块,你就可以宣布你扣留的两个区块。这将立即成为新的最长的有效链,而网络的其余部分努力寻找的块将立即成为孤儿(图 5.16 )。这被称为自私开采。通过使网络的其余部分浪费散列功率来试图找到一个你可以立即使其失效的块,你希望增加你的挖矿奖励的有效份额。

问题是,你需要运气好才能连续找到两个街区。当你只领先一个街区时,网络中的其他人可能会宣布一个有效的街区。如果发生这种情况,你会想立即宣布你自己的秘密块。这就产生了一个区块分叉,每个矿工都需要决定在这些区块中的哪一个上挖矿。你的希望是,很大一部分其他矿商将首先听说你的区块,并决定开发它。这种攻击的可行性很大程度上取决于你赢得这些比赛的能力,所以网络位置是至关重要的。您可以尝试与每个节点对等,这样您的块将首先到达大多数节点。

事实证明,如果你假设你只有 50%的机会赢得这些比赛,自私挖矿是对默认策略的改进,如果你的挖矿能力的分数是α > .25。即使每场比赛都输,但如果α > .333,自私挖矿仍然更有利可图。这种攻击的存在非常令人惊讶,它与最初广泛持有的信念相反,即没有网络的大多数(即,α ≤ .5 ),没有比默认更好的挖掘策略。因此,假设一个没有控制 50%网络的矿商不会因为转向替代策略而有任何收获是不安全的。

截至 2015 年,临时阻止只是一种理论攻击,在实践中尚未观察到。自私的挖掘很容易被发现,因为它会增加几乎同时发布块公告的频率。

image

图 5.16。自私挖矿。图中显示了攻击可能发生的几种方式之一。①进攻前的区块链。(2)攻击者开采一个区块,扣留它,开始在它上面开采。(3)攻击者运气好,在网络其余部分之前找到第二个块,继续扣留块。(4) Nonattacker 找到一个块并广播它。作为回应,攻击者广播他的两个区块,使非攻击者的区块成为孤儿,并浪费了寻找它的挖矿能力。

黑名单和惩罚性分流

假设您想将来自地址 X 的交易列入黑名单。换句话说,你想冻结该地址持有的资金,使其无法使用。也许你打算通过某种赎金或勒索计划从中获利,要求你列入黑名单的人付钱让你从黑名单上除名。黑名单也可能是出于法律原因你不得不做的事情。也许某些地址被政府指定为邪恶的。执法官员可能会要求在其管辖范围内运营的所有矿工尝试将这些地址列入黑名单。

传统观点认为,没有有效的方法将比特币中的地址列入黑名单。即使一些矿商拒绝将某些交易纳入大宗交易,其他矿商也会这么做。然而,如果你是一个试图进入黑名单的矿工,你可以尝试更强的方法,即惩罚性分流。您可以宣布,您将拒绝处理包含源自该地址的事务的链。如果您拥有大部分的散列能力,这种威胁应该足以保证黑名单中的事务永远不会被发布。事实上,其他矿商可能会停止尝试,因为这样做只会导致他们的区块在福克斯被取消。

羽毛分叉

除非攻击者掌握了大部分网络散列能力,否则惩罚性分流似乎不起作用。通过宣布你拒绝在任何有特定交易的链上挖掘,如果这样的链确实存在,并且被网络的其余部分接受为最长的链,你将永远切断你自己与共识链的联系(实际上引入了一个硬分叉),并且你当前的所有挖掘将被浪费。更糟糕的是,黑名单中的交易仍然会进入最长的链。

换句话说,就其他矿商而言,以上述方式通过惩罚性分流将某些交易列入黑名单的威胁是不可信的。但是有一种更聪明的方法,叫做羽毛分叉。不是一看到来自地址 X 的事务就宣布要永远分叉,而是宣布如果看到一个块有来自地址 X 的事务,就会尝试分叉,但过一会儿就会放弃。例如,您可能会宣布,在 k 块确认了来自地址 X 的事务之后,您将回到最长的链。

如果您在一次确认后放弃,那么您放弃带有来自 X 的交易的区块的机会是α ² 。原因是,你必须找到两个连续的块,以便在网络的其余部分找到块之前,用来自地址 X 的事务处理来消除块,并且α ² 是你将幸运两次的机会。

α ² 的几率可能看起来不太好。如果您控制了 20%的哈希能力(即α = 0.20),那么实际上只有 4%的机会摆脱您不想在区块链中看到的事务。但这比看起来要好,因为你可能会激励其他矿工加入你的行列。只要你公开你的计划,其他矿工就知道,如果他们包括来自地址 X 的交易,他们有α ² 的机会,他们找到的区块最终会因为你的分支攻击而被消除。如果他们没有任何强烈的动机来包括来自地址 X 的交易,并且交易费用不高,那么失去挖矿奖励的可能性可能比收取交易费用更大。

然后,其他矿工可能会理性地决定加入你的黑名单,因此你可以执行黑名单,即使α < .5. The success of this attack depends entirely on how convincing you are to the other miners that you’re going to fork.

Transitioning to Mining Rewards Dominated by Transaction Fees

As of 2015, transaction fees don’t matter much, since block rewards provide more than 99 percent of all revenue that miners make. But every 4 years, the block reward is scheduled to be halved, and eventually it will be low enough that transaction fees will become the main source of revenue for miners. It’s an open question exactly how miners will operate when transaction fees dominate their income. Will miners become more aggressive in enforcing minimum transaction fees? Will they cooperate to enforce the minimum?

Open Problems

In summary, miners are free to implement any strategy that they want, although in practice we’ve seen little of anything other than the default strategy. There’s no complete model for miner behavior that confirms that the default strategy is optimal. In this chapter we’ve discussed specific examples of deviations that may be profitable for miners with sufficient hash power. Mining strategy may be an area in which practice is ahead of theory. Empirically, in a world where most miners choose the default strategy, Bitcoin seems to work well. But it is not yet clear if we can analyze Bitcoin theoretically and show that it is stable.

We also can’t be sure that it will always continue to work well in practice. The facts on the ground are going to change for Bitcoin. Miners are becoming more centralized and more professional, and the network capacity is increasing. Besides, in the long run Bitcoin must contend with the transition from fixed mining rewards to transaction fees. We don’t know how this will play out, and using game-theoretic models to try to predict it is a very interesting current area of research.

进一步阅读

一篇关于挖矿硬件发展的优秀论文是:

Taylor, Michael Bedford. “Bitcoin and the Age of Bespoke Silicon.” In *Proceedings of the 2013 International Conference on Compilers, Architectures and Synthesis for Embedded Systems*. Washington, DC: IEEE Press, 2013.

一篇讨论运行比特币挖矿中心的某些方面,包括冷却成本的论文是:

Kampl, Alex. “Analysis of Large-Scale Bitcoin Mining Operations.” White paper, Allied Control, Hong Kong, 2014.

关于比特币和加密货币的“知识系统化”论文;特别参见关于稳定性的第三节:

Bonneau, Joseph, Andrew Miller, Jeremy Clark, Arvind Narayanan, Joshua A. Kroll, and Edward W. Felten. “Research Perspectives and Challenges for Bitcoin and Cryptocurrencies.” Presented at the 2015 IEEE Symposium on Security and Privacy, San Jose, CA, May 2015.

2011 年的一篇综合论文,分析了不同的联营挖矿奖励制度(有些信息有点过时,但总体而言仍是一个很好的资源):

Rosenfeld, Meni. “Analysis of Bitcoin Pooled Mining Reward Systems.” arXiv preprint. arXiv:1112.4980 (2011).

分析挖矿战略的几篇论文是:

Eyal, Ittay, and Emin Gün Sirer. “Majority Is Not Enough: Bitcoin Mining Is Vulnerable,” in *Financial Cryptography and Data Security*. Berlin and Heidelberg: Springer, 2014.
Kroll, Joshua A., Ian C. Davey, and Edward W. Felten. “The Economics of Bitcoin Mining, or Bitcoin in the Presence of Adversaries.” In *Proceedings of the Workshop on the Economics of Information Security 2013*. Berlin: Springer-Verlag, 2013.
Eyal, Ittay. “The Miner’s Dilemma.” Presented at the 2015 IEEE Symposium on Security and Privacy, San Jose, CA, May 2015.

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组