主页 > imtoken注册 > 矿业纪事 | 减半的另一种视角:代码设计与算法优化

矿业纪事 | 减半的另一种视角:代码设计与算法优化

imtoken注册 2023-12-04 05:10:05

前言

2020年初,减半来临,1月份比特币挖矿难度也大幅提升。 矿工用投入的算力来证明自己对减半的预期依然乐观。 但受疫情影响,矿机厂商推迟生产交付后,矿工和矿场不得不暂停升级矿机,一直上涨的难度值也受到抑制。 这是由于比特币网络本身的难度调整算法。 本文将通过优秀的开源特性,简要分析难度调整算法的内部设置及其在算法中的不断演进。

第六期比特币难度调整算法分析与开发优化

文数:2351篇,阅读时间约3分钟

比特币源码是什么语言_比特币 源码解析_比特币源码分析

比特币源码分析_比特币源码是什么语言_比特币 源码解析

文本:Chain Kayser 的操作 | 小柴编辑

出品:算力网络挖矿纪事

01

比特币源码分析_比特币 源码解析_比特币源码是什么语言

挖矿难度动态平衡

区块认证:区块头,区块头的内部结构包含了很多重要的字段。

比特币 源码解析_比特币源码分析_比特币源码是什么语言

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

比特币源码是什么语言_比特币源码分析_比特币 源码解析

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

难度是怎么调整的?

图为比特币源代码中设置的一些常量。 比特币挖矿难度值的变化是一个动态调整的过程。 在比特币网络中,每10分钟出一个区块,基本时间设定为2周,每2016个区块调整一次难度。 如果网络发现出块速度快于 10 分钟,则增加难度,反之亦然。

比特币源码是什么语言_比特币 源码解析_比特币源码分析

比特币 源码解析_比特币源码是什么语言_比特币源码分析

每个挖出的区块都会判断是否需要进入下一个难度循环。 期间挖矿难度为固定值。 如果没有达到,则难度为上一个区块的难度。 图中的return pindexLast -> nBits 代表了这个过程。 并且在到达新的难度期后,会经过循环 for (int i = 0; pindexFirst && i

比特币 源码解析_比特币源码分析_比特币源码是什么语言

同时,为了限制变化速度过快比特币源码分析,每个调整范围必须小于一个因子(设置为4)。 如果要调整的范围大于该系数,则按该系数进行调整。 由于在下一个2016个区块的周期会继续不平衡,所以下一个周期会做进一步的难度调整。 因此,平衡散列能力和难度的巨大差异可能需要几个 2,016 个块周期才能完成。

挖矿也有小概率事件。 如果大家关注比特币的出块记录,有时候会出现明显小于10分钟或者大于10分钟的出块。 去年 10 月,甚至出现了需要 2 小时才能生成的区块(如红框内)。 挖区块是概率事件,所以有短期连续出块或者长期出块。 通常,区块生成的理论时间为 10 分钟。 观察短期挖矿时间是长了还是短了,意义不大。 通常,观察到平均块生成时间。 造成这种现象的原因可能是部分算力在比特币和BCH挖矿之间来回切换。

比特币源码是什么语言_比特币源码分析_比特币 源码解析

比特币 源码解析_比特币源码分析_比特币源码是什么语言

这里结合难度调整算法中规定的一些代码,可能更容易理解难度调整整个过程的原理,对比特币的内部规则有一个了解。 同时我也想说比特币源码分析,比特币也是人开发出来的系统。 其共识机制、区块设置、激励机制等也都按照规则运行。 这意味着比特币并不完美。 在矿工通过挖矿维护网络安全的同时,比特币也需要改进和优化。

02

比特币分叉币难度调整算法优化

比特币 源码解析_比特币源码是什么语言_比特币源码分析