區塊鏈技術與應用 BTC挖礦難度

2022-01-11 10:31:06 字數 1439 閱讀 7034

挖礦就是不斷嘗試nonce,使整個block header中的雜湊值小於等於給定的目標閾值 target。h(block header) <= target

target越小,挖礦難度越大。調整挖礦難度,就是調整目標空間在整個輸出空間中所佔的比例。位元幣中的hash演算法是sha-256,整個輸出空間是2^256個可能取值。通俗的說,調整目標空間佔整個輸出空間的比例,就是雜湊值前面要多少個0,但不是完全準確。

挖礦難度 difficulty與目標閾值 target成反比。difficulty = difficulty_1_target(挖礦難度位1時所對應的閾值) / target(當前的目標閾值)。difficulty最小就是1,此時的target是非常大的數。

系統總算力越來越強,如果難度不變,出塊時間將會越來越短。乙個區塊傳播給大多數節點所需要的時間大約是幾十秒,如果出塊時間縮短,如幾秒鐘乙個,那麼會很容易出現分叉。分叉過多,系統不易達成共識,威脅系統安全性。

假設大部分算力掌握在誠實的人手裡。系統中總算力越強,安全性越好,因為要發動51%攻擊所需要的算力也就越大。但是如果出現過多分叉,系統中的總算力就會被分散,惡意節點集中算力擴充套件自己的分叉,很快就可以成為最長鏈,此時可能不再需要51%算力才能發動攻擊,攻擊成本大大降低。

每2016個區塊調一下閾值 target。(2016*10min)/(60min*24h)= 14天。也就是每14天調整一下閾值 target。

target = target *(actual time / expected time)

difficulty = difficulty *(expected time / actual time)

這張圖顯示的是09-18年位元幣系統中總算力的情況。沒有流行之前很長一段時間沒有明顯增長,後面幾年增長較快,呈現指數級的增長。但是即使在這段期間,算力也不是單調遞增,中間有波動,但是總體是增長很快的。

這個是09-18年挖礦難度的變化情況。與算力增長幾乎同步,通過調整挖礦難度,使得出塊時間保持穩定。

這個圖顯示的是10-18年每天的出塊時間。總的來說出塊時間穩定在10分鐘上下震動,說明難度調整達到了預期目的。

BTC 挖礦(區塊鏈技術與應用)

位元幣系統中有兩種節點,一種是全節點,一種是輕節點。全節點特徵 在本地硬碟上維護完整的區塊鏈資訊 在記憶體中維護utxo集合,以便快速檢驗交易的正確性 監聽位元幣網路上的交易資訊,驗證每個交易的合法性 有沒有合法簽名,是不是double spending 決定哪些交易會打包到區塊裡 預設狀況下只要合...

區塊鏈技術與應用 BTC密碼學原理

加密貨幣並不加密,區塊鏈上所有的交易內容都是公開的,包括賬戶位址,轉賬金額等。cryptographic hash function collision 指的是雜湊碰撞 如果x y,hash x hash y 這就是雜湊碰撞,兩個不同的輸入算出的雜湊值是相等的,不可避免。因為無限的輸入對映到有限的輸...

BTC 位元幣的共識協議(區塊鏈技術與應用)

怎麼驗證交易的合法性,防止雙花攻擊 由所有使用者來共同維護,這個資料結構是區塊鏈 位元幣系統中每個交易都分為輸入部分和輸出部分,輸入部分要給出這筆交易的位元幣的 以及付款方的公鑰,輸出部分要給出收款人的公鑰的雜湊值。位元幣系統中的收款位址就是收款人的公鑰取雜湊再經過一些轉換得到的。位元幣中的全結點要...