Difficulty

區塊是否需要記錄 nBits 難度參數?

  • December 23, 2014

解決塊的下一個難度取決於在它之前解決塊的速度。另外,難度每兩週左右才變化一次。

那麼,不是每個節點都可以跟踪預期的難度並且不需要在每個塊頭中都有它嗎?或者節點是否有理由需要在每個區塊中傳達目前的難度?並不是說這會是一個重大的節省,或者任何東西,當它只是一個鏈條的所有其他部分的一個功能時,它被包括在內似乎很奇怪。

也許是因為如果你每次想要計算下一個難度時都必須遍歷所有塊頭,最終計算 nBits 會花費很長時間?

回顧Nakamoto 白皮書,對於簡化支付驗證 (SPV) 客戶,安全性主要通過為保護特定交易而完成的工作量來衡量。SPV 節點不能單獨使用過去的標頭來驗證收款是否有效,因此技術上不需要儲存過去的標頭[1]。

當然,如果您不打算儲存所有標頭,則需要某種方法來衡量您擁有的標頭的難度——nBits 提供了這一點。

請注意,儲存最近的標頭可以增加 SPV 客戶端的安全性,因為它允許它為以後的標頭計算適當的難度。這確保了試圖欺騙客戶端的攻擊者必須創建適當難度的塊。儘管如此,這裡不需要完整的標頭鏈,因此 nBits 作為起始值仍然很有用。

[1] 但是 BitcoinJ 和我所知道的所有其他 SPV 客戶端仍然會儲存完整的標頭。據推測,他們這樣做的原因是幫助他們檢測鏈重組(重組),這將使先前收到的付款無效。

引用自:https://bitcoin.stackexchange.com/questions/34155