比特幣挖礦難度為什麼每 2016 個區塊調整一次?

比特幣常被描述成「每十分鐘產生一個區塊」,而礦機數量與效率又會持續變動。直覺上,網路似乎需要一個中央控制室,隨時觀察全球算力並旋轉難度旋鈕,才能維持節奏。
不過,比特幣沒有可靠的全球算力計,也不要求每個區塊準時抵達。礦工做的是機率性的雜湊搜尋,十分鐘只是長期平均;全節點只能從已收到的區塊,重建大家共同看得見的歷史。
因此,協議採用一個可由所有驗證者獨立計算的回饋機制:每完成 2016 個區塊,就比較這段區間實際花了多久,再調整下一段期間的挖礦難度。這個窗口大約對應兩週,讓系統能追隨算力的持續變化,又不必因幾次偶然的快慢立即改動門檻。
難度決定一次嘗試有多難成功
挖礦時,礦工反覆改變候選區塊中的可調資料並計算雜湊。結果若低於當時的目標值,這份工作量證明才符合規則。目標值愈低,可接受的結果範圍愈小,平均要嘗試的次數愈多;人們慣稱此時的難度較高。
每個全節點都能從既有區塊推導當期目標,並自行檢查新區塊是否達標。網路不必先投票估算有多少礦機在線,也不採信礦工自行申報的算力。從一段時間實際找到多少合格區塊,便能間接看出目前工作速度相對於既定門檻有多快。
若算力增加而難度不變,整個網路每秒會進行更多次嘗試,區塊平均便會更快出現。算力減少時,合格結果平均要等得更久。難度調整的功能,是改變下一次嘗試成功的機率,使長期節奏在算力改變後逐步回到目標附近。
2016 個區塊把機率雜訊攤平
單一區塊的等待時間可能只有幾秒,也可能超過一小時。這類現象仍符合規則,因為隨機搜尋原本就會產生很寬的時間分布。若每找到一個區塊便重新調整難度,偶然的快區塊可能被誤判成算力暴增,下一個慢區塊又讓系統朝反方向修正。
2016 乘以十分鐘,預期約為 20,160 分鐘,也就是 14 天。調整點會比較這批區塊的實際時間跨度與預期跨度:若完成得太快,接下來的目標會變嚴格;若完成得太慢,目標則會放寬。調整幅度大致依兩者比例決定,而非只看最後一個區塊等了多久。
這項設計需要在平滑與反應速度之間取捨。較長窗口能降低隨機波動對難度的影響,代價是系統對真正的算力變化反應較慢。2016 沒有自然界唯一正確的地位,它是比特幣規則選定並由參與者共同驗證的參數;改成別的週期會連帶改變穩定性、反應速度與攻擊面。
調整只在區間邊界發生
同一個 2016 區塊期間內,難度通常維持不變。假設大量礦機在區間剛開始後加入,接下來的區塊可能暫時比十分鐘快,直到下一個調整點才提高難度。反過來,大量算力突然離開時,區塊可能變慢,而且抵達調整點本身也要花更久。
所以,「兩週調整一次」只是正常算力附近的日曆估計。協議真正計數的是區塊高度,並非每隔 14 天由某台伺服器觸發排程。若區塊整體較慢,2016 個區塊所需的現實時間會超過兩週;整體較快時,調整點則提早到來。
這個延遲也構成現實限制。難度機制能修正持續性的算力差距,無法保證短期交易確認速度固定,更不能在大規模算力離線後立即恢復原節奏。使用者看到某幾個區塊很慢時,不能只憑短樣本推論網路已永久失去運作能力。
四倍上限防止單次校正過猛
比特幣還限制一次難度調整所採用的時間跨度。即使最近區間顯示極端快慢,單次校正幅度最多約為四倍:難度不會一次增加超過四倍,也不會一次降低到原本的四分之一以下。
這項限制能降低異常時間資料或劇烈短期變動造成過度校正的風險,卻也讓系統在極端算力崩落時需要多個週期才能完全追上。保守調整提高了規則的可預期性,同時犧牲部分緊急反應速度。
區塊標頭的時間戳也不能當成精密鐘錶。節點會檢查它是否落在規則容許的範圍,礦工仍有有限的填寫空間;網路延遲與各地時鐘誤差也會存在。因此,難度調整使用的是足以約束整段歷史的時間資料,並配合幅度上限降低極端值的影響,沒有把時間戳提升成現實世界的精準公證時間。
維持節奏不等於維持安全成本
當算力減少後,難度降低可以讓剩餘礦工再次以接近目標的速度找到區塊。可是,更低難度代表每個區塊要求的預期工作量也下降;它不會把已離線的設備召回,更不會憑空補足保護近期帳本的實體計算成本。
同樣地,難度上升表示網路觀察到上一區間相對更快,無法單獨證明礦工更加分散、能源來源更合理,或任何一筆交易已經安全。難度描述的是目前找到合格區塊所需的門檻,安全性仍受到總工作量、算力分布、節點驗證與交易累積確認等條件共同影響。
因此,每 2016 個區塊調整一次,是一套只依共同歷史就能重算的閉環控制。它用較長窗口吸收隨機雜訊,再以受限幅度追隨算力變化,讓平均出塊時間回到約十分鐘。這套機制換來的是可驗證與相對穩定的長期節奏;短期快慢、調整延遲與安全成本變化,仍是它明確留下的邊界。