自學(xué)區(qū)塊鏈(六)BTC-挖礦難度

我們來看下挖礦的計算公式

H(block header)\leq target,這個target就是目標(biāo)閾值

BTC用的哈希算法是SHA-256,它產(chǎn)生的哈希值是256位,那么就有2^256種取值,這個就是他的輸出空間,要增大挖礦難度,就調(diào)節(jié)目標(biāo)值在這個輸出空間所占的比例。

挖礦難度和目標(biāo)閾值是成反比的,當(dāng)算力強時,調(diào)節(jié)難度,使目標(biāo)閾值變小

為什么要調(diào)節(jié)難度

不調(diào)節(jié)難度,隨著礦工數(shù)量增多,隨著算力的上升,那么挖到區(qū)塊的時間就會變短,從10分鐘縮短到1分鐘甚至幾秒鐘,這個會帶來什么樣的問題呢?可能很多人覺得這不是挺好嗎,交易等六個確認(rèn)就會縮短時間了,交易就會變快了。其實出塊時間縮到很短,風(fēng)險是很大的,因為網(wǎng)絡(luò)延遲,出塊時間變短,不同節(jié)點很可能接到不同的區(qū)塊信息,導(dǎo)致會有很多分叉節(jié)點出現(xiàn)。礦工會根據(jù)自己認(rèn)為正確的區(qū)塊接著挖。這種情況下,惡意節(jié)點發(fā)動分叉攻擊就比較容易成功,因為誠實節(jié)點的算力被分散了。

導(dǎo)致不需要51%的算力就能成功,所以縮短出塊時間是不利于BTC系統(tǒng)的穩(wěn)定的。雖然10分鐘不一定是最優(yōu)的時間,但是也算是比較合理的。

下面是算力增長曲線

下面是挖礦難度曲線

下面是平均出礦時間


平均在10分鐘

如何調(diào)節(jié)出塊時間呢

我們來看下難度公式:每2016個區(qū)塊調(diào)整一次挖礦難度,10分鐘出一個平均算下來是兩星期調(diào)整一次。

previous_difficulty是上一次的挖礦難度,分母是最近2016個區(qū)塊花費的時間


每個節(jié)點挖礦是獨立的,BTC的協(xié)議也是開源的,會不會有礦工不修改挖礦難度呢?可能性是存在的,但是不影響結(jié)果,因為廣播給其他節(jié)點需要獨立驗證block header的哈希值,這個header里面有難度的一個壓縮編碼,修改難度產(chǎn)生的結(jié)果是不會被誠實的節(jié)點認(rèn)可的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容