開啟一切的九頁論文
2008 年 10 月,一位署名 中本聰(Satoshi Nakamoto) 的人發布了一篇簡短的論文,題為《比特幣:一種點對點的電子現金系統》。它的目標近乎固執地簡單:讓兩個人在網上直接互相付款,中間沒有銀行或支付公司來批准這筆交易。幾十年來,這件事看似不可能——一旦去掉可信的中間人,又是什麼能阻止有人把同一枚幣花兩次?
比特幣的答案,是讓所有人都持有同一份公開記錄。這裡沒有某家銀行的私有帳本,而是一段共享的歷史:成千上萬臺電腦各持一份副本,並透過工作量證明達成一致。一筆付款一旦被足夠多的後續區塊壓在底下,要想改寫它,所耗費的能量將超過任何人理智範圍內願意付出的代價。其結果,就是一種無人擁有、也無人能悄悄改動的電子現金。
這本帳本裡沒有餘額
意外之處就在這裡。如果你打開比特幣真正的資料庫,你找不到任何一行寫著「這個地址擁有 2.5 BTC」。任何地方都沒有帳戶,也沒有存著的餘額。網路真正保存的,是一大堆已經被建立、但還沒被花掉的幣——每一枚都是一份離散的價值,被鎖定在某個特定的所有者名下。這一堆東西,就叫做 UTXO 集合,是 Unspent Transaction Outputs(未花費交易輸出)的簡稱。
現金的類比在這裡精確得很。把一個 UTXO 想成你錢包裡的一張實體鈔票——一個固定面額,你要麼整張花掉,要麼完全不動。你的「餘額」並不是存在某處的一個數字,而僅僅是你的密鑰能解鎖的、每一張未花費鈔票的總和。你的錢包應用替你把它們加在一起,但鏈本身只知道一張張單獨的鈔票。
一筆交易如何重塑這個集合
一筆比特幣交易,不過是一份配方:它銷毀一些舊鈔票,再印出一些新鈔票。它點名一批現有的 UTXO 作為輸入——也就是被花掉的那些鈔票;又定義一批全新的 UTXO 作為輸出——也就是被建立出來的鈔票。交易一經確認,輸入就從 UTXO 集合裡被永久刪除,輸出則取而代之被加進去。
由於鈔票不能撕成兩半,你通常會多付一點,再把差額還給自己。假設你要付 0.7 BTC,但你能用的最小鈔票是 0.5 和 0.4,那你就把兩張都花掉(共 0.9),其中 0.7 給收款人,另外鑄出一張略小於 0.2 的全新鈔票,付回你自己的地址——這就是著名的*找零*輸出。你留下的那一小片,就成了礦工的手續費。每一筆輸入都必須用所有者密鑰的一個有效數位簽章來解鎖,正是它證明了你有權花掉那幾張特定的鈔票。
TRANSACTION (Alice pays Bob 0.7 BTC)
INPUTS (old UTXOs, now destroyed)
utxo_A : 0.5 BTC <- unlocked by Alice's signature
utxo_B : 0.4 BTC <- unlocked by Alice's signature
total in = 0.900
OUTPUTS (new UTXOs, now created)
-> Bob : 0.700 BTC
-> Alice : 0.199 BTC (change)
total out = 0.899
fee to miner = in - out = 0.001 BTC (never written down; it's the gap)
Rule: sum(inputs) >= sum(outputs). The leftover is the miner fee.最初的那些幣從何而來
如果每張鈔票都必須能追溯到更早的鈔票,那就有個顯而易見的難題:*最初*的那些鈔票又是從哪來的?比特幣用每個區塊裡一筆特殊的例外解決了它——鑄幣交易(coinbase transaction)。它是唯一允許完全沒有輸入的交易。它不消耗任何舊的 UTXO,而是逕直憑空鑄出新幣,付給建構了這個區塊的礦工。
這筆鑄幣輸出就是區塊獎勵——正是它這份激勵,讓工作量證明變得值得去做。它打包了兩樣東西:一筆固定數量的新創幣(大約每四年減半一次),加上那個區塊裡其他所有交易的手續費總和。所以,世上存在的每一枚比特幣,都是作為某個礦工的獎勵而誕生的,此後再透過一筆筆尋常的交易,一張鈔票接一張鈔票地向外流轉。
COINBASE TRANSACTION (one per block, no inputs)
INPUTS
(none) <- the special exception
OUTPUTS
-> Miner : block_subsidy + sum(all fees in block)
e.g. 3.125 newly minted BTC + 0.18 BTC collected in fees
= 3.305 BTC paid to the block's miner小結
中本聰 2008 年的設計,以驚人的簡省彼此咬合。金錢是一個未花費鈔票的集合,而非一張餘額表。一筆交易把整張整張的鈔票作為輸入消耗掉,再印出新的鈔票作為輸出(找零也在其中),由數位簽章證明所有權,由「不能憑空生錢」的規則保證誠實。而新幣進入這個世界的唯一途徑,是鑄幣交易——它獎勵那個用工作量證明守護了區塊的礦工。
記住一個畫面,其餘的便會隨之而來:比特幣是一疊鈔票,而不是一個銀行帳戶。 每一次付款,都在撕掉舊鈔票、印出分毫不差的替代品。接下來,我們將放大去看這些鈔票是如何被*鎖上與解鎖*的——那門小巧的、基於堆疊的語言,比特幣腳本(Bitcoin Script),正是它決定了花掉一枚幣究竟需要滿足什麼條件。