Difficulty
為什麼目標完全儲存在塊中?
目前,目標儲存在每個塊中。這是為什麼?為什麼它不是由每個客戶端根據先前塊的先前時間戳簡單地計算出來的?為什麼它必須儲存在塊中?
換句話說,不允許礦工選擇目標是否意味著創建新區塊的難度呈指數增長?其他礦工可能不得不開採 256 個後續區塊,但我只需要幸運一次,就可以得到一個有 8 個零的區塊來替換這 256 個區塊。雖然可能性較小,但它呈線性增長(可能性小 256 倍)而不是指數增長。
您將其呈現為允許礦工選擇難度或讓其被先前的歷史暗示之間的選擇。
事實上,兩者都不是真的。目標由歷史確定(出於您提出的原因),儲存在塊頭中的目標必須與歷史確定的值相匹配。
在這一點上,沒有充分的理由這樣做了,從頭開始的設計可能會在 IMO 中刪除標頭中的 nBits 值。
我不知道最初的原因,但我的猜測是它允許對塊頭進行更強大的無上下文驗證。在 0.10 版本之前,Bitcoin Core 不使用首部同步,因此在接收特定塊時通常沒有可用的所有父首部。能夠驗證區塊是否具有有效的 PoW(即使難度可能是錯誤的)是防止 DoS 攻擊的非常有價值的機制。