如果我告诉你,比特币世界里既没有所谓的“账户”,也没有所谓的“余额”,你一定会觉得很奇怪。你一定会问“明明我的钱包App告诉我,我有XX个比特币在钱包里躺着啊?”
这里其实就要跟你解释一下比特币的UTXO是什么。
如果按字面解释,UTXO 是 Unspent Transaction Output 的缩写,意思是:未花费的交易输出。
UTXO是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。
比特币网络监测着以百万为单位的所有可用的(未花费的)UTXO。当一个用户接收比特币时,金额被当作UTXO记录到区块链里。这样,一个用户的比特币会被当作UTXO分散到数百个交易和数百个区块中。
实际上,并不存在储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。
“一个用户的比特币余额”,这个概念是一个通
过比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。
——《精通比特币》
在比特币系统中,你收到的钱被称为输出,你花钱被称为输入。所以你可能会觉得奇怪,好像输入输出的说话反过来了。
其实,在比特币系统中,你钱包里的钱,是“别人给你,而你还没花费掉的钱”,也就是说,你钱包里的钱,是别人输出给你的。而你要花钱,就要把自己的钱出入到别人的钱包里。
算法原理上不去说了,估计你看着看着就睡着了,用生活中可以理解的方式来讲讲 UTXO 吧:
朋友A给了你10个比特币;
朋友B给了你5个比特币;
朋友C给了你3个比特币;
朋友D给你了1个比特币;
此时,你如果要给我7个比特币,应该怎么给?
你可能会说,直接付7个比特币给我不就可以了?
答案是不行,因为UTXO是不能再分割、被所有者锁住的。
也就是说,上面那10个、5个、3个、1个比特币,都是被单独打包成4张面值分别为10元、5元、3元、1元面值的钞票。这跟我们现实中的纸币面额的原理是一样的,你不能把整张钞票撕开来用。只不过是我们现在习惯了移动支付,所以觉得RMB都是拆成1分(0.01元)来使用的。你回到使用纸钞的场景下,就立刻能明白了。
你要给我7个比特币,就只能给我5元+3元面值的钞票,然后系统再找给你1元,这1元又是被打包了的,你如果要付0.5元给别人,又要付1元而找0.5。
所以你的钱包上应该是:输入8个比特币(给8块钱),输出1个比特币(找零1块钱);
我的钱包上应该是:输出7个比特币(得到7块钱);
找零是系统找给你,而不是我找给你。
以上的钱包,其实都应该打引号,因为你实际并没有所谓的钱包,钱包只是有私钥产生的公钥所产生出来的一串字符串,你真正拥有的东西是私钥,私钥背后代表的是权力。
所谓的钱,并不是放在你钱包里的钱,只是在整个比特币系统中,你有权可以去支配的钱而已。
你并不拥有钱,你只有钱的支配权。
领取专属 10元无门槛券
私享最新 技术干货