全網算力挖礦難度關系
比特幣挖礦難度(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 分鍾調整一次),有明顯的滯後性。你認為是哪種調整方式更合理呢?為什麼呢?歡迎在留言區分享你的觀點。
② 比特幣算力大幅下降,會有什麼影響
1、低成本的幣可能增加市場的拋壓
尤其是7nm礦機的大規模上市,其挖礦成本在26000人民幣上下, 對於礦工而言,仍有較大的利潤空間,出於運營維護礦場日常的需求,必然存在部分拋壓,算力的下降,反倒會減少市場上流動的幣。
2、礦機商為了新礦機的銷售,可能通過打壓幣價,淘汰老礦機,從而增加新礦機的銷售量
以上一款主流老礦機螞蟻S9為例,當算力增加到100EH/S時,只要幣價達到7000美元左右,螞蟻S9以上的老舊礦機都將淘汰,只要這樣的幣價維持2個月左右,將倒逼礦場與礦工出清老礦機,購買新的大算力礦機。
3、當前市場普遍看好減半行情,為了減少下降的阻力,極有可能會經歷一波下行
為減輕減半的下降主力,市場有較大的可能經歷一波下行,礦場與礦工為了為了鎖定挖礦的收益,有較大的可能採取套保措施,從某種程度上,會增加市場的下降阻力,增加上行的風險。
也就是說算力下降的背後,是由於幣價的下行,以及7nm礦機的投產,在利潤空間增大的刺激下,市場購買大量新型礦機,投入到挖礦中,從而造成比特幣算力的下降。
眾所周知,算力的大幅上漲,是幣價上漲的結果,而不是幣價上漲的原因。反倒是大算力礦機投產導致的算力的快速上漲,增加了比特幣的拋壓,增加了下行的風險。
比特幣算力下降影響價格嗎?
首先,如果BTC的價格可以維持,目前還在挖礦的礦工利潤上升了,而且上升的比例不止15%,舉個簡單的例子,假如之前有礦工電費成本10元,能挖到20元的幣,利潤是10元,難度下降之後,能多挖15%的幣,就是23元,電費成本不變,利潤就是13元,利潤上升了30%。前段時間幣圈有大佬說礦場和部分礦工可能在托盤,因為BTC的價格即將跌破他們的關機價,現在來看,由於利潤上升,他們的底線可能會下調,短期內對比特幣的價格可能是一個利空,不過影響BTC價格的因素還有很多,我們可以拭目以待。
比特幣算力下降意味著什麼?以上就是比特幣算力下降意味著什麼的相關內容,其實挖比特幣的算力實質上是一直在求解,這樣就能保證最長的鏈條擁有全網最大的工作量,從而不會被更改,這樣也就實現了比特幣系統是堅固的,是不會被人攻擊的,也就是說比特幣算力是為了維護比特幣網路的安全,因此比特幣算力對於比特幣來說是非常重要的,而對於礦工來說,比特幣算力也是極為重要的,畢竟比特幣算力的變化直接影響礦工挖礦的難度。
比特幣挖礦賺不賺錢,有5個非常關鍵的數據對其產生影響:比特幣價格、算力、電費成本、全網挖礦難度、礦機成本價。後面4個因素,彼此之間互相影響,最後可能對BTC價格產生影響。
4月6日,一篇題為《中國比特幣區塊鏈運行的碳排放量與可持續性的政策評估》的論文發表在了《自然通訊》上,來自中國科學院、清華大學學者的這篇論文,引發了中國甚至海外媒體的關注。在國家的「雙控」目標下,新疆、內蒙等地的火力發電的礦場被迫停止運營。在針對比特幣挖礦的監管要求下達後,近期比特幣全網算力暴跌了20%。
那麼比特幣全網算力大跌以後對廣大礦工有什麼影響呢?首先咱們要這里先解釋一下什麼是挖礦難度調整。中本聰在發明比特幣時,將難度調整的邏輯寫在了代碼中,每個全節點中獨立自動發生。這個邏輯是:比特幣大約每10分鍾挖出一個塊,每挖出2016個塊調整一次,正常情況下,每14天左右會調整一次難度,挖礦的難度是根據之前一個周期的比特幣全網算力來調整,所以難度和全網算力是相關的,時間上有一定程度的滯後。概括來說,挖礦難度調整是為了調整出塊(比特幣)的快慢,難度越高出塊越慢,難度越低出塊越快。
從上圖可以看出,預測挖礦難度會在5月30日下降到21.86T,不難猜測,近期的難度下降比較明顯的原因有兩方面:1、國家監管出拳,整頓內蒙、新疆等地的虛擬貨幣礦場,礦場停運導致的全網算力下降。2、BTC價格大幅下跌,導致老的礦機已經不賺錢,這部分礦機的關機會導致全網算力下降。
那麼全網算力、挖礦難度是一個什麼樣的關系呢?這里有一個邏輯,全網算力下降說明挖礦的人少了,導致的結果是出塊的速度加快,也就是挖礦難度下降了。那麼咱們是不是可以這么理解:全網算力下降,致使挖礦難度下降,礦工更容易挖到比特幣了呢?
更好挖了,錢都讓別人賺去了
③ 浠ュお甯佹庝箞鏍風湅綆
浠ュお甯佹庝箞鐪嬬畻鍔
浠ュお甯佺殑綆楀姏鏄鎸囧叏緗戝弬涓庢寲鐭跨殑鎵鏈夌熆鏈虹殑緇煎悎璁$畻鑳藉姏銆傜畻鍔涜秺澶э紝鎰忓懗鐫鍏ㄧ綉涓婄熆鏈虹殑鏁伴噺鍜屾ц兘瓚婇珮錛屾寲鐭塊毦搴︿篃灝辮秺澶с
涓鑸鏉ヨ達紝浠ュお甯佺殑綆楀姏鍙浠ヤ粠浠ヤ笅鍑犱釜鏂歸潰鏉ヨ傚療錛
鍏ㄧ綉綆楀姏錛氬彲浠ラ氳繃涓浜涚涓夋柟緗戠珯鎴栧簲鐢ㄧ▼搴忔潵鏌ョ湅褰撳墠浠ュお甯佺綉緇滅殑鎬葷畻鍔涖備緥濡傦紝Etherscan緗戠珯鍙浠ユ彁渚涘叏緗戠畻鍔涙暟鎹銆
鐭挎睜綆楀姏錛氫互澶甯佺殑鎸栫熆閫氬父鏄閫氳繃鐭挎睜榪涜岀殑錛屼笉鍚岀熆奼犵殑綆楀姏涔熶笉鍚屻傚彲浠ラ氳繃鐭挎睜鎻愪緵鐨勬暟鎹鏉ヤ簡瑙e叾綆楀姏澶у皬銆
涓浜虹畻鍔涳細濡傛灉浣犺嚜宸卞弬涓庝互澶甯佺殑鎸栫熆錛屽彲浠ラ氳繃鎸栫熆杞浠舵潵鏌ョ湅鑷宸辯殑鐭挎満綆楀姏澶у皬銆備竴鑸鏉ヨ達紝鐭挎満鎬ц兘瓚婇珮錛岀畻鍔涗篃灝辮秺澶с
鎬諱箣錛屼互澶甯佺殑綆楀姏鏄鍙嶆槧鍏ㄧ綉鍙備笌鎸栫熆鐨勭患鍚堣$畻鑳藉姏錛屽彲浠ラ氳繃澶氱嶉斿緞榪涜岃傚療鍜屼簡瑙c
④ 自學區塊鏈(六)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裡面有難度的一個壓縮編碼,修改難度產生的結果是不會被誠實的節點認可的。
⑤ 比特幣挖礦的難度和算力
難度是對挖礦困難程度的度量,即指:計算符合給定目標的一個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天