Blockchain
一個塊的 nBits 是如何計算的?
所以我一直試圖弄清楚一個塊的 nBits 是如何計算的,但我似乎無法找到答案。我知道(認為)它是基於塊的難度,但我仍然不確定它是如何工作的。例如,創世塊的難度為1.0,但該塊的 nBits 為486,604,799 (0x1d00ffff)。然後,如果我們查看最近的區塊,它的難度級別為21,434,395,961,348.92,但 nBits 為386,736,569 (0x170d21b9)。
所以我的問題是,一個塊的 nBits 究竟是如何計算的,它與一個塊的難度有什麼關係?
謝謝
nBits
是塊的散列必須小於的目標值的壓縮表示。比特幣實際上並不關心難度。困難只是讓人類去思考實際完成了多少工作。比特幣只關心nBits
它所代表的目標價值。塊的雜湊值必須小於該目標值。nBits
每次難度變化時都會重新計算。計算採用前一個目標(previousnBits
),並按該困難期所用的實際時間跨度與困難期目標時間跨度的比率對其進行縮放。它的程式碼所做的是(在虛擬碼中):
new_target = last_block.nBits.uncompress(); new_target *= actual_timespan; new_target /= target_timespan; this_block.nBits = new_target.compress();
所以
nBits
從創世區塊的價值開始,然後根據區塊被探勘的速度來擴大和縮小。
nBits
和難度之間的關係是倒置的。隨著nBits
代表越來越小的目標,難度值上升。計算本質上只是目前目標值與最大目標值之間的比率,這也恰好是在創世塊中找到的目標值。難度是目前目標除以最大目標。