比特币获取的ASIC实现-IC学习笔记(五)


比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。具体比特币的介绍不是这里的重点,本文分为两部分比特币的ASIC获取的发展历史以及具体的实现方式。

1.1 比特币的简单介绍

与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。基于密码学的设计可以使比特币只能被真实的拥有者转移或支付。这同样确保了货币所有权与流通交易的匿名性。比特币与其他虚拟货币最大的不同,是其总数量非常有限,具有极强的稀缺性。该货币系统曾在4年内只有不超过1050万个,之后的总数量将被永久限制在2100万个。

在币圈,真正是明明白白主动挣比特币的基本上只有两种人:一种是组织别人发币,自己赚佣金;一种是挖矿。

1.2 挖矿工具演变史

电脑为通用性计算设备,可以进行各种计算,可支持各种币种挖矿。其实田本聪最初设计比特币的时候,就是希望使用电脑CPU进行挖矿,他本人就是用电脑CPU挖出了世界上第一个创世区块。但是由于电脑太过全能,专一运算的效率不会非常高。

后来,人们发现显卡的运算能力与挖矿的计算重叠度较高,既挖矿效率大大提升,显卡相关市场瞬间沸腾。2017年上半年的时候,显卡一卡难求,A卡(超微)的十几个国家的货架被搬空,N卡(辉达)大部分品牌处于缺货状态。

随着比特币挖矿的产出比的进一步下滑,显卡的算力也无法满足矿工的需求了,负责“生产/挖掘”这些比特币的ASIC矿机成为主流。特别是在2016年凭借14/16nm的先进制程和更强的构架,算力也陆续迫近甚至超过了10TH/s的门槛。

2017年的新闻报道,现在都有提升。10TH/s算力是什么概念呢?以现在最强的游戏卡GTX 1080 Ti为例,其公版的算力1.88TH/s,满载功耗300W左右。性价比最高受众最广的GTX 1060,其公版算力“才”0.67TH/s,功耗在130W左右。前者可是发售价5700元的旗舰产品,后者的正常价格也在1500元起步。矿机这种专门定制的硬件,不但运算能力狂暴,而且它们也是墙上功率动辄上千瓦的怪物。

1.3 ASIC矿机制造商

比特币获取的ASIC实现-IC学习笔记(五)

比特大陆(Bitmain),来自中国的挖矿设备制造商,是目前全球最大的采矿设备生产商。比特大陆主要为区块链生态提供底层协议支持(BTC.com);硬件设备支持(Antminer );SHA256高速集成运算的定制化解决方案(Antpool);专为海外用户提供的云算力服务(HashNest)。比特大陆旗下蚂蚁矿机Antminer、蚁池Antpool、云算力HashNest均排名全球市场第一。图片为矿机示意图。具体的其他公司见参考文献三,不是重点,不做过多赘述。

1.4 比特币的抗ASIC发展

CPU 去运算一个数学问题是通过编程思路来解决的。CPU 面向的是通用的计算任务,硬件层面上只能去完成加法或者乘法基础运算。要完成一个复杂运算,例如 A*B + C ,就需要多个运算操作,要耗时多个时钟周期才能完成。但是如果开发一种集成电路,使得可以在硬件层面上直接完成 A*B + C 的操作,那么执行这个运算就只需要一个计算操作,消耗一个时钟周期了。这样的集成电路的特点是不再具有通用型,但是完成特定任务是效率却奇高,这就是所谓的 ASIC 了。SHA256 运算比上面的先乘后加操作要复杂,但是道理是一样的。

ASIC 由于早期投入太大,所以很容易造成挖矿的中心化问题,于是区块链领域一直没有停下对反 ASIC 的挖矿算法的研究。

Bitcoin 的挖矿哈希算法 SHA256 本身是对 ASIC 非常友好的。因为 SHA256 属于传统的密码学原语,主要用来进行签名摘要等传统运算,并不是为挖矿这个任务专门来设计的,也没有任何对抗 ASIC 的考虑,所以制作 ASIC 矿机非常方便,可以获得千倍的效率提升。

Zcash 使用的挖矿算法是 Equihash,ASIC 实现起来就比较难,但是实现后依然可以提升一百倍的挖矿效率。底层的原理是,挖矿的时候需要存储150M 的状态数据,即使实现 ASIC 芯片之后,也要承受这150M的存储成本,所以效率提升就没那么明显。

门罗币使用的挖矿算法是 CryptoNight ,ASIC 实现就更困难。因为算法本身的复杂度很高,实现到硬件层面上也会依然很复杂,成本也就相对比较高。同时需要2M的状态存储,这个对于普通 CPU 来说是友好的,因为刚好可以存下,但是实现到 ASIC 上,这部分成本依然存在。所以总的效果是只能有50倍的效率提升。

以太坊使用的 ETHash是对 ASIC 极端不友好的,所以到目前为止也没有人有动力去研发以太坊的矿机。底层原理主要是有巨量的数据需要存储。但是计算方面依然可以通过硬件化来提升效率。总体上,如果实现成 ASIC 来挖矿,效率还是能提升一倍的。

总结起来反 ASIC 的挖矿算法的实现起来主要有两种思路:第一,增大数据存储量,因为 ASIC 主要是压缩计算步骤,对存储来说依然是要有对应的规模的硬件去存的,优化空间不大。第二,增加计算步骤的复杂度,可以把计算步骤设计的对很难去用硬件优化,甚至有 ProgPOW 这样的算法,专门针对主流 GPU 的硬件去设计非常复杂的计算步骤,而且算法是动态可调整的,所以如果把算法固化到硬件上,一旦算法变了,这样硬件就失效了。这样导致实现 ASIC 的时候也必须把硬件功能做的很通用,也就是跟一个通用的 GPU 很像了,所以成本就非常高。

1.5 挖矿算法流程

比特币获取的ASIC实现-IC学习笔记(五)

变量类型 变量名称 注释
int32_t nVersion 比特币版本协议
uint256 hashPrevBlock 前一个区块的哈希
uint256 hashMerkleRoot Merkle root 哈希,由于nNonce值的空间有限,如果尝试了所有nonce值,仍不满足target阈值,则可通过改变coinbase域前8个字节来使hashMerkleRoot变化,从而可以继续尝试nonce值,最终将获得符合要求的nonce值
int32_t nTime 区块产生时间
int32_t nBits 挖矿的目标阈值,编码后的target
int32_t nNonce 最多2^32个取值,全部尝试后仍不满足就修改coinbase域

1.6 矿池的运作原理

  • 大部分矿池有矿池管理员的角色,矿池管理员至少与一个或多个全节点相连。
  • 矿池中的所有矿工通过矿池协议(如Stratum、GetBlockTemplate等)与矿池管理员连接。
  • 在每次算力竞赛前,矿池管理员会将交易打包成区块,并将自己的地址写入coinbase中,然后分发给矿池中的矿工。
  • 矿工们根据矿池管理员打包好的区块,不断尝试修改Nonce值以寻找满足难度要求的工作量证明。
  • 管理员通过收取一定的手续费作为管理矿池的回报。

注:这种矿池模式下,不仅使矿工收益变得稳定,而且矿工不再需要维护全节点,也不需要维护各种内存数据,大大减轻了独立矿工的负担。
矿池协议中对矿池中矿工分配的难度实际与比特币整网的难度不一样,通常要低很多倍,降低的难度每个矿池可能不同,我们假设为1000倍进行举例:
如果挖矿难度降低1000倍,即使只有1台矿机,完成此难度的平均时间也仅为4天,假设4天内整个矿池完成这样难度的次数为10000次,那你就可以获得整个矿池1/10000的收益。
而矿池在降低难度后如何完成比特币网络的工作量证明呢?
虽然矿工的难度降低了,但是矿工会更频繁的完成工作量证明,由于比特币整网的工作量证明答案一定包含在矿工计算的低难度答案中,随着低难度答案数量的增加,总会有一个矿工计算的低难度结果正好符合比特币高难度的结果,使整个矿池获得比特币挖矿奖励。

参考文献

【1】比特币,用“芯”挖矿

【2】【比特币】将比特币转换为100%ASIC采矿可以提高2000X的安全性

【3】疯狂!一枚近2万美元,比特币ASIC芯片制造商及代表产品汇总

【4】什么是 ASIC 挖矿?

【5】以太坊:防 ASIC 算法可行性探讨

【6】比特币的一些原理和实现细节

【7】#比特币挖矿part1# 挖矿算法

【8】深入比特币原理(十四)——矿池