矿事纪 | 换个视角看减半:代码设计与算法优化

2020年伊始,减半即将来临,比特币挖矿难度在一月份也有着不小的涨幅,矿工用投入的算力来证明依然看好减半预期。

前言

2020年伊始,减半即将来临,比特币挖矿难度在一月份也有着不小的涨幅,矿工用投入的算力来证明依然看好减半预期。但受疫情影响,矿机制造商推迟生产和发货后,矿工以及矿场不得不暂停升级矿机,一直处于上涨的难度值也收到了约束,这归于比特币网络自身的难度调节算法本篇将简单解析难度调节算法的内部设定与其通过优秀的开源特性在算法上的持续进化。

第六期   比特币难度调整算法解析及发展优化

正文字数:2351,阅读时长约3分钟

矿事纪 | 换个视角看减半:代码设计与算法优化

文:Chain Kayser    运营 | 小柴   编辑

出品:算力互联矿事纪

01

挖矿难度的动态平衡

区块的身份认证:区块头,区块头的内部结构中包含许多重要的字段

矿事纪 | 换个视角看减半:代码设计与算法优化

如图中所示,我们能够看到一个区块头中包含了软件版本号(nVersion)、上一个区块的哈希值(hashPrevBlock)、整个区块中交易集合的哈希值(hashMerkleRoot)、生成时间(nTime)、难度目标(nBits)、一个证明工作量的计数器(nNonce)。

在区块头中并没有直接储存全网难度的字段,而是用nBits字段标识了当前区块头哈希运算之后要小于等于的目标值。为了方便理解,我们把为了使区块头的SHA256结果小于某个目标值,平均要尝试的计算次数,定义为难度(difficulty),1 difficulty ≈ 2^32次 = 4294967296次 ≈ 4.2 * 10^9次 ≈ 4G次运算。

难度是如何调整的?

矿事纪 | 换个视角看减半:代码设计与算法优化

图中是比特币源码中设定的一些常量,比特币挖矿的难度值变化是一个动态调整的过程,在比特币网络中设定了每10分钟产出一个区块并将基础的时间设置为了2周,因此每隔2016个区块才会对难度进行调整,如果网络发现区块产生速率比10分钟要快时会增加难度,反之则降低难度。

矿事纪 | 换个视角看减半:代码设计与算法优化

每一个挖出的区块都会进行一次判断是否需要进入下一个难度周期。周期内,挖矿难度是一个固定的值,如果没有达到,则难度即为上一区块的难度,图中的return pindexLast -> nBits 便代表着这一过程。并在达到新的难度周期后,会通过循环for(int i = 0;pindexFirst && i< nInterval-1;i++)向前寻找第2016个区块的时间戳来记录本次生成2016个区块总共花费的时间nActualTimespan 。

矿事纪 | 换个视角看减半:代码设计与算法优化

同时为了限制变化速度的过快,每个调整幅度必须小于一个因子(设定为4)。如果要调整的幅度大于这个因子,则按因子来调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。

挖矿也存在低概率事件。如果关注比特币的出块记录,有时会出现明显小于10分钟或大于10分钟的出块情况,在去年10月份甚至出现了耗时2个小时才出的区块(如红框内)。挖矿出块属于概率事件,因此出现了短时间的连续出块或长时间才出块的现象。通常情况下,出块的理论时间为10分钟,观察短时挖矿时间相差较长或较短并无太大意义,通常会观察平均出块时间。造成这种现象的原因可能是有部分算力被来回切换于比特币及 BCH 的挖矿。

矿事纪 | 换个视角看减半:代码设计与算法优化

在此结合着难度调整算法中部分规定的代码或许能够更方便理解难度调整的整个过程的原理并对比特币内部的规则有一个了解,同时也想说比特币也是一个由人开发出来的系统,它的共识机制、出块设定、激励机制等也都是按照着规则运行。这就意味着比特币并非尽善尽美,在矿工们通过挖矿维护网络安全的同时,比特币也是需要改进优化的。

02

比特币分叉币难度调整算法在困境中的优化

矿事纪 | 换个视角看减半:代码设计与算法优化

图片来源:https://www.visualcapitalist.com/major-bitcoin-forks-subway-map/

比特币继承了开源软件的优异特性,允许社区通过分叉的形式对其进行优化改造,也让挖矿生态多样化。在此期间,出现了大量的分叉币,比较著名的比特币分叉有比特币现金(BCH)和BSV(由比特币现金分叉)。BCH和比特币共用同一套挖矿机制,所以难度是不变的。但是,如果比特币链上的算力远远高于BCH时,BCH想要挖出一个新区块是非常难的。为了防止这种情况发生,设计了EDA机制,即:无论何时矿工需要12个小时只能找到6个区块或更少,采矿难度会减少20%。衍生的难度算法挽救了比特币现金,因为算力低的时候,难度也随之降低。同时通过开源代码和允许分叉的方式,比特币能够实现快速进化,同时也能尽可能地探索可能的发展方向。

分叉网络面对威胁被迫进化出更完善的难度调整算法来保障安全。BCH与比特币相同的加密算法(SHA256),致使机枪池的出现。枪池存在的主要原因是 BTC 和 BCH 的难度调整跟不上相对价格的变化,因此切换挖矿会有一定的获利空间,但算力的切换转移会产生网络安全问题,为了解决机枪池的问题,BCH 早于 2017 年 11 月修改了难度算法,将难度调整算法EDA改进为了DAA,使得难度调整能够更快跟上算力的波动,这才保证了自己的存活。

03

疫情过后,减半在即对于矿业的展望

近期矿业受到疫情影响,矿机制造商推迟生产和发货后,矿工以及矿场不得不暂停升级矿机。原本情况下在这个阶段,许多矿工处在逐步淘汰老旧矿机,购入新型矿机的阶段,然而疫情的爆发推迟了矿机的升级,并导致了挖矿难度的增长放缓。

矿事纪 | 换个视角看减半:代码设计与算法优化

数据显示,2月11日,挖矿难度调整至比14天前高0.52%的水平。这与1月28日和1月14日分别录得的4.67%和7.08%的增长率相比有显著下降,调整后的难度将达到15T多,这个数字大约是去年12月比特币触及一年低点3100美元时的三倍,难度持续的上升依旧表明有更多的算力涌入比特币网络,这个趋势在难度值达到了15.55T时才有所回降。也可以猜测这个难度值是目前仍在继续挖矿的老机器所能提供的算力的一个上限,在疫情结束后新型的高算力机器入场后难度会在减半前再次迎来一波上涨。

不念过

矿事纪

不畏将来

关于我们

[Inter hash 简介]

算力互联是围绕矿业,提供一站式BTC挖矿和一站式云算力解决方案的服务商,与世界超算芯片制造商嘉楠耘智、全球TOP矿机生产商阿瓦隆均建立战略合作关系。目前,算力互联发展已初具规模,管理矿机数量实现40000+,管理净资产规模达3亿元人民币。

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2020年3月4日 上午3:51
下一篇 2020年3月4日 上午3:52

相关推荐

矿事纪 | 换个视角看减半:代码设计与算法优化

星期三 2020-03-04 3:51:55

前言

2020年伊始,减半即将来临,比特币挖矿难度在一月份也有着不小的涨幅,矿工用投入的算力来证明依然看好减半预期。但受疫情影响,矿机制造商推迟生产和发货后,矿工以及矿场不得不暂停升级矿机,一直处于上涨的难度值也收到了约束,这归于比特币网络自身的难度调节算法本篇将简单解析难度调节算法的内部设定与其通过优秀的开源特性在算法上的持续进化。

第六期   比特币难度调整算法解析及发展优化

正文字数:2351,阅读时长约3分钟

矿事纪 | 换个视角看减半:代码设计与算法优化

文:Chain Kayser    运营 | 小柴   编辑

出品:算力互联矿事纪

01

挖矿难度的动态平衡

区块的身份认证:区块头,区块头的内部结构中包含许多重要的字段

矿事纪 | 换个视角看减半:代码设计与算法优化

如图中所示,我们能够看到一个区块头中包含了软件版本号(nVersion)、上一个区块的哈希值(hashPrevBlock)、整个区块中交易集合的哈希值(hashMerkleRoot)、生成时间(nTime)、难度目标(nBits)、一个证明工作量的计数器(nNonce)。

在区块头中并没有直接储存全网难度的字段,而是用nBits字段标识了当前区块头哈希运算之后要小于等于的目标值。为了方便理解,我们把为了使区块头的SHA256结果小于某个目标值,平均要尝试的计算次数,定义为难度(difficulty),1 difficulty ≈ 2^32次 = 4294967296次 ≈ 4.2 * 10^9次 ≈ 4G次运算。

难度是如何调整的?

矿事纪 | 换个视角看减半:代码设计与算法优化

图中是比特币源码中设定的一些常量,比特币挖矿的难度值变化是一个动态调整的过程,在比特币网络中设定了每10分钟产出一个区块并将基础的时间设置为了2周,因此每隔2016个区块才会对难度进行调整,如果网络发现区块产生速率比10分钟要快时会增加难度,反之则降低难度。

矿事纪 | 换个视角看减半:代码设计与算法优化

每一个挖出的区块都会进行一次判断是否需要进入下一个难度周期。周期内,挖矿难度是一个固定的值,如果没有达到,则难度即为上一区块的难度,图中的return pindexLast -> nBits 便代表着这一过程。并在达到新的难度周期后,会通过循环for(int i = 0;pindexFirst && i< nInterval-1;i++)向前寻找第2016个区块的时间戳来记录本次生成2016个区块总共花费的时间nActualTimespan 。

矿事纪 | 换个视角看减半:代码设计与算法优化

同时为了限制变化速度的过快,每个调整幅度必须小于一个因子(设定为4)。如果要调整的幅度大于这个因子,则按因子来调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。

挖矿也存在低概率事件。如果关注比特币的出块记录,有时会出现明显小于10分钟或大于10分钟的出块情况,在去年10月份甚至出现了耗时2个小时才出的区块(如红框内)。挖矿出块属于概率事件,因此出现了短时间的连续出块或长时间才出块的现象。通常情况下,出块的理论时间为10分钟,观察短时挖矿时间相差较长或较短并无太大意义,通常会观察平均出块时间。造成这种现象的原因可能是有部分算力被来回切换于比特币及 BCH 的挖矿。

矿事纪 | 换个视角看减半:代码设计与算法优化

在此结合着难度调整算法中部分规定的代码或许能够更方便理解难度调整的整个过程的原理并对比特币内部的规则有一个了解,同时也想说比特币也是一个由人开发出来的系统,它的共识机制、出块设定、激励机制等也都是按照着规则运行。这就意味着比特币并非尽善尽美,在矿工们通过挖矿维护网络安全的同时,比特币也是需要改进优化的。

02

比特币分叉币难度调整算法在困境中的优化

矿事纪 | 换个视角看减半:代码设计与算法优化

图片来源:https://www.visualcapitalist.com/major-bitcoin-forks-subway-map/

比特币继承了开源软件的优异特性,允许社区通过分叉的形式对其进行优化改造,也让挖矿生态多样化。在此期间,出现了大量的分叉币,比较著名的比特币分叉有比特币现金(BCH)和BSV(由比特币现金分叉)。BCH和比特币共用同一套挖矿机制,所以难度是不变的。但是,如果比特币链上的算力远远高于BCH时,BCH想要挖出一个新区块是非常难的。为了防止这种情况发生,设计了EDA机制,即:无论何时矿工需要12个小时只能找到6个区块或更少,采矿难度会减少20%。衍生的难度算法挽救了比特币现金,因为算力低的时候,难度也随之降低。同时通过开源代码和允许分叉的方式,比特币能够实现快速进化,同时也能尽可能地探索可能的发展方向。

分叉网络面对威胁被迫进化出更完善的难度调整算法来保障安全。BCH与比特币相同的加密算法(SHA256),致使机枪池的出现。枪池存在的主要原因是 BTC 和 BCH 的难度调整跟不上相对价格的变化,因此切换挖矿会有一定的获利空间,但算力的切换转移会产生网络安全问题,为了解决机枪池的问题,BCH 早于 2017 年 11 月修改了难度算法,将难度调整算法EDA改进为了DAA,使得难度调整能够更快跟上算力的波动,这才保证了自己的存活。

03

疫情过后,减半在即对于矿业的展望

近期矿业受到疫情影响,矿机制造商推迟生产和发货后,矿工以及矿场不得不暂停升级矿机。原本情况下在这个阶段,许多矿工处在逐步淘汰老旧矿机,购入新型矿机的阶段,然而疫情的爆发推迟了矿机的升级,并导致了挖矿难度的增长放缓。

矿事纪 | 换个视角看减半:代码设计与算法优化

数据显示,2月11日,挖矿难度调整至比14天前高0.52%的水平。这与1月28日和1月14日分别录得的4.67%和7.08%的增长率相比有显著下降,调整后的难度将达到15T多,这个数字大约是去年12月比特币触及一年低点3100美元时的三倍,难度持续的上升依旧表明有更多的算力涌入比特币网络,这个趋势在难度值达到了15.55T时才有所回降。也可以猜测这个难度值是目前仍在继续挖矿的老机器所能提供的算力的一个上限,在疫情结束后新型的高算力机器入场后难度会在减半前再次迎来一波上涨。

不念过

矿事纪

不畏将来

关于我们

[Inter hash 简介]

算力互联是围绕矿业,提供一站式BTC挖矿和一站式云算力解决方案的服务商,与世界超算芯片制造商嘉楠耘智、全球TOP矿机生产商阿瓦隆均建立战略合作关系。目前,算力互联发展已初具规模,管理矿机数量实现40000+,管理净资产规模达3亿元人民币。