这是汤强区块链系列文章之:比特币常识概念UTXO。
更多精彩干货,请关注公众号“汤强”。
首富账户之所以没有余额,不是因为没有币,而是比特币系统没有“账户”一说,只有“地址”的概念。“账户”对应“余额”;而“地址”只对应UTXO。
UTXO(Unspent Transaction Output)指未花费的交易输出。
每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。
“比特币首富”是贴在李笑来额头上撕不下来的标签。
不管涨跌都只买不抛,据说他早已手握6位数的比特币,现价每个7万元,快追上一块上海车牌了,而去年今天只卖4千块。
按照这个速度,只要躺在家里睡两年,一觉醒来的他会超过身价900亿美金的比尔·盖茨,如果后者不买比特币的话。
可如果你惊讶于首富账户没余额这件事,那说明你还得巩固一个比特币世界的概念:UTXO。
一、什么是UTXO?
UTXO(Unspent Transaction Output)指未花费的交易输出。
每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。
你一定会奇怪,你收到的钱明明放在账户里没动,为什么会被叫做“输出”?
对,这就是“输出”,只不过是“未花费的交易输出”。一旦你支付出去,就是真正的“交易输出”。
如果李笑来昨天转你1.5个比特币,交易是这样的:
绿箭头左右两侧,分别是李笑来和你的地址。
注意:地址看起来像账户,但它不是账户,因为账户的另一头对应你的姓名和密码,而地址的另一头却只有公钥和私钥。
换句话说,比特币系统根本不认识持币者是谁,它只认识私钥和公钥。
那么飘来一个问题:首富赐你1.5个比特币,你的地址收到币的一瞬间,余额是多少?
答案是:没有余额。
这1.5个比特币不是余额,而是你地址里的
未花费交易输出
(UTXO)。
首富账户之所以没有余额,不是因为没有币,而是比特币系统没有“账户”一说,只有“地址”的概念。“账户”对应“余额”;而“地址”只对应UTXO。
你一定会更奇怪,余额和UTXO都代表拥有的财富,不就是一回事么?
其实,看起来相似的东西,实际上可能完全不同。
二、UTXO和余额区别在哪?
回答这个问题前,我们首先一起思考:如果比特币和传统货币一样,使用账户系统,会有什么问题?
首先需要一个数据库,记录所有人的余额。
如果所有人的余额都像刻在石碑上一样,风吹雨打十年不变,那没问题。可实际上,我们的账户余额常常一天变十次。
记录余额不算个事,更新余额才折腾人。
如果全世界有10亿用户,每人每天交易10次,那么平均每秒余额变动将达11万次。按照这个速度生产余额表,几周之后,就能撑爆Google和支付宝两家店所有的服务器。
而且,如果每次支付都更新余额表,那么一定有信息冗余:如果你双十一那天什么都没买,但你的余额会随着全国人民被更新14.8亿次:
任何一笔交易发生后,所有人的余额即使没变也要更新,这又是为什么?
因为要避免双重支付。
比如这种情况:
有人给我1个比特币,我很高兴,但我转念一想:应该确认这笔钱别人有没有付给过其他人,否则我就会像收到空头支票一样。
于是,我打开余额表一看,发现别人确实有这笔钱,我更高兴了,一激动给别人发货。晚上噩耗传来:我被双重支付了,收到的那个比特币根本没法用,因为已经被支付给其他人了,而我查的那张余额表在当时还没更新。
都找不到衙门喊冤。
点对点系统没有中心的权威账本,达成共识需要经过大多数节点确认,如果信息传递有时间差,就不能同时确认所有账户余额,所以必然面临双重支付。
如果比特币被设计成这样,一定出师未捷身先死,而UTXO一举扫平余额方案搬不走的两座大山:数据库肥硕和双重支付问题。