[GPU挖矿教程] AsicBoost到底是什么?为什么使用该项技术可以降低功耗10%-20%

[复制链接]
17416 |0
发表于 2018-10-23 17:56:25 | 显示全部楼层 |阅读模式
昨晚的一则快讯引爆了矿圈,快讯称比特大陆发布了S9新固件,新固件用于实现“显性Asic Boost”功能。不少朋友问我这是项什么技术,大家如此关注。其实简单的从矿工朋友切身利益来说,就是使用该项技术可以降低功耗10%-20%(AsicBoost官网数据显示)。那么AsicBoost到底是什么,今天我们就来揭开它的神秘面纱。

f8483d8da9268afe33665cc0238b5316.png

f8483d8da9268afe33665cc0238b5316.png


(图1)
一、比特币的核心算法:SHA256
首先我们来简要梳理下比特币的挖矿原理,比特币的挖矿是对区块头(blockheader)做两次SHA256运算,运算出来的结果必须小于当前难度周期所对应的难度目标。区块头有80个字节,包括4字节的版本号(Version)、32字节的父区块哈希(Previous Hash),32字节的当前候选区块打包交易的Merkle Root,4字节的时间戳(timestamp),4字节的难度,4字节的随机数(Nonce)。在挖矿过程中,版本号、父哈希、难度都是确定的,矿机需要去不断修改随机数来运算,而随机数只有4字节,只能做2^ 32次运算。因此矿工还需要修改Coinbase交易,得到新的Merkle Root,即每2^32次哈希后更改一次。随着算力的暴涨,独立矿机已经几乎不能出块,矿工都选择加入矿池来挖矿。挖矿过程就变成了矿池给不同的矿机发送不同的job,矿机计算出的share提交即可。

ffec57a7052ec70518a9cde30f16c102.png

ffec57a7052ec70518a9cde30f16c102.png


(图2)
在做区块头的SHA256时,需要64字节一组去处理,很明显80字节超出了,这就需要用48字节的填充位将块头补充至128字节,填充位全填写0,所以被称作padding-zero。
这样区块头就被分成了前后两组来运算,结合上图可以看出,Merkle Root的前28个字节和后4个字节被分开了。
二、AsicBoost
从图2中我们不难看出,Merkle Root很尴尬,被分割在两个组中,而区块头的结构是写死不能修改的,于是AsicBoost就诞生了,2016年3月Dr. Timo Hanko提出了白皮书,后经过不断完善,最终确定了两种优化的方法,一种就是Version-rolling,另一种是Merkle Root Collisions。不过目前都是第一种实现方式,第二种暂时没人宣称使用。
这边就重点介绍一下Version-rolling。
Version-rolling(版本轮动)。4字节的Version总共有32个位,只有前3位是固定的,其他位用在技术升级或者软分叉时候的投票时使用,可是在实际应用过程中,不可能同时有29个软分叉投票吧,如果我们只取4位来用,那么就多了2^4次,也就是说在收到同一个任务后,可以进行2^4轮的2^32次运算,降低了矿机接受数据的次数,从而降低了功耗,据AsicBoost.com测算,可以降低约20%的功耗,当然实际使用效果还要经过长期的测试。随着越来越多的人涌入区块链世界,全网算力一直处于不断攀升的阶段,挖矿的利润可能会进一步下降,20%的功耗节约对于矿工来说可能也是一笔不小的钱。
感兴趣的朋友也可了解一下Merkle Root Collisions(梅克尔根碰撞)。如图2所示,32字节的Merkle Root被分割成两组来做SHA256运算,第一部分为28字节,第二部分为4字节。Merkle Root Collisions的原理就是构建出很多后4个字节相同的Merkle Root,这样在随机数固定的情况下,我们只需要对区块头的前半部分做SHA256运算,而后半部分是不变的。这种方法的本质是一个32位的哈希碰撞,根据“生日悖论”,找到一组碰撞需要的尝试次数其实并不多。尝试新的Merkle Root通常有两种方法:一是修改Coinbase交易,但这里有个问题,矿池可能会恶意打空块,因为当区块只有coinbase交易的时候,要保证Merkle Root后4个字节要容易的很多;第二是交换任意交易的顺序,这种方法的问题是,在隔离见证(Segwit)中,哈希运算量会增加一倍。隔离见证引入了一个全新的Witness Merkle Tree和Witness Merkle Root(见图3),如果修改交易顺序,那么Witness Merkle Tree也会更改,这就导致了在原有Merkle Tree中的coinbase交易进一步更改,从而使得整个Merkle Tree需要从下到上重新计算一次,增加了一倍的工作量,而我们都知道在之前更新的bitcoin core version中,早已经全面支持了隔离见证。

6536436d358c85058523aa76f445c600.png

6536436d358c85058523aa76f445c600.png


(图3)
昨日官方公告还表示R4、T9、T9 、S9i、S9j能激活“显性Asic Boost”功能的新固件也将在本周内发布,而币印矿池(Poolin.com)已率先支持Asic Boost,矿工更新固件后不需要多余操作,连接矿池就可直接开挖!
参考链接
固件下载地址:
https://service.Bitmain.com/support/download
官方公告:
Firmware to Activate “Overt AsicBoost” in BM1387-based Antminer Models


AsicBoost官网:
Home


BDPL官网:
https://blockchaindpl.org/
Slushpool的stratum扩展协议:
https://github.com/slushpool/stratumprotocol/blob/master/stratum-extensions.md
Bitmex关于隐形AsicBoost的论述:
https://blog.bitmex.com/graphical-illustration-of-a-bitcoin-block/
Gregory Maxwell关于AsicBoost的提案:
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-April/013996.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表