玩币族移动版

玩币族首页 > 币圈百科 >

ASICBoost是什么?

  前言

  ASICBoost可以说是一次很好的洗大V,很多聪明的头脑也在其中变得无脑,没逻辑。建议先看这两篇理一下自己的思路。

  https://medium.com/@samcole_74219/asicboost-655a73d48ae4(http://www.wanbizu.com/news/201704109543.html)

  http://hackingdistributed.com/2017/04/05/bitcoin-drama-response/

  比特币挖矿与SHA256

  我们先简单回顾一下比特币挖矿机制和SHA256算法。比特币的挖矿是对80字节的区块头计算两次SHA256的哈希值,即SHA256(SHA256(BlockHeader)),这个运算的结果必须小于当前网络难度对应的目标。区块头包括4字节的版本号,上一个区块头的哈希(32字节),当前候选区块打包交易的Merkle Root(32字节),时间戳(4字节),难度(4字节),Nonce(4字节)。​在每一轮挖矿过程中,版本号、上个区块头、难度都是确定的,矿工需要去不断修改Nonce来构造满足难度的区块头。而Nonce的搜索空间显然是不够的(2^ 32),因此矿工还需要修改Coinbase交易,得到新的Merkle Root,即每2^32次哈希后更改一次。

区块头

  区块头

  ​在计算这个区块头的SHA256时,我们需要先用固定的填充位补齐为128字节,之后SHA256会64字节一组去处理,可以简单认为是 F ( F(SHA256规范的初始值,前半部分), 后半部分)。F又需要对这64字节先按4字节一组拆分,进行64轮计算。结合上图,我们不难发现,Merkle Root的前28个字节和后4个字节被分开了,在修改Nonce过程中,前半部分是不变的,而后半部分的前12个字节也是不变的。因此目前几乎所有的芯片都已经做了这两个优化,即前半部分的处理结果(getwork中的midstate)和后半部分的前3轮结果(midstate3)。这样的优化效果是 (61/64 1)/3 = 65%,提升了35%​

  ASICBoost

  Merkle Root在图上显得很尴尬,如果中本聪设计的时候Version变成第三个字段该多好。这样后半段的前4个字节就固定了,如果我们对于时间戳要求不那么高,前12个字节可以完全固定下来了。对于芯片来说可以节省更多的计算,也可以去掉对应的一些电路。ASICBoost将这个脑洞往实践推了一步:我们去构建一组后4个字节相同的Merkle Root。

ASICBoost

  ASICBoost

  这样问题就变成能不能高效找到后缀一样的Merkle Root 效率提升有多大

  如何高效伐木

  Merkle Root是将区块中所有交易计算出的Merkle树的根。

Merkle Tree(引用Mastering Bitcoin第7章)

  Merkle Tree(引用Mastering Bitcoin第7章)

  ​ASICBoost的白皮书提到有很高效的方法,并且给出了一张表:

ASICBoost白皮书的Merkle Root碰撞数量对效率影响

  ASICBoost白皮书的Merkle Root碰撞数量对效率影响

  这里问题的本质是一个32位的哈希碰撞,根据“生日悖论”​,找到一组碰撞需要的尝试次数其实并不多,我们只需要77000次就有50%概率找到两个后缀相同的Merkle Root。当然对于一台矿机来说,仅仅2个是远远不够的,如果是矿场的话应该需要配备专门的硬件去产生足够的任务。尝试新的Merkle Root通常有两种方法:

  修改Coinbase交易,即图中的HA。这个方法似乎最简单而且隐蔽,但是白皮书认为不够高效;

  交换任意交易的顺序

  白皮书只举例了方法2,其他方法并未给出。

  注意无论是1和2,新的Merkle Root并不需要从下而上全部计算。例如改变交易A,我们只需要重新计算HA,HAB,HABCDEFGH和根。交换交易(IJKL)和(MNOP)只需要重新计算HIJKLMNOP和根。

  检测ASICBoost

  区块版本是否正确

  交易顺序是否符合默认的优先级

  对于修改Coinbase的似乎无法检测,但是这个方法效率低于方法2

  隔离见证

  那么说到现在,这事和隔离见证有什么关系 隔离见证引入了"witness tx id",交易在原有ID之外有了另一个新的ID,即用新的交易序列化格式(不包含签名部分)得到的交易哈希。相应的,我们也有了一个新的Witness Merkle Tree,以及Witness Merkle Root。由于软分叉实现,我们不能替换现有的Merkle Root,而是在Coinbase交易中增加一个OP_Return的输出,写入这个“WMR”。而这也导致对任何交易或者交易顺序的改动,我们都要从下而上重新计算“WMR”,大大降低了伐木效率。

  好啊,知道你们为什么要阻止隔离见证了,原来就是要偷着用ASICBoost啊,你们不仅会阻止隔离见证,还会阻止一切比特币的进步。

  打住吧。。。。

  可以使用ASICBoost+反对隔离见证 不等于 为了ASICBoost反对隔离见证。

  你看到了两个事物同时存在,就觉得其中一个事物是另一个的起因。你的错误在于,同时存在的两个事物未必有因果关系。

知识: ASICBoost