比特币挖矿难度算法
① 姣旂壒甯佺幇鍦ㄧ殑鎸栫熆鎴愭湰鏄澶氬皯鎬庝箞璁$畻
濡傛灉璇寸熆鏈24灏忔椂閮藉湪宸ヤ綔锛岃佹寲1涓狟TC锛岄偅涔堝氨瑕佹湁17.128P鐨勭畻鍔涖傚姞榛戣壊涓鍙拌殏铓丼9 鏄13.5T鐨勭畻鍔涖傞偅涔堜箙闇瑕1300鍙皊9锛岃繖浜涚熆鏈24灏忔椂鍙浠ユ寲1涓狟TC锛屽傛灉鏀圭寽鍦嗘槸涓鍙皊9宸ヤ綔24灏忔椂锛岄偅涔堜箙闇瑕1.35*24=32.4搴︾數*1300鍙=42120搴︾數*0.6鍏冧竴搴=25727锛屽氨鐩鍓嶇殑闅惧害鏉ョ湅鐨勮瘽锛岄渶瑕佹嫢鏈17.128P鐨勭畻鍔涙墠鑳芥寲涓涓甯併
鎴戜滑閫氳繃浠ヤ笂鏍稿屽叧浜庢瘮鐗瑰竵鐜板湪鐨勬寲鐭挎垚鏈鏄澶氬皯鎬庝箞璁$畻鍐呭逛粙缁嶅悗,鐩镐俊鍏嗗渾澶у朵細瀵规瘮鐗瑰竵鐜板湪鐨勬寲鐭挎垚鏈鏄澶氬皯鎬庝箞璁$畻鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
② 鎬庝箞鏍风煡閬撴寲鐭跨殑闅
鎬庝箞鐭ラ亾鎸栫熆鐨勯毦搴
鎸栫熆鐨勯毦搴︽槸閫氳繃涓涓鍙鍋氣滈毦搴﹀尖濈殑鍙傛暟鏉ヨ閲忕殑锛屽畠鏄姣旂壒甯佺瓑鍔犲瘑璐у竵绯荤粺涓鐨勪竴涓閲嶈佸弬鏁般
闅惧害鍊兼槸鐢卞姞瀵嗚揣甯佺郴缁熻嚜鍔ㄨ皟鏁寸殑锛屽畠浼氭牴鎹杩囧幓涓娈垫椂闂村唴鐭垮伐浠鐨勬寲鐭块熷害鏉ヨ嚜閫傚簲璋冩暣锛屼互淇濇寔鍔犲瘑璐у竵绯荤粺涓鏂扮殑鍖哄潡浜х敓鐨勯熷害绋冲畾銆
鍦ㄦ瘮鐗瑰竵绯荤粺涓锛岄毦搴﹀奸氬父姣忎袱鍛ㄨ皟鏁翠竴娆°傚綋鐭垮伐浠鐨勭畻鍔涳紙鍗宠$畻鏈虹殑澶勭悊鑳藉姏锛夊炲姞鏃讹紝鎸栫熆鐨勯熷害浼氬彉蹇锛岄毦搴﹀间篃浼氶殢涔嬪炲姞锛屼互淇濇寔姣旂壒甯佺郴缁熶腑鏂板尯鍧椾骇鐢熺殑閫熷害澶х害涓烘瘡10鍒嗛挓涓涓銆
鍙浠ラ氳繃姣旂壒甯佺綉缁滀笂鐨勪竴浜涚綉绔欐垨鑰呭尯鍧楁祻瑙堝櫒鏉ユ煡鐪嬪綋鍓嶇殑闅惧害鍊硷紝渚嬪侭lockchain.info銆丅TC.com绛夛紝瀹冧滑浼氬疄鏃舵洿鏂伴毦搴﹀肩殑鍙樺寲鎯呭喌銆
鎬荤殑鏉ヨ达紝鎸栫熆鐨勯毦搴︽槸鐢卞姞瀵嗚揣甯佺郴缁熻嚜鍔ㄨ皟鏁寸殑锛岄氳繃鏌ョ湅姣旂壒甯佺綉缁滀笂鐨勭綉绔欐垨鑰呭尯鍧楁祻瑙堝櫒锛屾垜浠鍙浠ュ緱鐭ュ綋鍓嶇殑闅惧害鍊笺
③ 挖矿难度表示
比特币的挖矿难度可以使用Target Threshold,nBits或Difficulty表示,它们互相等价:
这三个值的转化关系可以采用下面的实例来说明:
首先获取哈希值为 的区块原生十六进制信息如下:
区块中nBits采用小端格式表示,解析区块信息,得到nBits字段值为0x4c86041b。因此转化为大端格式为0x1B04864C,这个值是Target Threshold的压缩格式表示,可以将它转化成256位的Target Threshold值:
开头的一个字节为指数,后面三个字节为系数,则:
计算出Target Threshold值为 。
再计算Difficulty的值,它有两个值,计算公式分别为:
由此可以使用 Python 计算出bdiff的值:
因此,得到在比特币客户端中的difficulty值bdiff为14484.162361225399。
为了检验上述结果,可以在比特币核心客户端中使用 getblock "" 命令得到该区块的json格式信息:
最终,可以发现该区块的bits和difficulty字段信息与上面分析计算的相关结果一致。
nBits的大端格式表示法中,其系数最大为0x7fffff,这是因为Target Threshold数据类型是无符号整型,而它继承自有符号数据类,则在实际中Target Threshold系数的最高位有可能是1,这可能会被解析成一个负数。则在挖矿过程中难度值永远无法小于一个负数。因此,为了解决这个问题,比特币核心在生成nBits值时需要首先检查一下生成的nBits是否会被解析为一个负数。如果是,首先在系数开头补8位0,即除以256,然后指数再加上1。这样由nBits转化为Target Threshold过程中转化公式就与普通值相同了,即指数位都是减去3,转化过程上面已经提到。
举个例子说明:
哈希值为 的区块信息如下:
发现bdiff值为1,则利用bdiff与Target Threshold关系可以计算出:
将Target Threshold值 转化为nBits的过程中可以发现其系数为0xffff00,指数为0x1c,这样:
然而由于系数最高位为1,则如果这样表示的话就可能将Target Threshold解析为负数。因此,我们将系数除以256,指数加上1,得到系数为0x00ffff,指数为0x1d。这样:
最终,nBits值为0x1d00ffff(大端表示),与json格式信息一致。
④ 什么是比特币挖矿难度如何调整原理是什么
比特币挖矿难度(Difficulty),是对挖矿困难程度的度量,挖矿难度越大,挖出区块就越困难。目标值(Target)与挖矿难度成反比。难度越高,目标值越小。而难度目标是目标值通过转化得到,是一个只有 4 个字节的字段(为了便于理解,本文将难度目标等同目标值处理)。比特币系统正是通过调整区块头中难度目标来控制挖出区块所需平均时间的。
目标值是个长度为 256 比特的字符串,换句话说目标值约有 2^256 种可能的取值。调整难度目标就是调整目标值在整个输出空间的占比。
举例说明:挖矿就如射击,所有射出去的子弹都会落在一个很大的靶子上。难度目标就是这个大靶子上圈出一个范围,这个范围越小,被射中的难度就越高。调节难度目标,就是调节这个圈在整个靶子上的占比。
挖矿算力增大,单位时间射击的次数就越多,目标范围被射中所需的时间就越短。反之,挖矿算力减小,目标范围被击中所需的时间就越长。而比特币系统追求的平均出块时间为 10 分钟,这时候就需要调整难度目标来实现。
02 如何调整难度目标?
比特币系统是怎样调整难度目标的呢?在《白话区块链入门 080 | 数说比特币,了解 比特币 必须知道这 10 个数字》一文中,我们介绍了比特币系统每过 2016 区块(大约为 14 天时间),会自动调整一次难度目标。所有区块高度为 2016 整数倍的区块,系统就会自动调整难度目标。如果上一个难度目标调整周期(也就是之前 2016 个区块),平均出块时间大于 10 分钟,说明挖矿难度偏高,需要降低挖矿难度,增大难度目标(准确地说是目标值);反之,前一个难度目标调整周期,平均出块时间小于 10 分钟,说明挖矿难度偏低,需要缩小难度目标。
03 难度目标的可调范围
比特币系统设定,难度目标上调和下调的范围都有 4 倍的限制。举例说明:假设上一个难度目标调整周期内的 2016 个区块,由于算力暴涨,只用 7 天就全部挖出来了,通过难度目标调整,将难度目标缩小一倍,可以将平均出块时间维持在 10 分钟左右,但如果算力暴涨,前 2016 个区块全部挖出只用了 1 天,那么难度目标最小只能调整为原来的四分之一。
04 总结
比特币的算力是持续波动的,比特币系统通过难度目标的调整,使得平均出块时间维持在 10 分钟左右。难度目标和挖矿难度成反比,挖矿难度越大,难度目标越小。当区块高度为 2016 的整数倍时,比特币系统就会在该区块上,自动调整难度目标。如果上一个难度目标调整周期内,平均出块时间超过 10 分钟,那么降低挖矿难度,增大难度目标;反之则提高挖矿难度,减小难度目标。难度目标上调和下调的范围都有 4 倍的限制。
比特币每 2016 个区块(大约 14 天)调整一次挖矿难度,相比于 BCH 每个区块都调整(大约 10 分钟调整一次),有明显的滞后性。你认为是哪种调整方式更合理呢?为什么呢?欢迎在留言区分享你的观点。
⑤ 一个比特币要挖多久什么是比特币
本文更新于2020年5月17日,由于比特币减产,挖矿时间有了显著变化。接下来,我们来解答"一个比特币要挖多久"这个问题。
计算挖矿时间的公式是:需要的天数=1/每日收益。以当时的先进矿机蚂蚁矿机S19 Pro为例,其算力为110TH/s,价格约20770元。在2020年4月26日,算力为110TH/s的机器每日收益约为0.00169121BTC。然而,减产后收益大幅下降,具体如下:
- 2020年5月12日减产前:约591.3天
- 2020年5月17日减产后:约1154天
在2017年的比特币热潮后,挖矿的难度显著增加,需要专门的ASIC设备。比特币的挖矿速度约为每10分钟一次,但难度持续上升。以比特币现在的全网算力来看,即使是强大的矿机也需要约10分钟才能找到一个符合条件的哈希值。
单独挖矿的经济可行性较低,通常需要加入矿池或选择云挖矿。挖一个比特币的成本因地区和电力价格而异,从几百美元到数千美元不等。总的来说,比特币挖矿的时间和成本随着技术进步和市场动态而变化,对新手来说,挖矿不再是轻松的收入来源。
⑥ 比特币挖矿 个人电脑一天能挖多少
一天挖不了,需要2000年。
比特币的全球统一计算难度是2621404453(预计两天之后变化),一个2.5GHz的CPU,需要2000多年才能算出一个比特币。
显卡“挖矿”要让显卡长时间满载,功耗会相当高,电费开支也会越来越高。国内外有不少专业矿场开在水电站等电费极其低廉的地区,而更多的用户只能在家里或普通矿场内挖矿,电费自然不便宜。甚至云南某小区有人进行疯狂挖矿导致小区大面积跳闸,变压器被烧毁的案例。
(6)比特币挖矿难度算法扩展阅读:
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。
比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。随后比特币网络会新生成一定量的比特币作为区块奖励,奖励获得答案的人。
2009年比特币诞生的时候,区块奖励是50个比特币。诞生10分钟后,第一批50个比特币生成了,而此时的货币总量就是50。随后比特币就以约每10分钟50个的速度增长。当总量达到1050万时(2100万的50%),区块奖励减半为25个。
当总量达到1575万(新产出525万,即1050的50%)时,区块奖励再减半为12.5个。该货币系统曾在4年内只有不超过1050万个,之后的总数量将被永久限制在约2100万个。
⑦ 矿池难度值怎么样算
矿池难度值怎么算的
矿池难度值是一个用于描述加密货币挖矿难度的指标,它是根据区块链协议的规则和算法来计算的。
在比特币挖矿中,矿池难度值的计算过程如下:
确定区块链协议中规定的挖矿难度计算公式。
比特币协议中的挖矿难度计算公式为:difficulty=difficulty\_1\_target/current\_target
其中,difficulty\_1\_target是一个常量,表示挖到一个新块所需的最小哈希值;current\_target是当前挖到的块的哈希值。
确定计算周期。
在比特币协议中,难度值是每2016个块(大约两周)调整一次。
统计计算周期内的块数和时间。
对于每个计算周期,矿池需要记录本周期内挖出的块数和挖矿时间。
计算矿池难度值。
根据上述公式,将本周期内挖出的块数和挖矿时间代入计算,得出本周期的矿池难度值。
矿池难度值的计算会根据不同的加密货币和区块链协议而有所不同,但都遵循类似的计算方法。
⑧ 比特币挖矿的难度和算力
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度。
difficulty = difficulty_1_target / current_target
difficulty_1_target 的长度为256bit, 前32位为0, 后面全部为1 ,一般显示为HASH值:, difficulty_1_target 表示btc网络最初的目标HASH。 current_target 是当前块的目标HASH,先经过压缩然后存储在区块中,区块的HASH值必须小于给定的目标HASH, 区块才成立。
例如:如果区块中存储的压缩目标HASH为 0x1b0404cb , 那么未经压缩的十六进制HASH为
所以,目标HASH为0x1b0404cb时, 难度为:
比特币的挖矿的过程其实是通过随机的hash碰撞,找到一个解 nonce ,使得 块hash 小于 目标HASH 值。 而一个矿机每秒钟能做多少次hash碰撞, 就是其“算力”的代表, 单位写成 hash/s 或者 H/s
算力单位:
比特币系统的难度是动态调整的, 每挖 2016 个块便会做出一次调整, 调整的依据是前面2016个块的出块时间, 如果前一个周期平均出块时间小于10分钟,便会加大难度, 大于10分钟,则减小难度,目的是为了保证系统稳定的每过 10分钟 产出一个块,所以难度调整的时间大概是2周(2016 * 10 分钟)
全网算力是btc网络中参与竞争挖矿的所有矿机的算力总和。当前难度周期全网算力会影响下一个周期的难度调整, 如果全网算力增加,挖矿难度增大,单台矿机固定时间的产出就会减少。目前全网算力大概是24.42EH/s, 一台蚂蚁S9矿机的算力大概是14TH/s
那么, 已知当前全网算力,下一个周期难度将如何调整呢?
根据公式:
因为出块时间要稳定在10分钟, 也就是600s:
那么,在3.46e+12的难度下, 一台算力为14TH/s的矿机平均要花多长时间才能出一个块呢?
根据公式:
有:
结果大概是12270天