複製貼上出來的錢
想想你手機裡的一張照片。你把它傳給朋友,於是兩個人都擁有了一份完美的副本——你這份並不會因為對方收到了就消失。這正是數位事物的魔力:複製免費、瞬時,而且毫無瑕疵。對照片和音樂來說,這很美妙;對錢來說,卻是一場災難。
設想一枚數位硬幣只是你電腦裡的一個檔案。你把這個檔案傳給咖啡店來付款,但沒有任何東西能阻止你自己留一份副本,過一分鐘再把同一個檔案傳給書店。你這就把一枚硬幣花了兩次。這被稱為雙花問題,正是它讓數位現金在幾十年裡都被認為根本不可能實現。
銀行今天是如何解決的
當然,網路上的錢早就能用了——你的銀行 App 整天都在劃轉資金。訣竅在於:你的錢並不是一個由你保管的檔案,而是銀行帳本裡的一個數字,帳本就是一份記錄著誰擁有什麼的龐大清單。當你給咖啡店付款時,銀行從你這一行裡減去,在他們那一行裡加上。你從一開始就根本沒握著一枚可複製的硬幣。
於是銀行悄悄地防住了雙花:它在每一筆付款前都會核對自己的帳本。你想把同一元錢花兩次,第二次嘗試只會失敗——因為你的餘額已經是零了。問題在於,那本帳本歸一家公司所有。你不得不信任他們誠實、在線、公正,而他們可以隨時凍結或撤銷你的交易。
區塊鏈想要的是同樣的保護——沒有可複製的硬幣,每一筆付款都對照一份共享紀錄來核驗——但這本帳本沒有任何單一的擁有者。於是整個難題變成了:當沒有人當家做主時,成千上萬素不相識的人,如何就一份清單、一種順序達成一致?
一份大家公認、排好順序的清單
答案的核心就在這裡。在區塊鏈上,你根本不是以檔案的形式擁有硬幣——你擁有的是公共帳本裡的一條條紀錄。每一筆付款都是一筆交易,它實際上在說:「先前到達這裡的那枚硬幣,現在轉給這位新主人。」每一枚硬幣都只能被標記為已花費一次,不多不少。
比特幣把這一點做得極其直白。一枚硬幣就是一份未花費的輸出——可以把它想成一個寫著你名字、封好的價值信封,叫做 UTXO。要付錢給別人,你就拆開這個信封,而規則規定:一個信封只能被拆開一次。它一被拆開,那枚硬幣作為「可花費的」就不復存在了;系統會為收款人(以及你的找零)建立出新的信封。根本就沒有第二份副本可花。
但防止複製只完成了一半的工作。更深一層的訣竅是順序。如果你給咖啡店的付款和給書店的付款都想拆開同一個信封,網路就必須就哪一筆在先達成一致。被先記錄下來的那筆交易獲勝;第二筆則因為試圖花掉一個已經不存在的東西而被拒絕。從本質上說,區塊鏈就是一台用來對「事件的唯一順序」達成一致的機器。
Envelope #A7 (your coin) | |-- pay coffee shop --> [ ACCEPTED: #A7 now spent ] | '-- pay bookshop --> [ REJECTED: #A7 already spent ] Ledger order decides the winner. Same coin, only one open.
候車室與封存的帳頁
當你發出一筆付款時,它並不會立刻落進帳本。它會先漂浮在一個共享的候車室裡,這個候車室叫做記憶池——也就是每個節點手上那一堆待處理、尚未敲定的交易。交易會從這裡被收攏起來、排好順序,寫到帳本嶄新的一頁上。一旦那一頁被封進鏈裡,順序對所有人就此固定。
這正是你先前認識的那條「鏈」開始發揮作用的地方。由於每一頁都用密碼學方式封死在前一頁之上,被記錄下來的歷史是不可竄改的——你沒法悄悄回到過去重排順序,讓你的第二筆付款搶到第一筆前面。改寫任何一張舊帳頁,都會撕裂它之後每一頁上的封印,整個網路會立刻察覺。
- 你廣播出一筆付款;它在記憶池裡等待,每個節點都能看到它。
- 交易被收攏起來,被賦予唯一確定的順序,寫到嶄新的一頁帳本上。
- 這一頁被封進鏈上;你花掉的那枚硬幣,對所有人而言都已被標記為已花費。
- 之後任何想再花它一次的嘗試,都會發現那裡空空如也,於是被拒絕。
為什麼「達成一致」就是一切
請留意整套方案最終所依賴的是什麼:所有人對同一本帳本、同一種順序達成一致。複製之所以被擋住,不是因為硬幣本身有什麼魔法,而是因為網路拒絕把同一枚硬幣記成花了兩次。如果網路的兩半對「哪筆付款在先」各執一詞,雙花就會立刻悄悄溜回來。
所以,一切都取決於:成千上萬獨立的、有時還不誠實的陌生人,如何在沒有老闆出來打破僵局的情況下,得出唯一一個共享答案。這套機制有個名字:共識機制。它正是那台引擎,把一群散落各處的電腦變成一本單一、可信賴的帳本——而這恰好就是下一個學習單元的起點。