一座沒有主人的時鐘
想像一個本該每十分鐘響一次的廚房計時器。麻煩在於:掌勺的人總在變。有時灶台前只有一個人,有時有一萬個,而且手快的廚師每年都換上更利的刀。要是這計時器從不調整,一群手快的廚師就會讓它每十秒響一次。比特幣面對的正是這個問題。它想要新區塊永遠大約每十分鐘出現一次——可爭著產出區塊的機器數量卻劇烈起伏。它的答案,是一個自動旋鈕,它會重新調校謎題,讓這十分鐘的節奏無論來的是誰都能保持住。
產出區塊的這場比賽就是挖礦,它靠工作量證明運轉:礦工一個數一個數地試,直到某個數讓區塊的雜湊落到目標值之下。把目標值調低,謎題就更難;調高,就更容易。這十分鐘的時鐘,擰的正是這一個旋鈕。
重定難度:自我調校的旋鈕
比特幣每 2016 個區塊核對一次它的時鐘——按每個十分鐘算,這本該正好花兩週。每一批結束後,網路會把這 2016 個區塊實際花的時間,和那個兩週的理想值作比較,然後按比例重設挖礦難度。如果這一批一週就出完,說明礦工跑得比預期快了一倍,於是謎題的難度翻倍。如果拖到了四週,難度就減半。每個人各自跑同一套算術,得出同一個新目標值——沒有委員會,也不用投票。
every 2016 blocks: actual_time = timestamp(last) - timestamp(first) expected_time = 2016 * 10 minutes (= 2 weeks) new_target = old_target * (actual_time / expected_time) # blocks came too FAST -> actual < expected -> target shrinks -> harder # blocks came too SLOW -> actual > expected -> target grows -> easier
獎勵,以及減半
為什麼會有人燒著電去搶贏這場比賽?因為贏家有錢拿。找到有效區塊的礦工,可以添加一筆特殊的交易,叫做 coinbase,它憑空鑄出全新的比特幣,付給礦工自己。這筆新鑄出的金額就是區塊補貼,世上每一枚比特幣,最初都是這樣進入世界的。
精彩之處在這裡。補貼並非固定不變——它每 210000 個區塊就減半一次,這個事件叫做減半。按一個區塊十分鐘算,210000 個區塊大約要花四年。它在 2009 年從每個區塊 50 枚比特幣起步,降到 25,再到 12.5,再到 6.25,就這樣一級一級往下走。由於這個時間表是寫死的、每次又是按幾何比例削減,將來會存在的總量收斂於一個硬性的上限:略低於 2100 萬枚,大約在公元 2140 年達到。
halving every 210,000 blocks (~4 years) 2009 block subsidy = 50.0 BTC 2012 = 25.0 2016 = 12.5 2020 = 6.25 2024 = 3.125 ... -> 0, around year 2140 sum of all subsidies -> ~21,000,000 BTC (a hard cap)
從補貼到手續費:安全預算
礦工的全部獎勵其實是兩部分相加:區塊補貼,加上這個區塊裡裝的所有交易的手續費。使用者給每筆交易附上一點手續費,去爭搶有限的區塊空間,勝出的礦工把這些手續費連同新鑄出的幣一併收入囊中。今天補貼是其中大得多的那一塊——但每一次減半都讓它縮水,終有一天它會歸零。
這兩個來源合在一起,構成了網路的安全預算——礦工爭搶的總獎金,也就是守護這條鏈的真實世界努力的總量。這套設計深處押的是一場交接:隨著補貼在未來一個世紀裡慢慢趨近於零,手續費理應成長為主要獎勵,把獎金維持得足夠大,讓誠實挖礦仍然值得,讓改寫歷史依舊貴得離譜。
這一切的節奏與獎勵都靠真實的電力運轉,而那正是讓比特幣「攻擊起來很貴」的字面意義上的代價。把時鐘和減半講清楚之後,後面的一篇會打開那 2100 萬枚的固定上限本身——是什麼讓它可信,又為什麼沒人能悄悄越過它多鑄出一枚幣。