比特幣為什麼不會每十分鐘準時出塊?

比特幣為什麼不會每十分鐘準時出塊?的文章封面插畫

比特幣常被描述為「大約每十分鐘產生一個區塊」。一般人很容易把這句話理解成固定班表:整點過十分、二十分、三十分,網路就應該各完成一次更新。

可是,實際紀錄有時接連出現兩個區塊,有時又會安靜半小時甚至更久。這不表示系統的時鐘壞了。十分鐘從來不是單一區塊的截止時間,它是挖礦難度試圖維持的長期平均節奏。

礦工參加的是機率競賽

礦工會反覆改變候選區塊中的資料,計算結果是否低於協議設定的目標值。每一次嘗試都像重新抽一張籤;先前失敗再多次,也不會讓下一次必然更接近成功。算力愈高,代表每秒能抽更多次,找到合格結果的機會也隨之增加。

這種機率過程沒有「累積到十分鐘就保證中籤」的機制。即使上一個區塊才剛出現,下一次嘗試仍可能立刻成功;即使大家已經等了很久,接下來也沒有一個隱藏進度條會自動填滿。短間隔與長間隔都會自然發生。

因此,觀察少數幾個區塊,很難判斷網路是否偏離目標。把時間拉長、累積足夠多次結果後,平均值才會逐漸靠近協議希望的節奏。這和擲硬幣相似:連續幾次正面很常見,並不會推翻長期比例。

難度調整負責拉回平均速度

如果全球礦工突然增加設備,而難度維持不變,每秒嘗試次數就會增加,區塊平均會更快出現。反過來,許多設備同時離線,平均等待時間就會拉長。比特幣用定期難度調整回應這些變化。

網路每累積 2,016 個區塊,就依這一批區塊實際花費的時間重新計算門檻。若完成得比預期快,下一段的挖礦難度提高;若完成得較慢,難度降低。目標是讓 2,016 個區塊大致花兩週完成,換算後才得到大家熟悉的平均十分鐘。

這套回饋機制只修正整體平均,不會消除每次結果的隨機性。它也有反應時間:算力在兩次調整之間大幅變化時,出塊速度可能暫時偏快或偏慢,直到下一次調整才逐步拉回。若只看某一個小時,波動往往比調整效果更醒目。

區塊時間戳不是發車鐘

每個區塊會帶有時間戳,方便全節點檢查時間是否落在可接受範圍,也讓帳本保有大致的時間順序。不過,時間戳不負責觸發新區塊。礦工不能等到鐘面跳到某一刻,就直接取得有效結果;它仍然必須完成符合難度的工作量證明。

各地電腦的時鐘可能略有誤差,網路傳播也需要時間,所以比特幣只要求時間資訊符合一組容許誤差的規則。區塊高度能明確表示先後順序,時間戳則較接近粗略的時間參考。把兩者混為一談,才會產生「到了十分鐘怎麼還沒出塊」的疑問。

等待確認不能只看牆上的鐘

這項設計直接影響使用經驗。一筆交易廣播後,要等礦工把它放進有效區塊,才會得到第一次交易確認。即使手續費足以被優先選入,下一個區塊何時出現仍有隨機性;「平均十分鐘」無法保證每筆交易都在十分鐘內確認。

後續確認同樣以新增區塊計算。某筆交易累積六次確認,表示它所在區塊之後又疊上五個區塊,並不等於牆上時間精確經過一小時。若當天區塊來得快,六次確認可能提早完成;遇到較長間隔,也可能超過一小時。

這不確定性是工作量證明的運作特徵,也構成即時支付的現實摩擦。收款方需要依金額、風險與情境決定要等待多少確認;協議提供的是可累積的區塊深度,沒有提供固定到站時間。

為何仍要設定十分鐘目標

目標間隔若太短,新區塊可能還沒傳遍全球,另一批礦工就已經找到競爭區塊,增加短暫分岔與資源浪費。間隔若太長,交易首次被收錄的等待也會更久。十分鐘是比特幣早期設計選定的折衷參數,平衡傳播時間、更新頻率與工作量累積,並非自然界不可改變的常數。

重點在於分清「統計平均」與「定時排程」。難度調整像一個緩慢校正航向的控制器,讓大量區塊的平均速度回到目標附近;每一個區塊仍由獨立的機率競賽決定。理解這層差異,就能看懂為何比特幣可以長期維持約十分鐘的節奏,同時又從不承諾下一個區塊準時抵達。