一文说透Nonce的非随机性来源
随着BTC进入下一次减半,BTC网络正在经历一些重大转变。除了回报调整而带来的挖矿收益的剧烈变化之外,比特大陆的Antminer S17正在取代长期以来的S9系列矿机,成为网络上的主流挖矿硬件。S9系列中的第一款挖矿机Antminer S9在2016年由比特大陆发布,并迅速成为最受欢迎的SHA-256挖矿机。因此,BTC网络多年来都没有经历过这样的转变。
由于缺乏关于单个矿机所使用的挖矿硬件类型的公开数据,衡量这种转变的速度是挺困难的。不过,有一个意外的数据来源确实为挖矿硬件的趋势提供了一些线索:网络的nonce分布。矿机将这些任意数字作为每个区块的哈希值的一部分包含在其中,这些任意数字的排列方式则可以暗示这些年来挖矿硬件使用情况的变化。
在上一期的《State of the Network Issue》中,我们研究了如何利用nonce分布图案来发现ASIC的崛起。在本期中,我们将进一步挖掘BTC的nonce分布的特殊性,以及分布纹(distribution striations)背后的来源来研究近期挖矿硬件的变化。然后,我们将按挖矿池来分解这些数据,这样就可以更细化地了解这些矿池所使用的硬件。
金色弹珠—了解采矿过程
挖矿是BTC安全图案的一个重要组成部分,可以说是对历史上之前的数字货币创建尝试的最重要的改进。虽然挖矿的意义相当复杂,但其背后的概念却相对简单易懂。
从挖矿者的角度来看,挖区块就像从一个袋子里不放回地反复挑选弹珠。在这个比喻中,弹珠的数量非常多,其中蓝色弹珠的比例很大,而金色弹珠的比例很小。如果矿机从袋子里能够挑选出金色弹珠就能获得报酬。
用更多的技术术语来解释的话就是BTC矿机们争相寻找一个nonce,当这个nonce被附加到将要产生的新的区块头部(header)上时,会结合特定的网络难度参数来确定出一定值的哈希值。矿机们通过猜测值并检查所得到的散列值是否低于某个阈值,来寻找这个只能使用一次的nonce。第一个为找到这样一个值并向网络广播的矿机将获得选择和排序区块内的所有交易的权利,这就成为这些交易最终被认为是有效的重要一环。
作为回报,矿机还可以从区块奖励中获得报酬,并从区块中包含的任何交易中相应的交易费用,这两方面的报酬都是以BTC的形式中获得的。根据SHA-256散列函数的性质,任何给定区块nonce的分布都是随机的,只能通过蛮力计算,否则无法找到这一nonce。
因为区块头部中包含了对这些BTC形式交易的引用,所以实际上每个挖矿实体都是从不同的分布中取样的。换句话说,每个实体都是从不同的袋子中抽取弹珠,其中每个袋子中包含相同数量的弹珠,但预期中蓝色弹珠和金色弹珠的预期比例是相同的。
金色弹珠的比例是由网络的难度参数决定的,并且在相应的时期内是固定的。而难度参数则由网络自动调整。如今,由于区块难度和随机方差较大,通常某个特定区块的头部是没有挖出金色弹珠对应的nonce的。换句话说,有些袋子是不含金色弹珠的。
矿机如果用尽了一个将要产生的下一个区块的nonce空间,那么会通常会增加区块的时间戳以生成新的nonce。也就是说,当矿机挑选完当前袋子的弹珠会,他们会抓起一个新的且满的袋子。如果时间戳已经到了进一步调整将使其失效的地步,矿机必须调整包含在区块中的交易集。类似地,如果一个矿机的房间里的袋子用完了,他们需要从另一个房间里再抓一些继续挑选,而这一过程在时间上是很紧凑的。
为了增加他们在固定的时间内找到金币的概率,矿机们可以并行化计算,这类似于用一只手成把地抓取弹珠,而不是一次取一个。通过使用适用于该任务的硬件,特别是图形处理单元(GPU)和被称为ASIC的专用芯片就可以实现这一寻找nonce的过程。ASIC在并行化方面的效率比任何替代方案都要高得多,如今,ASIC几乎占到了网络的所有计算能力(即哈希功率)。
在另一种形式的并行化中,几个矿机协调配合他们寻找随机数的过程,并同意分割其中获得的报酬。这种策略既减少了矿机支付和收入相关费用的规模和差异性,而且不会改变预期的长期收益。以这种方式行事的矿机群体被称为矿池。矿池的经营者通常收取费用,每个矿机同意支付这笔费用,以换取这一减少收入波动的好处。
BTC nonce分布
每隔两周BTC的难度参数就会调整一次,如果网络上的计算量保持不变,平均每十分钟就会产生一个新的区块。这一特性确保了网络在哈希功率可能发生巨大变化的情况下仍能继续运行。在一个由并行化计算nonce的矿池中所主导的充分竞争的挖矿市场中,我们非常想看到能够挖出BTC的nonce随着时间的推移对每个人来说的分布都是静态相同的。但令人惊讶的是,事实并非如此。
在上图的左侧nonce并不随机,这可由不断进行迭代测试从0开始的值(即挖矿行为)来解释,如果一个矿机在CPU上不进行并行化挖矿,而且是作为个体进行挖矿(因此不可能与所谓矿池中的其他成员发生碰撞),那么这个策略和其他策略一样有效,因为每个新区块的nonce分布是独立的。而后来这种图案的消失恰好与GPU矿机的引入同时发生,而GPU矿机实现了计算的并行化。
在该图的右侧附近,出现了一个条纹状的区域,其中有极少nonce的区域。据我们所知,这一异常现象是由Twitter用户@100TrillionUSD在2019年1月首次注意到的。下图将条形区域做了标记。
不久之后,BitMEX的一篇研究文章就以这个奇怪的图案为主题,推测这个异常现象是AsicBoost(一种有争议的挖矿优化技术)的实现中的一个巧合造成的。
AsicBoost有两类:Covert AsicBoost—无法在链上明确观察到;Overt AsicBoost则是可以。BitMEX研究团队讨论了这两类AsicBoost,但特别感兴趣的是Covert AsicBoost的效果,随着2017年8月SegWit的激活,非空区块几乎不可能使用Covert AsicBoost。研究人员无法证实他们的假说。
条纹的图案表明,矿机们正在系统性地对某些可能的非空区块的特定范围进行欠采样。通过将某些范围排除在采样之外,矿机们有效地将他们的弹珠分配至不同的袋子里面,并拒绝从某些袋子中取出弹珠。在预期中每个袋子的颜色比例是相等的,所以矿机们不会因为这样做而改变第一次尝试就选到黄金弹珠的概率。由于每个袋子里的弹珠数量非常多,所以在反复采样时,采用这种策略所造成的影响很小。但是,这种策略确实增加了矿机必须抓取一袋新的弹珠的频率,这种代价可能是很昂贵的。由于每个挖矿实体都是从自己的分布中取样,其他矿池无法通过策略取样以通过其他挖矿实体在他们自己袋子的比例预期来使得自己可以先人一步。
2019年10月,《State of the Network Issue》第23期深入研究了比特币的nonce分布,并指出了这种条纹图案。此后,条纹图案已经褪去,最近被挖出的区块的nonce分布似乎更加随机。
nonce分布的异常似乎与AsicBoost没有直接关系。Overt AsicBoost在2017年变得不可用,而启用Overt AsicBoost的首次固件更新是在2018年10月公开发布的,但这两个日期之间的纹路清晰可见。此外,虽然公开AsicBoost的使用率仍然很高,但是在有或者没有用AsicBoost挖出的区块中,纹路已经不明显。
相反,nonce分布中的图案可能是由比特大陆的Antminer S7和S9系列矿机采样nonce的方式造成的,这可能是优化的一个意外的副作用,最终对矿机和网络都是无害的。
S7和S9系列分别使用BM1385和BM1387芯片,其中S7和S9系列包含多个相关型号。每条矿机线在网络上占据主导地位的时期,对应于比特币的nonce分布图案的一个明显阶段。
观察网络上所有的nonce值时,条纹状的图案首先在2015年年底变得明显,与当年8月下旬发布的S7和9月下旬的订单兑现相吻合。
2016年5月下旬,Antiminer S9发布,当年6月中旬,第一批购买者就收到了订单。此后不久,随着S9在2016年年底被S7取代S7成为网络上的霸主矿机,条纹变得更加狭窄。
这一图案近期的崩盘,恰好是S9向网络上的霸主矿机S17的过渡时期。虽然S17是在2019年4月发布的,但直到最近S9在网络上的使用还是比较普遍的(因为S9的使用是比较经济的)。
矿池分析
通过按每个区块的矿机来对数据集进行分层,这样就可以更精细地观察到nonce的分布情况。识别一个区块的矿机相对简单,但有几个注意事项。
区块的矿机通常是通过区块的coinbase数据字段(coinbase data field)中留下的标签来识别。这些标识符是自愿和可伪造的:矿工不需要留下信息,也可以选择留下另一个池的标签来代替自己的标签。在某些情况下,这些误导行为甚至会在激励的前提下进行,所以应该承认这种方法的缺点。然而,这种技术是行业标准,虽然很多矿工选择不留下标识符,但我们没有理由相信造假行为正在大规模发生。
区块的矿工是根据其最近的可识别区块的矿工进行标记。这就提供了针对像hashpower投票这样的异常情况的鲁棒性,在这种情况下,coinbase数据被用来发出支持分叉的信号,而不是识别矿工。
挖矿实体也通过重新使用已知的支付地址来识别。这种方法要求矿池重新使用地址,并且对已知地址的初始种子集很敏感。就我们的目的而言,这种方法被用来补充基于coinbase数据的标记,以便为没有留下一致标记的矿工提供覆盖。
一旦我们按矿工对区块进行了分类,我们就可以结合这些信息画出BTC nonce的分布
我们还可以看一下各个矿池的nonce分布情况。即使在这个层面上,反常的团依然可见。考虑一下下图,它显示的是Antpool和BTC.com所挖的区块,Antpool和BTC.com是由比特大陆和ViaBTC拥有的,而比特大陆是ViaBTC的投资方。
在比特大陆关联矿池的nonce分布中,条纹图案明显比整个网络的nonce分布更明显。这表明在相应的期间内,这些矿池中S7和S9的比例较高,考虑到矿池与这些矿机制造商的关联性,这也是意料之中的。
而未知实体开采的区块比例在2015年出现了较大的下降。这是区块战的结果,在这期间,许多之前匿名的矿机开始在链上表明自己的身份,以示支持或反对区块大小的增加。如今,绝大多数矿机都是可识别的。在不知名矿机挖矿的区块中,条纹图案和它的消解均是隐约可见的。
结论
自2016年发布以来,Antminer S9一直是比特币网络上使用最多的挖矿机,直到最近一段时间,Antminer S9一直是比特币网络上使用最多的挖矿机。尽管去年发布了S17,但S9在一段时间内仍然保持着运行状态,但随着哈希率的提高和市场环境的变化,这款矿机正在被逐步淘汰。目前在减半的预期下,从S9向S17的主导权转移,很多分析人士对矿机网络的评估中并没有适当考虑。
在矿工们从S9为主向S17过渡的同时,此前作为比特币Nonce的决定性特征的条纹模式也随之消解。这些神秘的条纹出现在一个看起来应该是随机的空间里,其来源一直以来都有很大的猜测。这些条纹出现的时间让人相信这些条纹是网络上挖矿的硬件所导致的,特别是之前的S9和S7 系列矿机。
Nonce数据使我们能够仅利用公开信息,以一种其他方式来衡量这种转变的规模和速度,而这是不可能的。通过利用S9在Nonce抽样中留下的痕迹,我们或许可以估算出这些矿工在网络上的比例。这些数据按池子划分,可以提供关于矿工运营效率的独特信息,这一点将在未来的报告中有所涉及。这个问题为正式评估这类问题铺平了道路。
推荐阅读