时间:2023-07-08|浏览:187
用戶喜愛的交易所
已有账号登陆后会弹出下载
小编:记得
来源:算力互联
前言
2020年伊始,减半即将来临,比特币挖矿难度在一月份也有着不小的涨幅,矿工用投入的算力来证明依然看好减半预期。但受疫情影响,矿机制造商推迟生产和发货后,矿工以及矿场不得不暂停升级矿机,一直处于上涨的难度值也收到了约束,这归于比特币网络自身的难度调节算法。本篇将简单解析难度调节算法的内部设定与其通过优秀的开源特性在算法上的持续进化。
第六期比特币难度调整算法解析及发展优化
正文字数:2351,阅读时长约3分钟
文:ChainKayser运营|小柴编辑
出品:算力互联矿事纪
01 挖矿难度的动态平衡
区块的身份认证:区块头,区块头的内部结构中包含许多重要的字段。
如图中所示,我们能够看到一个区块头中包含了软件版本号(nVersion)、上一个区块的哈希值(hashPrevBlock)、整个区块中交易集合的哈希值(hashMerkleRoot)、生成时间(nTime)、难度目标(nBits)、一个证明工作量的计数器(nNonce)。
在区块头中并没有直接储存全网难度的字段,而是用nBits字段标识了当前区块头哈希运算之后要小于等于的目标值。为了方便理解,我们把为了使区块头的SHA256结果小于某个目标值,平均要尝试的计算次数,定义为难度(difficulty),1difficulty≈2^32次=4294967296次≈4.2*10^9次≈4G次运算。
难度是如何调整的?
图中是比特币源码中设定的一些常量,比特币挖矿的难度值变化是一个动态调整的过程,在比特币网络中设定了每10分钟产出一个区块并将基础的时间设置为了2周,因此每隔2016个区块才会对难度进行调整,如果网络发现区块产生速率比10分钟要快时会增加难度,反之则降低难度。
每一个挖出的区块都会进行一次判断是否需要进入下一个难度周期。周期内,挖矿难度是一个固定的值,如果没有达到,则难度即为上一区块的难度,图中的returnpindexLast->nBits便代表着这一过程。并在达到新的难度周期后,会通过循环for(inti=0;pindexFirst&&i
同时为了限制变化速度的过快,每个调整幅度必须小于一个因子(设定为4)。如果要调整的幅度大于这个因子,则按因子来调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。
挖矿也存在低概率事件。如果
在此结合着难度调整算法中部分规定的代码或许能够更方便理解难度调整的整个过程的原理并对比特币内部的规则有一个了解,同时也想说比特币也是一个由人开发出来的系统,它的共识机制、出块设定、激励机制等也都是按照着规则运行。这就意味着比特币并非尽善尽美,在矿工们通过挖矿维护网络安全的同时,比特币也是需要改进优化的。
02 比特币分叉币难度调整算法在困境中的优化
图片来源:https://www.visualcapitalist.com/major-bitcoin-forks-subway-map/
比特币继承了开源软件的优异特性,允许社区通过分叉的形式对其进行优化改造,也让挖矿生态多样化。在此期间,出现了大量的分叉币,比较著名的比特币分叉有比特币现金(BCH)和BSV(由比特币现金分叉)。BCH和比特币共用同一套挖矿机制,所以难度是不变的。但是,如果比特币链上的算力远远高于BCH时,BCH想要挖出一个新区块是非常难的。为了防止这种情况发生,设计了EDA机制,即:无论何时矿工需要12个小时只能找到6个区块或更少,