在今天,挖矿已经从个人领域转到了大型专业挖矿中心。为了保持竞争优势,运作这些挖矿中心的公司不愿意公布其运营细节。据猜测,这些运营者大量采购打过折的更新的功效更高的ASIC矿机而不是采购那些能够直接出售给个人的ASIC矿机来维持利润。
图5.9 Bitfury的挖矿中心
如今使用一个普通电脑用CPU挖比特币,在目前的难度下已经无利可图了。在过去的几年里,用CPU挖矿的旷工可能会非常失望地发现,他们永远不可能通过挖矿赚到钱,因为他们不了解比特币是如何运行的。
GPU挖矿也有缺点。GPU有大量的内置硬件来进行图形处理,这些特定硬件对比特币挖矿没有任何用处,比如它们大量的浮点运算单元(floating point units),在SHA-256的运算中完全用不到。
同时GPU也没有很好的冷却处理设置,尤其是当你把大量的GPU堆放在一起的时候,这个问题就尤为突出。设计显卡的时候并没有考虑如图5.7所示的这种堆放的情形,原始的设计场景就是在一台电脑、一个机箱、一块显卡运行做图形处理而已。
整个SHA-2家族,包括SHA-256在密码学上的安全性是得到公认的,而下一代产品SHA-3家族已经从一个公开的竞赛(由美国国家标准与技术研究所举办)中诞生了。SHA-3目前正在进行最后阶段的标准化测试,但在比特币出现的时候,它还没有出世。
当时,通过显卡来挖矿有好几个吸引人的地方。首先,买显卡很容易,而且哪怕是业余爱好者也能轻松配置显卡。你可以在网上或大多数专营电子产品的商场里买到它。对大众来说,显卡是最容易获得的高端硬件设备。其次,显卡还有一些格外适合比特币挖矿的特性:显卡的并行性设计使其具备很多算术逻辑单元(Arithmetic Logic Units,简称ALU),可以同时进行SHA-256运算。有一些GPU还特别集成了针对位移操作的指令,这对SHA-256的运算非常有用。
2011年左右,用于现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)的硬件设计语言Verilog,第一次用于比特币挖矿。一些矿工开始用FPGA来代替GPU进行挖矿。
虽然性能提高了,但由于以下几个原因,用FPGA挖矿的时代也非常短暂:首先,使用FPGA来挖矿其实更加困难——几乎需要一直超频使用——这远超FPGA供普通消费者而设定的频率。因为这个原因,很多人在用FPGA挖矿的时候经常看到各种报错和故障。其次,优化FPGA的32位加法处理上十分困难,而这在SHA-256的运算中非常关键。最后,FPGA在多数商店都买不到,而且相比GPU来说,只有少数人才知道怎么搭建FPGA并进行相应的编程。
到2014年年底,ASIC芯片的寿命十分短暂,原因是整个网络的运算能力不断地快速上升。绝大部分早期的ASIC芯片在6个月后就被淘汰了。在这段时间里,大部分的利润都是在早期实现的(后期几乎没有什么利润了)。矿工往往在ASIC芯片“保鲜期”的前6个星期可以实现整个利润的一半,这就使得芯片的出货速度显得至关重要。基于这个行业的不成熟,许多矿工经常遇到延迟出货的情况,有些芯片送到客户手上的时候已经快要被淘汰了。由于比特币的全网运算能力已经稳定下来,现在的比特币挖矿设备有比较长的寿命,但在早期,失望的客户对供应商的欺诈控诉的事件时有发生。
现在,用ASIC挖矿是唯一一种可以赚钱的比特币挖矿手段,但对个体矿工来说,是十分不友好的。人们不禁要问,未来会如何发展?小规模矿工是否永远不可能再参与到比特币挖矿中?是否有办法把小规模矿工重新纳入挖矿体系中去?更重要的是,现在使用的ASIC和专业挖矿中心是否已经违反了比特币当初设计的初衷:一个完全去中心化的系统,在这个系统上里每个人都能用自己的电脑去挖矿。
矿工的任务就是尽可能快地进行这种函数运算。矿工们互相比拼运算速度,算得越快收益越高。为了实现尽可能快的速度,矿工需要进行32位字段操控,32位模加法运算,同时做按位逻辑运算。
图5.10 比特币和黄金的挖矿进程
注:这是一轮压缩运算。Maj是按位运算的。Ch也是按位运算的,根据第一个输入值的不同而决定是选择第二个还是第三个。∑0和∑1通过按位循环和⊕运算来操纵32位的字符输入。
此外,如果这已经违背了中本聪对比特币的最初设计,换成系统只允许CPU来挖矿是不是更好?我们将在第8章探讨这些问题,以及一些对ASIC不友好的替代方案。
图5.6 CPU挖矿的伪代码
图5.5展示了SHA-256运算的具体细节,虽然我们不需要知道比特币工作原理的所有细节,但是对矿工计算任务的大概了解是很有帮助的。
我们很快就会看到,在比特币机制下,为了得到供其他节点使用的哈希函数,实际上要求两轮SHA-256运算。这是比特币的奇怪之处,进行两次运算的原因并不清楚,但这就是比特币的个性,作为比特币矿工只能服从。
图5.5 SHA-256的结构
资料来源:István Finta, bitcointalk.org
注:我们可以看到,比特币挖矿和黄金采掘进程有一个清晰的类似进程,两种活动在最初都对个人用户很友好,但是随着时间的推移,被大型公司采取集中式大批量运作控制。
GPU也非常耗电,所以一台普通的电脑也会消耗很多电。由此引发的另一个缺点就是,你要么自己构建特定的主板,要么花大价钱购买可以搭载大量显卡的特定的主板。
几乎每一个现代个人电脑都有内置的GPU以支持高性能图像处理,这些GPU都有高吞吐量和高并行处理功能,这两点对比特币挖矿都非常有利,比特币挖矿存在大量的并行处理,因为你需要同时用不同的临时随机数计算多个哈希值。2010年,有一门计算机语言开放运算语言(Open Computing Language,简称OpenCL)诞生了,这是一个可以使GPU进行非图像处理类工作的通用语言。OpenCL是一门高级语言,人们可以用它在显卡上做很多种类型的运算,而且速度比在CPU上的要快。这给通过GPU来进行比特币挖矿铺平了道路。
注:在格鲁吉亚运作的专业挖矿中心。
事实上,有一些规模较小的另类币已经使用了和SHA-256不同的解谜算法,但是它们的挖矿发展轨迹和比特币没有什么不同。我们将在第8章到第10章更深入地讨论这些另类币,但是请记住,ASIC的研发和生产有着比较长的时间周期,所以如果一个使用新的解谜算法的另类币(即使只是在SHA-256的基础上做一点修改),在有针对性的ASIC面世之前还是会有一段时间。通常跟比特币一样,其他另类币的挖矿发展也会经历从CPU到GPU,再到FPGA,或者直接到ASIC的过程(前提是这个另类币非常成功,比如莱特币)。
大多数显卡都可以超频,这意味着如果你愿意承担显卡过热或者出现故障的风险的话,你可以让显卡以高于设计频率的频率更快地运行。超频是游戏玩家们渴望了多年的特性。对于比特币挖矿来说,超频会增加收益,即使超频可能引起一些运算错误。
最重要的是,即使在性能功耗比方面,FPGA相比GPU的提升也不是很高,这就使得用FPGA挖矿只是一个短期现象。尽管GPU挖矿的时代持续了大约一年,而FPGA存在的时间更加有限——仅仅存在了几个月,之后定制化的专用集成电路技术(Application Specific Integrated Circuits,简称ASIC)就诞生了。
FPGA的工作原理是在追求定制硬件的最佳性能的同时,用户可以现场调试或者修改硬件参数。相比之下,常用的硬件是在出厂之前就设计好的,以后是无法更改定制而只能永远做同样的工作。
根据民间传说,2011年,由于比特币矿工采购了太多的显卡以至于影响到了正常的市场需求,这造成了比特币社区和游戏社区之间的摩擦,因为游戏玩家们发现采购某个热门显卡变得越来越难。有趣的是,尽管如此,很多失望的游戏玩家因此而对比特币产生了兴趣,甚至有些游戏玩家因此而变成了比特币矿工!
一个非常高端的显卡经过超频之后可能使得运行速度达到200MH/s,也就是说,每秒可以进行2亿次哈希运算,这是用CPU不可能达到的一个数量级。但是即便如此,即使你将100块这样的显卡集成在一起进行运算,根据2015年早期的比特币挖矿难度,仍旧需要运算几百年才有可能找到一个有效区块。因此,用GPU来挖矿基本上已经成为历史,但是在其他一些另类币的早期阶段还是很有效率的。
在比特币历史的大部分时间里,挖矿的经济效益对小矿工来说一直不是很好,这些小矿工们需要通过在线预定矿机,等待矿机生产送货,然后再开始挖矿赚钱。实际上,大多数情况下,由于不断增加的挖掘难度,很多人是一开始就注定要亏钱的。好在到2013年的时候,比特币价格大涨,彻底扭转了比特币矿工亏钱的状况。实际上,挖掘比特币一直是一个很昂贵的投资,因为要赌注比特币的价格会上升,即使是在挖掘比特币中赚钱的那些矿工,如果能够把投资于挖掘设备的钱直接用于购买比特币,并在盈利时卖掉,这样他们的状况会更好些。
图5.7 一个用于比特币挖矿的家庭组装式GPU机架
因此,小规模矿工的策略也许应该是尝试一些新的另类币,在它们的价值还没有足够大到吸引大型挖矿集团投资的时候,成为这些另类币的挖矿先行者,就跟黄金采掘的过程一样,小规模矿工可以去尝试那些还没有被证明储量的区域。当然,这也意味着先行者们将会面临一个重大的风险,也就是这些另类币有可能永远不会成功。
精心使用FPGA可以使得运算速度上升到1GH/s,也就是每秒10亿次哈希运算。这显然比CPU或者GPU在性能上都有很大的提高,不过即使你有100块每秒运算1GH/s的FPGA板,在2015年早期的比特币难度之下,平均仍旧需要100年的时间才能找到一个有效区块。
SHA-256名称中的“256”代表它有256位的状态和输出,技术上来说,SHA-256是SHA-2函数家族中几个密切相关的函数成员之一,包括SHA-512(它有更大的状态位,所以也更加安全)。还有一个是SHA-1, 这是一个有160位输出的早期函数,虽然目前认为安全性不高,但是同样应该在比特币脚本里。
图5.5展示了一轮SHA-256的压缩函数运算,一个完整的SHA-256运算要做64次这样的迭代运算,在每一轮运算中,会使用稍微不同的常数,所以所有的迭代运算都是不一样的。
如今你仍然可以购买矿机,我们也不会劝阻你通过这种方式去了解比特币和加密数字货币,但是我们再次强调,这不是一个明智的生财之道。考虑到矿机运行所需要耗费的电力成本以及冷却成本,大多数ASIC矿机都无法靠挖矿来赚回成本。
矿工计算难度的核心在于,对SHA-256哈希函数的运算。我们在第1章抽象地讨论过哈希函数。SHA-256是一个通用的密码学哈希函数,它是在2001年被标准化的密码学哈希函数大家族里的一员。SHA是安全哈希算法(Secure Hash Algorithm)的简称。SHA-256是一个不错的选择,因为它是比特币被发明时可用的密码学哈希函数中保密性最强的。虽然它的安全性有可能随着时间推移而慢慢降低,但至少现在它还是很安全的。SHA-256的设计来自美国国家安全局(NSA),这也导致了一些阴谋论的诞生,但是并不影响它是一个很强的哈希函数的事实。
SHA-256是一个256位的状态机。这256个状态被分割成8个32位的字段,这样它可以最优化地运行在32位的硬件上。每一轮运算选择一定数量的字段——有些会进行一些小的逐位调整——最终进行32位模加法运算(modular addition),然后运算结果被移到状态最左的第一个字段,这样使得整个状态进行向右位移。这种设计的思路来自简单位的线性反馈移位寄存器(Linear Feedback Shift Registers,简称LFSR)。
当今的挖矿市场主要被ASIC所主导。这些IC芯片(集成电路芯片)被设计、制造、优化,就是为了比特币挖矿这个唯一目的。有几个大型的供应商出售这些芯片,消费者可以买到不同种类的ASIC矿机——较大型但略微昂贵点的款式,或者更加小巧的,当然还有一些可以节省能源的环保型等。
普通电脑运行这段代码到底有多快?一台高端的个人桌面电脑,每秒可以计算大约2千万次哈希函数(20MH/s),按照这个速度,根据2015年早期的难度水平(267),大概需要几十万年来找到一个有效区块。毫不夸张地说,挖矿真的非常困难!
举例来说,将显卡超频50%,也就是说运算速度加快50%,同时可能会造成SHA-256运算出错概率增加30%。如果显卡错误地接受了一个不正确的运算结果——虽然不太可能发生——你还可以通过CPU来进行二次确认。然而,你可能永远都不会知道一个正确的运算结果被错过了。但是通过超频产生的运算速度的增加,完全可以抵消由于显卡运行错误产生的正确输出减少,这样超频还是合算的(从经济效益上来说)。在上述的例子中,超频使得吞吐量增加到原来的1.5倍,而运算成功率降低到了0.7,那么乘积就是1.05,也就是意味着超频使得你的获利增加了5%。为了最大化收益,人们花了很多时间去优化最佳的超频比例。
前面我们谈到矿工所要做的计算是十分困难的。我们现在谈一下为什么计算如此困难,以及看一看矿工用来进行这些计算所用到的硬件设备。
最后,你可以通过一个CPU和一个主板加载许多个GPU。然后你便可以在安装了多个GPU的电脑上运行比特币节点,监听网络收集交易,组装区块,同时用多个GPU进行SHA-256的运算,以更快地找到正确的临时随机数及其对应的有效区块。很多人创造性地发明了很多有趣的“自制型”硬件设置,如图5.7所示,用一个CPU来驱动很多个GPU。这种情况仅发生在比特币的早期,当时大多数矿工都是比特币的爱好者,他们并不具备服务器搭建及运营经验。但是他们还是做了很多巧妙的设计,使得大量的GPU可以在一个较小的空间里同时运行,同时还解决了散热的问题。
第二代矿工意识到用CPU挖矿是在做无用功,他们开始用显卡或者图形处理器(GPU)来挖。
SHA家族
第一代挖矿工作都是在普通电脑上完成的,也就是用通用中央处理器(CPU)来进行运算。事实上,CPU挖矿的工作就像图5.6中代码所示的逻辑那样简单,也就是说,矿工简单地按照线性的方式尝试所有的临时随机数,在软件中进行SHA-256的运算,并检查结果确认是否找到一个有效区块。请注意,正如我们之前提到过的,这段代码要进行两次SHA-256运算。
图5.8 家庭组装式FPGA机架
矿工和游戏玩家的对比
设计ASIC芯片需要非常专业的知识,它们所需要的研发周期也比较长。尽管如此,比特币ASIC芯片的设计制造过程(从发现问题到制作出解决问题的芯片)出乎意料地迅速,甚至打破了芯片行业的业界纪录。但弊端是前几代的早期芯片的设计有许多缺陷,而且大多数芯片没有达到它们所承诺的性能指标。但现在的比特币矿机芯片技术,已经相当成熟可靠了。
要建立一个挖矿中心,需要具备三个重要因素:气候、电费、网络接入速度。尤其是要找一个气温偏寒的地方,这样可以节省冷却费用(大型计算中心会产生大量的热量,如不马上降温,会损害矿机)。冷却是比特币挖矿最大的挑战,其挖矿本身的耗电量,用单位面积来算要超过传统的数据中心,所以也会产生差不多当量的热量需要冷却。当然那里的电费要便宜。另外,接入网速要快,使得与比特币网络中的其他节点更快速地链接,这样当新的区块被广播出来的时候,你可以很快监听到。基于这些考量,所以格鲁吉亚和冰岛成为比特币挖矿中心的首选之地。
比特币挖矿经历了一个逐渐演化的过程:从CPU到GPU,再到FPGA,最终达到现在的ASIC。而历史上的挖金矿则是从个人拿着盘子在沙里淘金,到一小群人用流沙槽来淘金,再到一群人用水冲刷金山来淘金,直到现代机械化露天挖矿(如图5.10)。比特币与黄金都从个人操作为主逐步演变为大公司专业运作。另外一个相似点就是,大多数的利润都被设备制造商拿走了,不管是黄金采掘设备还是比特币ASIC矿机生产商,而埋单的都是那些希望一夜致富的人。
资料来源:Xiangfu Liu,www.openmobilefree.net
图5.9就是一个在格鲁吉亚运作的挖矿中心的图片。
尽管比特币挖矿这个名词起得很有意思,如果回顾比特币挖矿的发展历程,我们就不难发现其与历史上的挖金矿有着有趣的相似之处。它们都开始于类似的淘金者热潮,很多年轻人和业余爱好者积极地参与其中。
FPGA比GPU的性能好,特别是在数位操作(bit fiddling)方面FPGA很轻易就可以做到。FPGA也很容易冷却,不像GPU,FPGA理论上可以使用硬件板卡上的每一个晶体管进行挖矿运算。跟GPU一样,可以将很多FPGA堆叠在一起,通过一个中央处理单元来驱动所有的FPGA,如图5.8所示。总体来说,相比显卡堆叠,我们可以构建一个更加干净整洁的大型FPGA阵列。