挖矿平均难度
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个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天
② 鎸栫熆闅惧害璋冩暣鍛ㄦ湡鏄浠涔堟寲鐭块毦搴︽槸浠涔
鎸栫熆闅惧害灏辨槸姣忔℃眰瑙f暟瀛︾粨鏋滅殑闅炬槗绋嬪害銆傚洜涓虹熆宸ョ殑鏁伴噺瓒婃潵瓒婂氫簡锛岃屼笖鍏ㄧ綉绠楀姏涔熷湪涓嶆柇鎻愰珮锛屽勪簬骞冲潎娌10鍒嗛挓鍑轰竴涓鍧楃殑鐩鐨勮冭檻锛岃屼笉鏄澶勪簬杩囧揩鎴栬繃鎱锛岄偅涔堝氨瑕佸规暟瀛︽眰瑙g殑闅炬槗绋嬪害杩涜岃皟鑺傘傜熆鏈烘暟閲忔暟澶氫簡锛岄毦搴﹀氨浼氫緷鎹鏌愮嶈勫垯鍔ㄦ佸姞澶с備篃灏辨槸璇达紝濡傛灉鐭垮伐閮藉叏閮ㄧ殑鎸栨煇绉嶆暟瀛楄揣甯侊紝澧炲姞鐭挎満鏁伴噺锛岄偅涔堟眰瑙i毦搴﹁偗瀹氫細鍙樺緱闈炲父楂樸傚弽涔嬶紝濡傛灉甯佷环澶ц穼锛屾寲甯佺殑鏀剁泭鍙鑳借繕涓嶈兘寮ヨˉ鐢佃垂锛岄偅涔堟寲鐭垮氨浼氫簭鎹熴傜熆宸ヤ滑閮戒笉涓嶅湪鎸栫熆锛岃繖鏍风殑璇濋毦搴︿篃浼氫笅璋冿紝鍚屾牱绠楀姏涓嬭竟鐨勬洿瀹规槗鎸栧埌濂栧姳銆備絾鏄鎸栫熆闅惧害璋冩暣骞朵笉鏄瀹炴椂璋冩暣鐨勶紝鑰屾槸鏈変竴涓鍥哄畾鐨勮皟鏁村懆鏈熴傛瘮鐗瑰竵鐨勮惧畾鏄姣忛殧2016涓鍖哄潡锛屾寲鐭块毦搴﹁皟鏁翠竴娆°傝屾瘮鐗瑰竵骞冲潎鍑哄潡鏃堕棿鏄10鍒嗛挓锛屽傛や竴鏉ュ垰濂芥槸2鍛ㄨ皟鏁翠竴娆★紝杩欏氨鏄闅惧害璋冩暣鍛ㄦ湡銆
鎴戜滑閫氳繃浠ヤ笂鍏充簬鎸栫熆闅惧害璋冩暣鍛ㄦ湡鏄浠涔堟寲鐭块毦搴︽槸浠涔堝唴瀹逛粙缁嶅悗,鐩镐俊澶у朵細瀵规寲鐭块毦搴﹁皟鏁村懆鏈熸槸浠涔堟寲鐭块毦搴︽槸浠涔堟湁涓瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
③ 自学区块链(六)BTC-挖矿难度
我们来看下挖矿的计算公式
H(block header) target,这个target就是 目标阈值
BTC用的哈希算法是SHA-256,它产生的哈希值是256位,那么就有2^256种取值,这个就是他的输出空间,要增大挖矿难度, 就调节目标值在这个输出空间所占的比例 。
挖矿难度和目标阈值是成反比的, 当算力强时,调节难度,使目标阈值变小 。
不调节难度,随着矿工数量增多,随着算力的上升,那么挖到区块的时间就会变短,从10分钟缩短到1分钟甚至几秒钟,这个会带来什么样的问题呢?可能很多人觉得这不是挺好吗,交易等六个确认就会缩短时间了,交易就会变快了。其实出块时间缩到很短,风险是很大的,因为网络延迟,出块时间变短,不同节点很可能接到不同的区块信息,导致会有很多分叉节点出现。矿工会根据自己认为正确的区块接着挖。这种情况下,恶意节点发动分叉攻击就比较容易成功,因为诚实节点的算力被分散了。
导致不需要51%的算力就能成功,所以缩短出块时间是不利于BTC系统的稳定的。虽然10分钟不一定是最优的时间,但是也算是比较合理的。
下面是 算力增长曲线
下面是 挖矿难度曲线
下面是 平均出矿时间
我们来看下难度公式:每2016个区块调整一次挖矿难度,10分钟出一个平均算下来是两星期调整一次。
previous_difficulty是上一次的挖矿难度,分母是最近2016个区块花费的时间
每个节点挖矿是独立的,BTC的协议也是开源的,会不会有矿工不修改挖矿难度呢?可能性是存在的,但是不影响结果,因为广播给其他节点需要独立验证block header的哈希值, 这个header里面有难度的一个压缩编码,修改难度产生的结果是不会被诚实的节点认可的。
④ 浠ュお鍧婃寲鐭跨殑闅惧害鏄濡備綍璁$畻鐨
浠ュお鍧婃寲鐭跨殑闅惧害鏄濡備綍璁$畻鐨勶紵
浠ュお鍧婃槸鐩鍓嶆瘮鐗瑰竵浠ュ栨渶涓虹煡鍚嶇殑鍔犲瘑璐у竵涔嬩竴锛屽叾鐭垮伐鍙浠ラ氳繃鎸栫熆鑾峰緱浠ュお甯併傜劧鑰岋紝浠ュお鍧婃寲鐭跨殑闅惧害鏄濡備綍璁$畻鐨勫憿锛
鎸栫熆鏄姒傚康鎬х殑銆傜熆宸ョ殑鐩鏍囨槸瑙e喅瀵嗙爜闅鹃橈紝浠ヨ幏寰楁柊鐢熸垚鐨勫潡骞惰幏寰椾竴瀹氭暟閲忕殑浠ュお甯佸栧姳銆傝屼互澶鍧婃寲鐭跨殑闅惧害涓昏佹槸鐢变互涓嬩袱涓鍥犵礌缁煎悎鍐冲畾鐨勩
棣栧厛锛屾寲鐭块毦搴﹀彇鍐充簬姣忎釜鍧椾腑鍖呭惈鐨勪氦鏄撴暟閲忋傛瘡涓鍧椾腑鍖呭惈鐨勪氦鏄撴暟閲忚秺澶氾紝鍏惰В鍐崇殑瀵嗙爜闅鹃樺氨瓒婂嶆潅锛屾寲鐭块毦搴︿篃灏辫秺澶с傝繖涓鐐逛笌姣旂壒甯佺被浼硷紝姣旂壒甯佺殑鎸栫熆闅惧害涔熸槸鏍规嵁姣忎釜鍧椾腑鍖呭惈鐨勪氦鏄撴暟閲忔潵璁$畻鐨勩
鍏舵★紝浠ュお鍧婇噰鐢ㄤ簡鍚嶄负鈥滆皟鏁存寲鐭块毦搴︹濈殑鏈哄埗鏉ョ‘淇濇寲鐭块熷害鍜岀綉缁滃畨鍏ㄣ傝ユ満鍒舵牴鎹涓婁竴涓鍧楃殑鎸栫熆鏃堕棿鏉ヨ皟鏁存寲鐭块毦搴︼紝浠ヤ繚鎸佹瘡涓鍧楄瑙e喅鐨勬椂闂村ぇ绾︿负15绉掋傚傛灉鍧楃殑鎸栫熆鏃堕棿浣庝簬15绉掞紝闅惧害灏嗚嚜鍔ㄥ炲姞锛屽弽涔嬪垯浼氬噺灏戙
璋冩暣鎸栫熆闅惧害鐨勬満鍒跺彲浠ョ‘淇濅互澶鍧婄殑鎸栫熆閫熷害濮嬬粓淇濇寔绋冲畾锛屼粠鑰岄伩鍏嶄簡鎸栫熆閫熷害杩囧揩鎴栬繃鎱㈢殑鎯呭喌銆傚悓鏃讹紝涔熶娇寰椾互澶鍧婄綉缁滄洿鍔犲畨鍏锛屽洜涓轰换浣曟伓鎰忕熆宸ラ兘鏃犳硶閫氳繃鍗曠嫭鎿嶄綔鏉ョ牬鍧忚ユ満鍒躲
鎬荤殑鏉ヨ达紝浠ュお鍧婃寲鐭块毦搴︾殑璁$畻鏄缁煎悎鑰冭檻姣忎釜鍧椾腑鍖呭惈鐨勪氦鏄撴暟閲忓拰璋冩暣鎸栫熆闅惧害鏈哄埗鏉ュ疄鐜扮殑銆傝繖绉嶈$畻鏂瑰紡纭淇濅簡浠ュお鍧婄綉缁滅殑绋冲畾鍜屽畨鍏ㄦэ紝鍚屾椂涔熶繚璇佷簡鐭垮伐鐨勬敹鐩婂拰鏁翠釜绀惧尯鐨勮繍浣溿
⑤ 一枚比特币卖$64015,家用电脑24小时挖矿,多久才能挖到一枚
从理论上来讲,任何一台可以运转的计算机安装相应软件后即可成为“挖矿机”,这意味着任何拥有电脑的人也都是潜在的矿工。
很多人可能觉得比特币挖矿很容易,只需要下载一个软件,然后在电脑上运行就行了,就像运行炒股软件一样,在这只能说大家是异想天开。
事实上按照目前比特币的挖矿难度来看,普通的家庭电脑根本就吃不消,比特币挖矿其实就是在运算,这种特定的算法是基于加密哈希算法的数学难题,想要解开这一数学难题,则需要这台用于挖矿的计算机具备极强的数据处理能力。
在几年前比特币挖矿难度比较低的时候,家庭电脑或许还可以用到,在最开始的时候,确实有不少人用家庭电脑挖到比特币了。
但是随着比特币挖矿难度越来越大,它所消耗的运力越来越多,特别是最近一段时间,有大量的人群加入到挖矿当中,挖矿的速度比较快,这进一步加大了挖矿的难度。
比特币平均下来大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币,每开采210,000个块,大约耗时4年,货币发行速率降低50%。
而未了达到平均每10分钟产生一个新区块的平衡,挖矿难度在每2016个区块之后或大约每14天增加或减少一次,具体难度是增加还是减少主要取决于发现之前2016个区块的速度。如果之前的2016年区块发现时间少于14天,则难度增加,而如果发现时间超过14天则难度降低,目标是将平均区块发现时间恢复到10分钟。
而按照最近一段时间参与挖矿的人数来看,事实上发现2016个区块的速度可能要小于14天,这意味着越往后面挖矿难度越大。
如果中本聪把比特币换成法币,需要他的银行账号去接收法币,这家银行将有一批人知道中本聪的真实身份,在这种情况下,我认为全员保守秘密是不可能的,一定会有人通过某种方式将信息泄露出来。这就意味着中本聪完全暴露在世人面前,中本聪长期以来保持匿名的努力毁于一旦。
这么多年来,有无数人声称自己是中本聪,最终没人能证明自己就是中本聪。而他们想证明自己也很简单,用中本聪的地址交易1美元即可。
当然,如果中本聪想把比特币换成其他加密货币,是不会暴露身份的,但这样做的意义是什么?他是比特币世界的上帝,不是以太坊世界的上帝, 一个上帝不能背叛自己的世界 。
更进一步思考,中本聪为什么要把比特币换成美元?在白皮书里,中本聪对比特币的定义是一种“电子现金系统”,毫无疑问他的理想是比特币终有一天变成全世界都认可的“钱”。 如果比特币真成了钱,比美元更普适的钱,还需要换成美元吗?
我们不如去思考一些更有趣的问题,比如:我们让比特币涨到多少,能帮助中本聪成为真正的世界首富?
中本聪的身份,是比特币世界最大的谜团,是构成一个好故事不可缺少的一环。我经常会猜想,如果我是中本聪,我会怎么做,我的目标是什么,我要解决什么问题,等等。思考越多,就发现这个故事越有趣, 有趣程度甚至不输给比特币本身 。
#比特币[超话]# #数字货币# #欧易OKEx#
⑥ 什么是比特币挖矿难度如何调整原理是什么
比特币挖矿难度(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 分钟调整一次),有明显的滞后性。你认为是哪种调整方式更合理呢?为什么呢?欢迎在留言区分享你的观点。
⑦ 挖矿难度表示
比特币的挖矿难度可以使用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格式信息一致。
⑧ 涓轰粈涔堝叏缃戠殑璁$畻鑳藉姏涓婂崌,鎸栫熆闅惧害浼氬炲姞鍛
涓銆佷负浠涔堝叏缃戠殑璁$畻鑳藉姏涓婂崌,鎸栫熆闅惧害浼氬炲姞鍛?
杩欎釜杩樻槸姣旇緝濂界悊瑙g殑锛屽叏缃戠殑璁$畻鑳藉姏涓婂崌锛岃В寮姣忎釜hash鍊肩殑閫熷害灏变細鍙樺揩锛屼絾鏄浜х敓鍖哄潡鐨勬椂闂翠笉浼氬彉锛屾墍浠ユ寲鐭跨殑闅惧害灏变細鎻愬崌銆
鐜板湪鐨勬寲鐭垮叾瀹炲凡缁忓彉寰楀緢闅句簡 锛屽ぇ澶氭暟鐨勭敤鎴峰凡缁忛噰鐢ㄦ樉鍗$熆鏈+鍝堥奔鐭垮伐鐨勬柟寮忔寲鐭夸簡锛
浜屻佷互澶鍧婏紝鍏ㄧ綉绠楀姏澧炲姞锛屽叏缃戦毦搴︿篃浼氬炲姞锛屾樉鍗℃寲鐭胯繕鑳界帺澶氫箙锛
鐜板湪浠ュお鍧婃e湪閫愭ヤ粠pow杞鍒皃os锛屽湪涓嶄箙鐨勬湭鏉ワ紝鑰楄垂鐢靛姏銆佺畻鍔涚瓑璧勬簮鐨勫尯鍧楅摼鎸栫熆椤圭洰浼氶愭ヨ缁胯壊鐜淇濆拰鏇寸戝︺侀槻閲忓瓙鏆村姏鐮磋В鐨勬寲鐭挎柟寮忔墍鏇夸唬銆傜幇鍦ㄧ殑鍖哄潡閾鹃」鐩涓锛岀豢鑹茬幆淇濈殑椤圭洰宸茬粡濡傞洦鍚庢槬绗嬭埇鍐掑嚭鏉ワ紝姣斿侾i鈥旀墜鏈烘寲鐭垮紑鍒涜咃紝浼氭湁瓒婃潵瓒婂氱殑浜鸿佽瘉鏂板尯鍧楅摼鐨勮癁鐢熷拰鎴愰暱锛
浠ュお鍧婂湪涓涓ゅ勾鍐呬細杩涘寲鍒2.0鐗堟湰锛屽眾鏃朵細杞鍙樻寲鐭跨殑鏂规硶銆
绠鑰岃█涔嬪氨鏄2.0鍑烘潵浠ュ悗灏变笉鑳界敤鏄惧崱鎸栫熆浜嗭紝浣嗘槸浠1.0鎱㈡參杩囨浮鍒2.0涔熼渶瑕佷竴娈垫椂闂达紝鎵浠ヤ篃涓嶇敤澶鎱屻
鎴戜滑杩涘叆杩欎釜甯傚満鏄鏉ヨ禋閽辩殑锛屾寲鐭夸細鑰楄垂鏇村ぇ鐨勮祫閲戜互鍙婄簿鍔涳紝璧氱溂鍓嶈ヨ禋鐨勯挶锛屾妸閽辫禋鎵嬮噷杩欐墠鏄纭閬撶悊銆傜洰鍓嶈秼鍔夸笉閿欐尝娈电煭绾垮楀埄锛岃禋鐫杩欎箞棣欐妸鐪煎墠璇ユ敹鑾风殑璧氬埌鍏滈噷锛岃嚦浜庢寲鐭胯兘鎸栧氭枻锛岃蛋IU涓姝ヨ翠竴姝