第五章 比特币挖矿bitcoin mining
5.1 比特币矿工的任务
要成为矿工,必须加入比特币网络并与其他节点相连。
建立链接之后,需要完成六个任务:
1)监听交易广播(验证其签名是正当有效的,交易输出没有被重复支付)
2)维护区块链网络和监听新的区块。
3)组装一个备选区块。(一旦拥有最新的全部区块链数据备份,则可以制造你自己的区块)
4)找到一个让你的区块有效的随机数。
5)希望你的区块被全网接受。(即使找到一个区块也不能保证该区块会成为共识链concensus chain的一部分。
6)利润。如果其他矿工接受了你的区块,则你可以获得利润。若在该区块里的任何交易都有交易费,则所有交易费是矿工所有的。
矿工的任务可分为两类:
1)验证交易和区块。
比特币网络赖以生存和运转的基础,比特币协议需要矿工的首要原因。
2)和其他矿工竞争,争取可以找到区块并因此获益。
不是比特币网络存在所必需的,是为奖励矿工去完成第一类任务而设置的。
综上:两个任务是使比特币成为一个数字货币的必要条件(矿工必须获得奖励才会去完成这些任务)
寻找有效区块
如何找到一个使区块有效的随机数?
区块链主要有两层基于哈希函数的结构:1)第一层在区块链上,每个区块的头部都有一个指针指向前一个区块。2)第二层是在每一个区块里,包括所有交易的梅克尔树。
矿工首先需要从其交易池中选出一系列有效的交易并且编译成梅克尔树。(只要不超过每个区块随机数的交易上限,可以选择编译的交易数量)
矿工之后需要组装出一个新的区块,让其头部(有一个32位的随机数区域)指向区块链上的前一个区块。(你需要不断试临时随机数找到能使整个区块的哈希值小于目标值(目标值特点是以零开头的特定位数的数值))
随机数试过所有32位可能的取值后,还没找到一个有效的哈希值怎么办?
当你遍历区块头部随机数所有可能的取值后,可以改变币基(coin-base)里的随机数。(比如+1,然后再重新改变区块头部随机数来寻找)
改变币基里的随机数,整个梅克尔树上交易的哈希值都会改变(币基值的改变会向上传递)。
最终找到一对临时的随机数组合:头部随机数和币基随机数,用来产生符合哈希值要求的新区块,宣布,就有希望获得相应的区块奖励。
每个人都在运算同一个谜题吗?
每个矿工都会把或多或少不同的交易用不同的次序来放进区块内,因此不太可能走在完全相同的一个区块上进行计算。
就算两个不同的矿工组建的区块里包含了相同的交易,这两个区块的哈希值也不同(币基交易里,矿工会写自己的地址接收新铸币),除非两个矿工共享公开密钥。
只可能是两个矿工同在一个矿池,但是他们会互相通信,确保使用不同的币基临时随机数以避免重复工作。
找到一个有效区块很难吗?很难。挖矿的目标区域,任何有效区块的哈希值必须低于这个值。
决定难度
每挖出2016个区块,挖矿难度会改变一次(约为2周)。
难度的改变根据上2016个区块的挖矿效率来决定的。即:
下一个难度=(上一个难度201610min)/产生上2016个区块所花费的时间
5.2 挖矿所需硬件
矿工计算难度的核心在于对SHA-256哈希函数的运算。(SHA-256是一个通用的密码学哈希函数,SHA是安全哈希算法)
SHA-256
SHA家族?
SHA-256中256代表有256位状态和输出。技术上,SHA-256是SHA-2函数家族中几个密切相关的的函数成员之一,包括SHA-512(状态位更大更安全)。SHA-1(160位输出,目前认为安全性不高)
SHA-256?是一个256位状态机,被分割成8个32位字段,可最优化运行在32位硬件上。(32位模加法,右位移,设计思路来自简单位的线形反馈移位寄存器)
下图展示了一轮SHA-256的压缩函数运算,一个完整的SHA-256运算要做64位这样的迭代运算。参见146页图。
比特币机制奇怪之处?比特币机制下,为得到供其他节点使用的哈希函数,实际上要求两轮SHA-256运算,原因不清楚。
CPU挖矿
第一代挖矿:电脑上通过CPU进行计算。(矿工知识简单的按照线性的方式尝试所有的临时随机数,在软件中进行SHA-256运算,检查结果确认是否找到一个有效区块)
GPU挖矿
第二代挖矿:显卡或者图形处理器GPU挖矿。GPU有高吞吐量和高并行处理功能。显卡的并行性设计使其具备很多算术逻辑单元ALU,可以通过进行SHA-256运算。
2010年,OpenCL诞生,它可使GPU进行非图片处理类工作的通用语言。
缺点:
1)GPU大量的内置硬件进行图形处理,对比特币挖矿无用。
2)GPU没有很好的冷却处理设置。
3)GPU非常耗电。
现场可编程门阵列挖矿
2011年左右,用于现场可编程门列阵Field-Programma Gate Array 简称FPGA)硬件设计语言Verilog,第一次用于比特币挖矿。
利用FPGA代替GPU进行挖矿。
工作原理:追求定制硬件的最佳性能同时,用户可现场调试或者修改硬件参数。
优点:
1)性能比GPU好,特别是数位操作。
2)FPGA易冷却。
缺点:导致其只存在了几个月,就应运而生ASIC
1)FPGA挖矿其实更加困难(一直在超频使用),故经常看到各种报错和故障。
2)优化FPGA的32位加法处理上十分困难(而这个在SHA-256中非常重要)
3)FPGA难购买。
专用集成电路技术挖矿
当今的挖矿市场主要被ASIC所主导,这些IC芯片被设计制造优化,就为了比特币挖矿这唯一目的。
考虑到矿机运行所需耗费的电力成本以及冷却成本,大多数ASIC矿机都无法靠挖矿赚回成本。
如今:专业挖矿的天下
书中引用了Bitfury的挖矿中心图。
如何建立一个挖矿中心?首先需要具备:气候(气温偏寒,节省冷却费用)、电费、网络接入速度。冷却时比特币挖矿最大的挑战,其挖矿本身的耗电量,用单位面积来算要超过传统的数据中心。
与挖金矿的相似之处
比特币挖矿经历了:从CPU到GPU,到FPGA,最后到现在的ASIC。
5.3 能源消耗和生态环保
根据热力学里的蓝道尔原理,任何一个不可逆转的计算都会消耗一定的能源,该计算也可被认为是一种信息丢失的过程。原理之处:任何移位运算都会消耗一定量(k Tln 2)的焦耳,k是玻耳兹曼常数,T代表芯片以开尔文为单位的温度)。综上: 每进行一个不可逆的数位运算都会消耗一个最小量的焦耳,能源是永远不会被摧毁的,只会互相转变。