本章全部都是采矿。我们已经看到了一点矿工的信息以及比特币如何依靠他们——他们验证每一笔交易,他们构建和存储所有的区块,并且达成共识,对哪些区块被包括在区块链中形成共识。我们也已经看到,矿工们为此得到了一些回报,但是我们还有很多问题没有回答。
谁是矿工?他们是如何进入系统的?他们是如何运作的?矿工的商业模式是什么?他们对环境有什么影响?
在本章中,我们将回答所有这些问题。
比特币矿工的任务
你想进入比特币矿业吗?
如果你这样做了,我们不会完全阻止你,但要小心比特币矿业与淘金热有许多相似之处。历史上的淘金热充斥着年轻人匆匆去寻找财富的故事,不可避免地有许多人失去了他们拥有的一切。少数人认为它很富有,但即使是那些通常也忍受了很多困难的人。我们将在这一节中看到为什么比特币矿业与传统的淘金潮和其他快速致富方案有着许多相同的挑战和风险。
但首先,看看技术细节。要成为比特币矿工,你必须加入比特币网络并连接到其他节点。连接完成后,有六项要执行的任务:
- 监听交易首先,你要侦听网络上的交易,并通过检查签名是否正确以及所花费的输出未被花费来验证它们。
- 维持区块链并监听新区块你必须维持区块链。你首先要求其他节点在你加入网络之前向你提供已经是区块链的一部分的所有历史区块。然后,你将收听正在广播到网络的新区块。你必须通过验证区块中的每个交易并检查该区块是否包含有效的随机数,来验证你接收的每个区块。我们将在本节稍后回到随机检查的详细信息。
- 装配候选区块一旦你拥有区块链的最新版本,你就可以开始构建自己的区块。为此,你将你听到的交易分组到一个新的区块中,扩展了你所知道的最新区块。你必须确保你的区块中包含的每个交易都是有效的。
- 找到一个使你的区块有效的随机数这个步骤需要最多的工作,是矿工真正的困难点。我们将在短期内详细看到这一点。
- 希望你的区块被接受5.希望你的区块被接受。即使你找到一个区块,也不能保证你的区块将成为共识链的一部分。这里有一点运气成分;你必须希望其他矿工接受你的区块,并开始在其上采矿,而不是在一些竞争对手的区块上。
- 利润如果所有其他矿工都接受你的区块,那么你就会获利!在2015年初撰写本文时,积分奖励是25比特币,目前价值超过6000美元。此外,如果区块中的任何交易都包含交易费用,矿工也会收集。到目前为止,交易费一直是额外收入的适度来源,只有区块收入的1%左右。
我们可以将矿工必须采取的步骤分为两类。一些任务——验证交易和区块——帮助比特币网络,并且是其存在的基础。这些任务是这些Bitcoin协议首先要求矿工的原因。
其他任务——比赛找到区块和利润——对于比特币网络本身并不是必需的,但是旨在激励矿工执行基本步骤。
当然,这两个都是比特币作为货币发挥作用的必要条件,因为矿工需要激励来执行关键步骤。
查找有效区块
让我们回到让你找到一个随机值使你的区块有效的问题。在第3章,我们看到,目前主要有两种基于哈希的结构。
有区块链,其中每个区块头指向链中的先前区块头,然后在每个区块内有一个包含该区块中所有交易的Merkle树。
你做矿工的第一件事就是将你从待处理的交易池中获得的一组有效的交易编译成Merkle树。当然,你可以选择最多包含多少交易的区块的总大小的限制。然后,你将创建一个带有指向上一个区块头部的区块。在区块头中,有一个32位的随机字段,你不断尝试不同的随机数,寻找一个使区块的哈希值在目标之下的随机数——大体上,开始于所需的零数。矿工可以以0的顺序开始,并将其逐次增加1,寻找使区块成为有效的随机数。见图5.1。
图5.1:寻找一个有效的块。 在这个例子中,矿工尝试所有0的随机数。 它不产生有效的哈希输出,所以矿工然后会继续尝试一个不同的随机数。
在大多数情况下,你将尝试为每个单个可能的32位值进行随机数,但不会产生有效的哈希。在这一点上,你将不得不进一步改变。请注意,在图5.1中,您可以更改coinbase交易中的额外的随机数。在你耗尽区块头的所有可能的随机数后,你将更改coinbase交易中的额外随机数——比如通过将它增加一个,然后再次在区块头中搜索随机数。
当您更改coinbase交易中的随机数参数时,整个Merkle交易树必须改变(见图5.2)。由于coinbase随机数的变化将一直传播到数上,所以在coinbase交易中改变额外的随机数比改变区块头中的随机数的操作更昂贵。因此,矿工大部分时间都在改变区块头中的随机数,并且只有当他们耗尽区块头中的所有种可能的随机数而没有找到有效的区块时,他们会改变coinbase随机数。
图5.2:更改coinbase交易中的一个随机变量,一直在Merkle树上传播。
你尝试的广泛而绝大多数的通用机制不会奏效,但如果你坚持足够长的时间,你最终会发现Coinbase交易中额外的随机数的正确组合,以及区块头中产生的低于目标值的哈希的区块的随机数。当你找到这一点时,你想尽快宣布它,并希望你可以从中获利。
大家都在解决同样的难题吗?你可能想知道:如果每个矿工都在按照我们所描述的方式递增随机数,那么矿工不就是在解决完全一样的难题吗?不是最快的矿工总是赢家吗?答案是不!首先,矿工不太可能在同一个方面进行工作,因为每个矿工可能会包含一些不同的交易和不同的顺序。但更重要的是,即使两个不同的矿工正在处理相同的交易区块,区块仍然会有所不同。回想一下,在coinbase交易中,矿工们将自己的地址制定为新造币的所有者。这个地址本身将导致传播到Merkle树的根的变化,这确保没有两个矿工在完全相同的谜题上工作,除非他们共享一个公钥。这只会发生在两个矿工是同一个采矿池的一部分(我们稍后会讨论)的情况下,他们会进行沟通,以确保它们在coinbase交易中包含一个不同的随机数,以避免重复的工作。
实际上找到一个有效区块有多困难?
截止2015年3月,采矿困难目标(十六进制)为:
0000000000000000172EC0000000000000000000000000000000000000000000
所以任何有效区块的哈希必须低于此值。换句话说,您尝试的大约个随机数中只有一个可以工作,这是一个非常大的数字。一个近似值是它比地球上人口的平方还要大。所有,如果地球上的每一个人都是自己的地球,其中每个都有七十亿人,那么总人数将接近人。
确定难度。采矿难度每2016个区块更改一次,每两周发现一次。根据矿工在上一个2016个以前区块期间的效率按照以下公式进行调整:
next_difficulty = (previous_difficulty * 2016 * 10minutes) / (time to mine last 2016 blocks)
请注意,2016*10分钟恰好是两周,所以如果区块每10分钟创建一个,那么2016个区块将需要两周的时间才能挖掘出来。因此,这个公式的效果是,要保持网络平均每十分钟发现一块区块的难度。两周没有什么特别的,但这是一个很好的权衡。如果周期短得多,难度可能由于每一时期发现的区块数随机变化而波动。如果这个周期长得多,那么网络的哈希能力可能会变得太难平衡。
每个比特币矿工独立计算难度,只接受满足他们计算难度的区块。在不同分支机构的矿工可能不会计算相同的难度值,但任何两名矿工在同一区块上进行采矿时,也会对难度达成一致。这样就可以达成共识。
从图5.3可以看出,随着时间的推移,采矿难度不断增加。它不一定是线性增长或指数增长,而是取决于市场活动。采矿难度受到多少新矿工加入的因素的影响,反过来也可能受到比特币目前汇率的影响。一般来说,随着越来越多的矿工上线,采矿硬件的效率越来越高,发现区块越来越快,难度也越来越大,以便大概需要10分钟才能找到一个区块。
在图5.3中,你可以看到,在图形的红线上,即使整体网络哈希率正在顺利增长,也存在难度的阶梯函数。哈希步骤的结果是,难度只每2016个街区调整一次。
查看网络增长率的另一种方法是考虑平均找到一个区块需要多长时间。图5.4(a)显示了区块链中连续区块之间经过了多少秒。你可以看到,这种情况逐渐下降,跳起来,然后再逐渐下降。当然,发生的情况是,每2016个街区重置区块难度,平均区块时间回到大约十分钟。在下一个时期,难度保持不变,但越来越多的矿工上线。由于哈希功率已经增加,但难度并没有,区块发现地更快,直到在2016区块之后或者大约两个星期再次调整难度。
图5.3:随时间推移(2014年中期)的采矿困难。请注意,y轴以80,000 TH / s开始。
图5.4(a):查找区块的时间(2014年初)。请注意,y轴始于460秒。由于这一时期采矿业电力持续快速增长,在每两周的窗口内,发现一个区块的时间将逐渐减少。 来源:bitcoinwisdom.com
图5.4(b):找到块的时间(2015年初)。请注意,y轴以540秒开始。 随着网络增长放缓,找到每个区块的时间更接近10分钟,偶尔会在网络哈希功率实际收缩的时期内结束。来源:bitcoinwisdom.com
尽管目标是平均每十分钟发现一个区块,但在2013和2014年的大部分时间里,平均接近9分钟,并在每两周的周期结束时接近8分钟。快速计算显示,这需要每两周惊人的25%的增长率,或每年几百倍的增长率。
毫不奇怪,这不是永远可持续的,而在2015年,增长速度要慢得多(有时也是负面的)。在图5.4(b)中,我们可以看出,随着采矿能力更接近于稳态,发现每个区块的周期将保持在10分钟以内。它甚至可能需要超过10分钟,在这种情况下会降低难度。 一旦被认为是不可想象的,这在2015年已经相当频繁地发生了。
尽管迄今为止,该网络的采矿权力没有出现灾难性的下滑,但没有任何内在的原因说明这种情况不会发生。比特币崩溃的一个提议方案是“死亡螺旋”,其中汇率下降使得矿业开采无利可图,导致大量外流,从而导致价格进一步下跌。
5.2采矿硬件我们已经提到矿工必须做的计算是非常困难的。在本节中,我们将讨论为什么它在计算上是困难的,并且看看矿工用来执行这种计算的硬件。
矿工计算困难的核心工作是SHA256哈希函数。我们在第1章中抽象地讨论了哈希函数。SHA-256是通用密码哈希函数,是2001年标准化的更大的函数系列的一部分(SHA代表安全哈希算法)。SHA-256是一个合理的选择,因为这是Bitcoin设计时可用的最强密码哈希函数。它可能在比特币的寿命期间变得不那么安全,但是现在它仍然是安全的。 它的设计确实来自美国国家安全局(美国国家安全局),这导致了一些阴谋论,但它通常被认为是非常强大的哈希函数。
近距离看SHA-256。图5.5显示了更多关于SHA-256计算中实际发生的细节。 虽然我们不需要知道所有的细节来了解比特币的工作原理,但是对于矿工们需要解决的任务有一个一般性的看法是很好的。
SHA-256保持256位的状态。 该状态分为八个32位字,这使得它对32位硬件进行了高度优化。在每一轮中,状态中的一些字被采取——一些采用小的按位调整——并且加在一起mod 32。然后,整个状态被移位,结果是添加成为状态新的最左边的单词。该设计受到更简单的逐位线性反馈移位寄存器(LFSR)的启发。
边栏:SHA家族
SHA-256中的“256”来自其256位状态和输出。技术上SHA-256是SHA-2系列中几个紧密相关的功能之一,其中包括SHA-512(其状态较大,因此更为安全)。还有SHA-1,前一代具有160位输出,现在被认为是不安全的,但仍然在Bitcoin脚本中实现。虽然包括SHA-256在内的SHA-2系列仍然被认为是加密安全的,但下一代SHA-3系列已经被比赛挑选了。SHA-3今天处于标准化的最后阶段,但是Bitcoin被设计时它并不可用。
图5.5只显示了一轮SHA-256压缩功能。SHA-256的完整计算可以进行64次迭代。在每一轮中,都有一些稍微不同的常数,所以没有迭代是完全相同的。
图5.5:SHA-256的结构。这是一轮压缩功能。
矿工的任务是尽快计算此功能。记住,矿工们相互竞争,所以他们做得越快,就越赚钱。 为了做到这一点,他们需要能够操纵32位字,做32位模块化加法,还要做一些按位逻辑。
正如我们在短时间内将看到的,Bitcoin实际上需要将SHA-256应用到一个区块两次,以获得节点使用的哈希。这是比特币的怪癖。双重计算的原因尚未完全明确,但在这一点上,这只是一些矿工必须处理的一切。
CPU采矿
第一代采矿全部在通用计算机上完成——即通用中央处理单元(CPU)。实际上,CPU挖掘与运行如图5.6所示的代码一样简单。也就是说,矿工们以线性方式简单地搜索随机数,在软件中计算SHA 256,并检查结果是否为有效区块。另外,在代码中注意到,如上所述,SHA-256被应用了两次。
在通用计算机上运行有多快?在高端台式电脑上,你可能希望每秒计算大约2000万次哈希(MH / s)。 以这个速度,平均在2015年初的难度级别()需要几十万年的时间才能找到一个有效的块。 当我们说采矿是一个困难的时候,我们不开玩笑!
如果你今天在通用电脑上采矿,那么目前的困难就是CPU采矿不再有利可图。在过去的几年里,任何一个尝试在CPU上挖掘的人都可能不了解Bitcoin是如何工作的,可能非常失望的是,他们从来没有赚过钱。
GPU采矿。第二代开始时,当人们开始感到沮丧,他们的CPU是多么的缓慢,作为替换,他们开始使用他们的显卡或图形处理单元(GPU)。
几乎每个现代PC都内置了一个GPU来支持高性能图形。 它们的设计具有高吞吐量和高并行性,这两者对于Bitcoin采矿非常有用。 比特币挖掘可以容易地并行化,因为您可以尝试使用不同的随机存储器同时计算多个哈希值。2010年,发行了一种名为OpenCL的语言。OpenCL是一种通用目的语言,用于在GPU上执行图形以外的其他操作。 这是一种高级语言,随着时间的推移,人们在图形卡上更快速地运行了许多类型的计算。这为Bitcoin在GPU上的挖掘铺平了道路。
当时使用显卡进行挖掘有几个吸引人的属性。一方面,它们很容易被业余爱好者设置。你可以在线订购显卡,或者在大多数大型消费电子产品商店购买。它们是公众可以使用的最便捷的高端硬件。他们也有一些属性,使他们特别好地比特币挖矿。它们被设计用于并行,因此它们具有许多可用于同时进行SHA-256计算的算术逻辑单元(ALU)。一些GPU还具有对SHA-256非常有用的按位操作的具体指令。
大多数显卡也可以超频,这意味着你可以比实际设计的运行速度更快,如果你想承担可能会导致过热或故障的风险。这是游戏玩家多年来所要求的属性。使用Bitcoin采矿,运行芯片比设计的速度要快得多,即使通过这样做会引起一些错误。
例如,假设你可以运行显卡快50%,但这样做会导致SHA-256计算中的错误达到30%的时间。如果一个无效的解决方案被图形卡错误地声明为有效——很少会发生这种情况——你可以随时在CPU上仔细检查它。另一方面,如果错误地错过了有效的解决方案,那么你永远都不会知道。但是,如果你的超频速度提高可以克服由于错误导致的输出的减少,那么您仍然会向前推进。在上述示例中,与不超频相比,吞吐量是1.5倍,而成功率是0.7倍。该产品为1.05,这意味着超频将你的预期利润提高了5%。人们花了相当多的时间优化他们应该超频给定芯片多少以最大化利润。
最后,你可以从一个主板和CPU驱动许多显卡。所以你可以拿你的电脑,它将运行你实际的Bitcoin节点,从网络收集交易并组装区块,附加多个图形卡,试图找到正确的随机数,使区块的SHA-256有效。许多人创建了一些非常有趣的自制设置,如图5.7所示,从单个CPU驱动许多GPU。这还处于比特币的早期阶段,矿工们仍然是大多数爱好者,没有经验的运行服务器,但他们想出了一些相当巧妙的设计,如何将许多显卡放在一个小的地方,并保持足够的运行。
图5.7:用于Bitcoin采矿的家用GPU机架。你还可以看到他们用来构建原始冷却系统的风扇。资料来源:LeonardH,cryptocurrenciestalk.com。
矿工与游戏玩家
根据民间传说,2011年Bitcoin矿工购买了足够的GPU来打乱正常的市场。这造成了游戏社区的摩擦,他们发现在当地电子商店中发现某些流行的GPU越来越困难。然而,有趣的是,它可能导致玩家对Bitcoin矿业的兴趣增加,因为许多这些沮丧的游戏玩家了解了货币,以了解所有GPU所在的位置,其中的一些玩家自己成为了矿工!
GPU采矿的缺点
GPU采矿有一些缺点。GPU内置了很多硬件,用于进行无法用于采矿的视频处理。具体来说,它们具有大量的在SHA-256中完全不使用的浮点单元。当你将很多的它们彼此相邻时,GPU也不具有最大的冷却特性。 它们不是像在图中并排运行的那样;它们被设计为在一个单独的盒子中为一台计算机做图形计算。
GPU也可以拥有相当大的功率,所以相对于计算机需要使用大量的电力。另一个缺点是你必须建立自己的电路板或购买昂贵的电路板来容纳多张显卡。
在一个真正的高端显卡上,你可能会高达200 MH / s,每秒可能达到2亿次哈希,比使用CPU要好一个数量级。但是,即使这样改进了性能,即使你真的进取心十足,并且一起使用了一百个GPU,平均来说,你仍然需要300多年才能在2015年初的难度水平上找到一个区块。因此,今天,Bitcoin的GPU采矿基本上已经死亡,尽管它仍然有时在早期的代币(altcoins)中出现。
FPGA开采
在2011年的一轮,一些矿工开始从GPU转换到FPGA或现场可编程门阵列,在Bitcoin采矿的第一次实施之后,Verilog出现了一种用于编程FPGA的硬件设计语言。FPGA的一般原理是尝试尽可能接近定制硬件的性能,同时还允许卡的所有者自定义或重新配置“在现场”。相比之下,定制的硬件芯片是在工厂设计的,而且永远都在做同样的事情。
FPGA比显卡提供更好的性能,特别是在FPGA上进行简单说明的“bit fiddling”操作。使用FPGA也可以简化冷却,与GPU不同,你理论上可以使用卡上几乎所有的晶体管进行采矿。像GPU一样,你可以将多个FPGA集成在一起,并从一个中心单元驱动它们,这正是人们开始做的(参见图5.8)。总体而言,可以比使用显卡更加整齐,干净地构建大量的FPGA。
使用FPGA仔细实施,你可以达到每秒GH / s或十亿次散列。这肯定是超过CPU和GPU的性能优势,但即使你拥有一百个电路板,每个板卡具有1 GH / s的吞吐量,平均来说,在2015年初的难度水平,你仍然需要大约50年的时间才能找到一个比特币区块。
图5.8:一个自制的FPGA机架。虽然没有看到这里的冷却设置,但这样的机架需要一个冷却系统。
尽管性能增益,FPGA开采的日子相当有限。首先,他们被驱动去挖掘难以开采的比特币——在所有时间和超频——比消费级FPGA真正的设计能力。正因为如此,许多人在采矿时看到FPGA中出现错误和故障。它也很难优化32位加法步骤,这对于SHA-256来说至关重要。FPGA的访问也不太方便——大多数商店都无法购买,而知道如何编程和设置FPGA的人数少于GPU。
最重要的是,尽管FPGA的性能提高了,但是对于GPU,每个性能的成本只是略微改善了。这使得FPGA采矿是一个相当短暂的现象。虽然GPU挖掘主导了大约一年左右,但是FPGA开采的日子更加有限——仅在定制ASIC到达之前持续了几个月。
ASIC开采
今天的采矿由比特币ASIC或专用集成电路主导。
芯片是专为比特币采矿而设计,制造和优化的芯片。有几个大卖家将这些卖给各种各样的消费者:你可以选择稍大和更昂贵的型号,更紧凑的型号,以及具有不同性能和能耗声明的型号。
设计ASIC需要相当多的专业知识,而且他们的交付时间也很长。 尽管如此,Bitcoin ASIC的设计和制作却令人惊讶。 事实上,分析师表示,这可能是集成电路历史上最快的周转时间,解决指定问题,并在人手中拥有一个工作芯片。部分原因是比特币ASIC的前几代比较麻烦,其中绝大多数都没有提供承诺的性能数字。 比特币ASIC已经成熟,现在有相当可靠的ASIC可用。
直到2014年,由于网络哈希率的迅速增长,ASIC的寿命相当短暂,ASIC早期的大多数板卡在大约六个月内已经过时了。在这段时间内,大部分的利润都产生在前面。通常,矿工将在头六个星期内赚取ASIC一生预期利润的一半。 这意味着运输速度可以成为赚取利润的关键因素。由于行业不成熟,消费者经常遇到航运延误,板卡经常在到达时几乎过时。随着比特币哈希能力的增长速度已经稳定,采矿设备的使用寿命更长,但是在早期的时代,许多客户沮丧,供应商的欺诈行为也受到指责。
对于比特币的大部分历史来说,矿业经济学并没有对那些想上网、订购采矿设备、开始赚钱的小矿工有利。事实上,在大多数情况下,订购矿业硬件的人都会因为他们当时的计算而亏损。直到2013年,比特币的汇率才上涨到足以让绝大多数客户从亏损中获利。
实际上,采矿一直是一个昂贵的方式来简单地认为,比特币的价格会上涨,许多矿工——虽然它们在比特币采矿上赚了钱——如果他们把这些用于购买采矿设备上的钱投资比特币,最终在赚取利润的时候卖掉他们,这样就会变得更好。
你仍然可以在今天订购比特币矿业设备,我们不想阻止这一点作为了解比特币和加密货币的方式。不过,我们再次注意到,这不是一种赚钱的方法。一旦你考虑到电力和制冷的价格,大多数今天销售的ASIC就不太可能为采矿奖励而自付。
专业采矿
今天,矿业大多从个人身上转移到专业矿业中心。关于这些中心如何运作的确切细节并不十分了解,因为公司希望保护其设置以保持竞争优势。据推测,这些操作通过购买稍微更新和更高效的ASIC来保持盈利,而不是可用于折扣的批量销售。在图5.9中,我们看到了格鲁吉亚共和国专业采矿中心的图片。
图5.9:BitFury采矿中心,格鲁吉亚共和国的专业采矿中心。
在确定建立采矿中心的地点时,最重要的三个方面是:气候,电力成本和网络速度。特别是,你想要一个寒冷的气候来保持冷却成本最低。比特币矿业的降温特别具有挑战性,据估计,比起传统数据中心,每平方英尺的电力数量会增加一个数量级(并因此发出一个数量级的热量)。你显然想要便宜的电力。你还希望将快速网络连接与Bitcoin对等网络中的其他节点良好连接,以便你可以在宣布后立即收到新的区块。据报,格鲁吉亚和冰岛是Bitcoin采矿数据中心的热门目的地。
与金矿的相似点。虽然“采矿”可能似乎只是一个可爱的名字,但如果我们回顾并考虑采矿的演变,我们可以看到比特币矿业和黄金开采之间有趣的相似之处。对于初学者来说,与许多年轻的业余人士一样,急于想要尽快进入业务,这两者都看起来有类似的淘金热心态。
而比特币开采,我们看到从CPU、GPU到FPGA的缓慢演变,直到目前的ASIC设计,黄金开采从锅炉的个人向小团体转移到水闸箱,进入采矿——由大型矿业组织组成,用水喷洒山坡——现代黄金开采往往利用巨大的开放露天矿从地球提取原料(见图5.10)。无论是比特币还是黄金,随着时间的推移,对个人的友好性和可获得性都在下降,大公司最终巩固了大部分业务(和利润)。在这两个地方出现的另一个模式是,大多数利润都成为了卖设备的收入,无论黄金锅或ASIC采矿,都是个人希望致富的代价。
图5.10:采矿的演变。可以看到比特币矿业的演变与黄金开采的演变之间有明显的平行。两者最初都是对个人友好的,随着时间的推移成为大公司控制的大规模运营。
未来
目前,ASIC采矿是比特币盈利的唯一现实手段,对小型矿工来说不是很友好。这提出了一些关于将要发生的事情的问题。小矿工是否离开比特币矿业,还是有办法重新融入其中?此外,ASIC采矿和专业采矿中心的发展是否违反了比特币的原始愿景,即网络中的每个人都用自己的电脑开采的完全分散的系统?
此外,如果这确实违反了Satoshi Nakamoto对Bitcoin的原始愿景,那么我们是否最好还是采用一种系统,唯一使用CPU挖矿?在第8章中,我们将考虑这些问题,并考虑可能对ASIC不友好的替代形式的想法。
重复这个循环。在这里值得一提的是,几个较小的altcoins确实使用了与SHA-256不同的难题,但在比特币的采矿中也看到了类似的轨迹。我们将在第9章中更多地讨论这些altcoins,但回想一下,ASIC设计芯片和发货之间仍然有很长的交付时间,所以如果一个新的altcoin使用了一个新的谜题(即使只是修改版本的SHA-256) ,这将花费一些时间才能使用ASIC。通常情况下,开采将在比特币是从CPU到GPU和/或FPGAs到ASIC(如果altcoin是非常成功的,像LiteCoin)。
因此,小规模矿工的一个策略可能是尝试开创新的代币,这对于大型矿业集团投资来说还不够有价值,就像已经被成熟黄金矿区淘汰的小金矿矿工也许会尝试勘探未经证实的新领域。当然,这意味着先锋们面临着重要的风险,即altcoin将永远不会成功。
采矿池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章中考虑这个问题。
采矿激励和策略
我们花了大部分时间来描述作为矿工的主要挑战是如何获得良好的硬件,发现便宜的电力,尽可能快地起身和运行,并希望有一些好运气。每个矿工在选择哪些工作之前,还有一些有趣的战略考虑。
要包括哪些交易
矿工们可以选择在区块中包含哪些交易。默认策略是包括交易费用高于某一最低成本的交易。
挖掘哪个区块
矿工们也可以决定他们想要挖掘哪个区块。此决定的默认行为是扩展最长的已知有效链。
在相同高度的区块之间选择
如果两个不同的区块在大约相同的时间被开采和宣布,它将产生一个1区块的分叉,任何一个区块都可以在最长的有效链路策略下被允许。矿工们必须决定哪个区块要延伸。默认行为是建立在他们首先听到的区块的顶部.
何时宣布新的区块
当他们找到一个区块时,矿工们必须决定什么时候向比特币网络公布。默认行为是立即公布,但可以选择等待一段时间才公布。
因此矿工面临着许多决定。对于每个决定,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必须面对从固定矿业回报到交易费用的过渡。我们不知道这将如何发挥作用,并使用游戏理论模型试图预测它是当前一个非常有趣的研究领域。
翻译 | 尹国梓
视觉设计 | 蘇四
本文是由荣格财经区块链技术应用分社社长尹国梓翻译而成。从即日起系列连载。特此说明。
版权归著作人,本文不构成对投资者的任何投资意见。投稿、约访、转载、参加活动等互动,及进分社群看直播,请联系屈公子:L_Forex