區塊鏈學習筆記6——BTC挖礦難度
學習視頻:北京大學肖臻老師《區塊鏈技術與應用》
筆記參考:北京大學肖臻老師《區塊鏈技術與應用》公開課系列筆記——目錄導航頁
為什么要調整挖礦難度
挖礦:不斷嘗試nonce使整個block header的哈希值小于等于目標閾值 H(block header)<= target (target越小,挖礦難度越大)
調整挖礦難度就是調整目標空間在整個輸出空間中所占的比例
位元幣用的哈希方法是 SHA-256,產生的哈希值是256位,整個的輸出空間是2256,調整目標空間所占比例,簡單的說需要目標值前需要多少個0,
這里是參考
挖礦難度與目標閾值成反比
difficulty_1_target是挖礦難度等于1時所對應的目標閾值
挖礦難度最小為1,此時對應的target是一個很大的數
- 如果不調整挖礦難度會怎么樣?
如果挖礦難度不變,那么隨著算力增強,出塊速度會變快,出塊時間越來越短, - 出塊時間越來越短是好事嗎?
如果出塊時間縮短,那么交易可以很快便被寫入區塊鏈,并且提高了系統回應時間,增加了區塊鏈系統效率,但是,出塊時間并不是越短越好,出塊時間太短,也會造成一定的問題,首先,區塊在網路上傳播具有時延,假如出塊時間為1秒,但網路傳播需要10秒,則會使得系統中節點經常性處于不一致的狀態,增加了系統不穩定性,且系統經常性位于分叉狀態(不僅二分叉,乃至多分叉),分叉過多,則不利于系統達成共識,且會造成算力分散,使得黑客攻擊成本大大降低(不再需要整個系統51%的算力), - 10min的出塊間隔是最優嗎?
當然不是,以太坊中平均出塊時間僅為15秒左右,出塊速度是位元幣的四十倍,出塊時間大幅減少后以太坊設計了新的共識協議Ghost,在此協議中,分叉產生的區塊是orphan block,不會簡單丟棄掉,而是給予一些獎勵(uncle reward),以太坊中同樣需要調整挖礦難度,使出塊時間穩定,不能無限的減小下去,
怎樣調整挖礦難度
位元幣協議中規定,每隔2016個區塊要重新調整目標閾值,大概每兩周調整一次,

這里上調下調都是有限的,如果actual time非常長,超過了八個星期,也按照八個星期來計算,即target一次性最多只會增大四倍,如果actual time非常短,不到半個星期,也按照半個星期來算,即target一次性最小只會減小四倍,
怎樣讓所有礦工同時調整目標閾值?
計算target的方法是寫在位元幣系統的代碼里,每挖到2016個區塊會自動調整,如果有某個有惡意的結點故意不調整,其他誠實結點會驗證這個區塊的nBits域(對目標閾值的一個壓縮編碼,target有32個位元組,nBits只有4個位元組)不合法,這個區塊不會被接受
算力、挖礦難度、難度調整、出塊時間的變化曲線
算力變化情況:
最近一年(2017年)呈指數增長,不是嚴格遞增的,中間也有很多波動,需要注意的是,之前一段并非直線,而是之后增長太猛導致之前增長趨勢看上去太低,

挖礦難度變化情況:
和系統算力變化基本同步

難度調整曲線:
每隔兩個星期,難度上一臺階,反映出人們對位元幣的熱情越來越高

出塊時間:
總的來說穩定在10分鐘上下震動,難度調整達到了預期目的


轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393999.html
標籤:區塊鏈
下一篇:區塊鏈學習筆記5——BTC網路

