1703866315
1703866316
不出所料,这种增长不会无休止地进行,2015年的增速就降低很多(偶尔也会负增长)。在图5.4(b)中,我们可以看到全网哈希算力达到了一个稳定的状态,发现每个区块的时间非常接近10分钟,甚至有时会超过10分钟,在这种情况下难度将会被调低。这种曾经被认为不可想象的状况却在2015年频繁发生。
1703866317
1703866318
虽然到目前为止,全网哈希算力还没有经历过灾难性的倒退,但是并不排除它发生的可能性。一个有关比特币崩盘的设想被称作“死亡螺旋”,不断下降的比特币价格导致挖矿无利可图,矿工们因此而退出挖矿(全网运算能力下降),继而进一步导致价格下跌。
1703866319
1703866320
[1]如果下一个区块始于其他人发现的有效区块,你发现的这个区块就会变成无效区块而被丢弃。——译者注
1703866321
1703866322
1703866323
1703866324
1703866326
区块链技术驱动金融:数字货币与智能合约技术 5.2 挖矿所需硬件
1703866327
1703866328
前面我们谈到矿工所要做的计算是十分困难的。我们现在谈一下为什么计算如此困难,以及看一看矿工用来进行这些计算所用到的硬件设备。
1703866329
1703866330
矿工计算难度的核心在于,对SHA-256哈希函数的运算。我们在第1章抽象地讨论过哈希函数。SHA-256是一个通用的密码学哈希函数,它是在2001年被标准化的密码学哈希函数大家族里的一员。SHA是安全哈希算法(Secure Hash Algorithm)的简称。SHA-256是一个不错的选择,因为它是比特币被发明时可用的密码学哈希函数中保密性最强的。虽然它的安全性有可能随着时间推移而慢慢降低,但至少现在它还是很安全的。SHA-256的设计来自美国国家安全局(NSA),这也导致了一些阴谋论的诞生,但是并不影响它是一个很强的哈希函数的事实。
1703866331
1703866332
近距离了解SHA-256
1703866333
1703866334
图5.5展示了SHA-256运算的具体细节,虽然我们不需要知道比特币工作原理的所有细节,但是对矿工计算任务的大概了解是很有帮助的。
1703866335
1703866336
1703866337
SHA家族
1703866338
1703866339
SHA-256名称中的“256”代表它有256位的状态和输出,技术上来说,SHA-256是SHA-2函数家族中几个密切相关的函数成员之一,包括SHA-512(它有更大的状态位,所以也更加安全)。还有一个是SHA-1, 这是一个有160位输出的早期函数,虽然目前认为安全性不高,但是同样应该在比特币脚本里。
1703866340
1703866341
整个SHA-2家族,包括SHA-256在密码学上的安全性是得到公认的,而下一代产品SHA-3家族已经从一个公开的竞赛(由美国国家标准与技术研究所举办)中诞生了。SHA-3目前正在进行最后阶段的标准化测试,但在比特币出现的时候,它还没有出世。
1703866342
1703866343
SHA-256是一个256位的状态机。这256个状态被分割成8个32位的字段,这样它可以最优化地运行在32位的硬件上。每一轮运算选择一定数量的字段——有些会进行一些小的逐位调整——最终进行32位模加法运算(modular addition),然后运算结果被移到状态最左的第一个字段,这样使得整个状态进行向右位移。这种设计的思路来自简单位的线性反馈移位寄存器(Linear Feedback Shift Registers,简称LFSR)。
1703866344
1703866345
图5.5展示了一轮SHA-256的压缩函数运算,一个完整的SHA-256运算要做64次这样的迭代运算,在每一轮运算中,会使用稍微不同的常数,所以所有的迭代运算都是不一样的。
1703866346
1703866347
矿工的任务就是尽可能快地进行这种函数运算。矿工们互相比拼运算速度,算得越快收益越高。为了实现尽可能快的速度,矿工需要进行32位字段操控,32位模加法运算,同时做按位逻辑运算。
1703866348
1703866349
1703866350
1703866351
1703866352
图5.5 SHA-256的结构
1703866353
1703866354
注:这是一轮压缩运算。Maj是按位运算的。Ch也是按位运算的,根据第一个输入值的不同而决定是选择第二个还是第三个。∑0和∑1通过按位循环和⊕运算来操纵32位的字符输入。
1703866355
1703866356
我们很快就会看到,在比特币机制下,为了得到供其他节点使用的哈希函数,实际上要求两轮SHA-256运算。这是比特币的奇怪之处,进行两次运算的原因并不清楚,但这就是比特币的个性,作为比特币矿工只能服从。
1703866357
1703866358
CPU挖矿
1703866359
1703866360
第一代挖矿工作都是在普通电脑上完成的,也就是用通用中央处理器(CPU)来进行运算。事实上,CPU挖矿的工作就像图5.6中代码所示的逻辑那样简单,也就是说,矿工简单地按照线性的方式尝试所有的临时随机数,在软件中进行SHA-256的运算,并检查结果确认是否找到一个有效区块。请注意,正如我们之前提到过的,这段代码要进行两次SHA-256运算。
1703866361
1703866362
1703866363
1703866364
[
上一页 ]
[ :1.703866315e+09 ]
[
下一页 ]