购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

一、为什么首富账户没有余额

“比特币首富”曾经是贴在李笑来额头上的标签。

2017年有传闻说他不管涨跌都只买不抛,手握6位数比特币,价格最高时每个比特币13万元,而两年前仅1300多元。

按照当年的涨速,到2019年他的身家会超过有900亿美元的比尔·盖茨。

可如果你惊讶于首富账户没余额这件事,那说明你还得巩固一个比特币世界的概念:UTXO。

1.什么是UTXO

UTXO(Unspent Transaction Output,UTXO)指未花费的交易输出。每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”(见图2-1)。

图2-1

你一定会觉得奇怪,你收到的钱明明放在账户里没动,为什么会被叫作“输出”?对,这就是“输出”,只不过是“未花费的交易输出”。一旦你支付出去,就是真正的“交易输出”。

如果某人昨天转你1.5个比特币,交易是这样的(见图2-2):

图2-2

箭头的左右两侧,分别是某人和你的地址。

注意:地址看起来像账户,但它不是账户,因为账户的另一头对应的是你的姓名和密码,而地址的另一头却只有公钥和私钥。

换句话说,比特币系统根本不认识持币者是谁,它只认识公钥和私钥。

那么有一个问题:某人给你1.5个比特币,你的地址在收到币的一瞬间,余额是多少?答案是:没有余额。这1.5个比特币不是余额,而是你地址里的未花费交易输出(UTXO)。

某人的账户之所以没有余额,不是因为没有币,而是比特币系统没有“账户”的概念,只有“地址”的概念。“账户”对应“余额”,而“地址”只对应UTXO。你一定会更奇怪,余额和UTXO都代表拥有的财富,不就是一回事吗?

其实,看起来相似的东西,实际上可能完全不同。

2.UTXO和余额的区别

在回答这个问题前,我们首先一起思考:如果比特币和传统货币一样,使用账户系统,会有什么问题?

首先需要一个数据库,记录所有人的余额。如果所有人的余额都像刻在石碑上一样,风吹雨打十年都不变,那没问题。可实际上,我们的账户余额常常一天变十次。

记录余额不算个事,更新余额才折腾人。

如果全世界有10亿用户,每人每天交易10次,那么平均每秒的余额变动将达到11万次。按照这个速度生产余额表,几周之后,就能撑爆谷歌和支付宝这两家公司所有的服务器。

而且,如果每次支付都更新余额表,那么一定有信息冗余:就算你“双十一”那天什么都没买,但你的余额也会跟全国人民的账户余额一起被更新14.8亿次(见图2-3):

图2-3

任何一笔交易发生后,所有人的余额即使没变也要更新,这又是为什么?

因为要避免双重支付。

例如这种情况:有人支付给我1个比特币,我很高兴,但我转念一想:应该先确认这笔钱有没有付给过其他人,否则我就会像收到空头支票一样。

于是,我打开余额表一看,发现支付给我比特币的人确实有这笔钱,我更高兴了,直接发货。随后噩耗传来:我被双重支付了,收到的那个比特币根本没法用,因为已经被支付给其他人了,而我查的那张余额表在当时还没更新。

无处喊冤。

点对点系统没有中心的权威账本,达成共识需要经过大多数节点确认,如果信息传递有时间差,就不能同时确认所有账户余额,因此面临双重支付。

如果比特币被设计成这样,一定出师未捷身先死,而UTXO一举扫平余额方案面临的搬不走的两座大山:数据库庞大和双重支付问题。

UTXO的方案极为简单:只确认交易本身。

使用UTXO产生的数据库比使用余额系统的数据库小得多。比特币运行八年多,全部交易记录不过几百GB,一台普通计算机就能存放。

至于账户余额,你从上到下扫描一遍同一地址所有的进出明细,结果立等可取。你只要等上一个小时,就能确保不被双重支付,因为这笔交易得到了全网的确认。

需要说明的是:当一笔交易基于之前的多笔交易时,即便这些交易又各自基于多笔交易,这也并不存在任何问题。因为这个系统并不需要提取一份所有历史交易的完整记录。

3.反直觉的UTXO

几年前,如果不理解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个比特币,对于这笔交易,全世界都帮他记入区块中永久保存。

这篇文章写得非常精彩,但在这点上卓克彻底搞错了。这种理解是基于完美的余额系统思维定式,才会犯下这样的错误。

关于比特币的一切都是公开的:账本公开、白皮书公开、源代码公开,但就是这么一个完全公开的东西,很多人没有理解,这是值得玩味的。

4.结语

现在你一定明白:其实并没有什么比特币,只有UTXO。

图2-4说的不是价格,不是身价,而是思想。

图2-4 PqM7YI2nDLFhNGNugW//Brhz5f7fJblZr/AasJlPclJIEwdqpn/qHugdCe42A9Vf

点击中间区域
呼出菜单
上一章
目录
下一章
×