开启一切的九页论文
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),正是它决定了花掉一枚币究竟需要满足什么条件。