“比特币首富”曾经是贴在李笑来额头上的标签。
2017年有传闻说他不管涨跌都只买不抛,手握6位数比特币,价格最高时每个比特币13万元,而两年前仅1300多元。
按照当年的涨速,到2019年他的身家会超过有900亿美元的比尔·盖茨。
可如果你惊讶于首富账户没余额这件事,那说明你还得巩固一个比特币世界的概念:UTXO。
UTXO(Unspent Transaction Output,UTXO)指未花费的交易输出。每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”(见图2-1)。
图2-1
你一定会觉得奇怪,你收到的钱明明放在账户里没动,为什么会被叫作“输出”?对,这就是“输出”,只不过是“未花费的交易输出”。一旦你支付出去,就是真正的“交易输出”。
如果某人昨天转你1.5个比特币,交易是这样的(见图2-2):
图2-2
箭头的左右两侧,分别是某人和你的地址。
注意:地址看起来像账户,但它不是账户,因为账户的另一头对应的是你的姓名和密码,而地址的另一头却只有公钥和私钥。
换句话说,比特币系统根本不认识持币者是谁,它只认识公钥和私钥。
那么有一个问题:某人给你1.5个比特币,你的地址在收到币的一瞬间,余额是多少?答案是:没有余额。这1.5个比特币不是余额,而是你地址里的未花费交易输出(UTXO)。
某人的账户之所以没有余额,不是因为没有币,而是比特币系统没有“账户”的概念,只有“地址”的概念。“账户”对应“余额”,而“地址”只对应UTXO。你一定会更奇怪,余额和UTXO都代表拥有的财富,不就是一回事吗?
其实,看起来相似的东西,实际上可能完全不同。
在回答这个问题前,我们首先一起思考:如果比特币和传统货币一样,使用账户系统,会有什么问题?
首先需要一个数据库,记录所有人的余额。如果所有人的余额都像刻在石碑上一样,风吹雨打十年都不变,那没问题。可实际上,我们的账户余额常常一天变十次。
记录余额不算个事,更新余额才折腾人。
如果全世界有10亿用户,每人每天交易10次,那么平均每秒的余额变动将达到11万次。按照这个速度生产余额表,几周之后,就能撑爆谷歌和支付宝这两家公司所有的服务器。
而且,如果每次支付都更新余额表,那么一定有信息冗余:就算你“双十一”那天什么都没买,但你的余额也会跟全国人民的账户余额一起被更新14.8亿次(见图2-3):
图2-3
任何一笔交易发生后,所有人的余额即使没变也要更新,这又是为什么?
因为要避免双重支付。
例如这种情况:有人支付给我1个比特币,我很高兴,但我转念一想:应该先确认这笔钱有没有付给过其他人,否则我就会像收到空头支票一样。
于是,我打开余额表一看,发现支付给我比特币的人确实有这笔钱,我更高兴了,直接发货。随后噩耗传来:我被双重支付了,收到的那个比特币根本没法用,因为已经被支付给其他人了,而我查的那张余额表在当时还没更新。
无处喊冤。
点对点系统没有中心的权威账本,达成共识需要经过大多数节点确认,如果信息传递有时间差,就不能同时确认所有账户余额,因此面临双重支付。
如果比特币被设计成这样,一定出师未捷身先死,而UTXO一举扫平余额方案面临的搬不走的两座大山:数据库庞大和双重支付问题。
UTXO的方案极为简单:只确认交易本身。
使用UTXO产生的数据库比使用余额系统的数据库小得多。比特币运行八年多,全部交易记录不过几百GB,一台普通计算机就能存放。
至于账户余额,你从上到下扫描一遍同一地址所有的进出明细,结果立等可取。你只要等上一个小时,就能确保不被双重支付,因为这笔交易得到了全网的确认。
需要说明的是:当一笔交易基于之前的多笔交易时,即便这些交易又各自基于多笔交易,这也并不存在任何问题。因为这个系统并不需要提取一份所有历史交易的完整记录。
几年前,如果不理解UTXO,你甚至都不敢做交易。因为你可能会经历这样的场景:
12月1日,你爸爸给你1个比特币。
12月2日,你妈妈给你2个比特币。
12月3日,你客户给你5个比特币。
现在你的地址上一共有8个比特币。如果你要花4个比特币买饼吃,那么你会看到交易记录是这样的:
从你的地址上减5个比特币。
可是,你明明只要花4个比特币,为什么会扣5个?因为比特币没有余额,只有UTXO。
你有3个未支付的交易输出(UTXO),分别是1、2和5,这3个UTXO像3个硬币一样,1、2、5相当于这3个硬币的币值,没办法掰开来花,只能整个付出去,不过系统会给你找零。所以别担心,看起来你多付了钱,但其中4个比特币给卖饼的人,另外1个比特币会回到你的地址上,而这一切都由系统自动完成。
过去这些都要我们自己动手编程做,因此我们不得不感谢现在的比特币钱包,是它们让我们即使不理解UTXO,也不影响我们使用它。
UTXO的这种设计非常反直觉。得到专栏作家卓克曾经写过一篇文章介绍比特币付款的过程:
假如他给卖家5个比特币,系统会在他的账上扣掉5个比特币,在卖家账上加上5个比特币,对于这笔交易,全世界都帮他记入区块中永久保存。
这篇文章写得非常精彩,但在这点上卓克彻底搞错了。这种理解是基于完美的余额系统思维定式,才会犯下这样的错误。
关于比特币的一切都是公开的:账本公开、白皮书公开、源代码公开,但就是这么一个完全公开的东西,很多人没有理解,这是值得玩味的。
现在你一定明白:其实并没有什么比特币,只有UTXO。
图2-4说的不是价格,不是身价,而是思想。
图2-4