在比特币钱包当中,我们通常能够看到账户余额,然而在中本聪设计的比特币系统中并没有“余额”这个概念。那如何知晓自己还有多少个比特币呢?
比特币的交易结构采用的是UTXO,这是比特币特有的一种账户结构。它用来查询用户的账户中还有多少可以用来支配的比特币。
UTXO的全称是Unspent Transaction Output 翻译成中文就是未花费的交易输出。它是比特币交易生成及验证的一个核心概念。
比特币交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。
1、传统的账户结构
当我们在现实生活中进行资金交易的过程中,整个交易的流程往往是这样的,小黄得到了现金10元,转给小牛2元,那么小黄的账户在现有基础上减去2元,小牛的加上2元;小牛和小黄又分别转给小王1元,小牛和小黄的账户分别减去1元,在小王的账户上加上2元,整个交易过程如下图所示。
(传统账户体系下的转账)
2、比特币UTXO结构
而在比特币交易中,我们是这样记账的。依然是刚才的流程,小黄通过挖矿获得了10比特币,他向小牛转了2比特币。后来小牛和小黄又各自向小王转了1比特币。整个交易流程如下图。
(比特币钱包地址中的交易记录)
而三个人的比特钱包地址中只记录了这几笔交易的流水,并没有余额的概念,如下图。
(小王,小黄,小牛三人的交易记录)
每一个比特币交易都有若干个输入和输出组成,输入直白点讲就是你拿什么证明你能拿出这些比特币来给别人,那么这个证明就是前一个人给你的转帐记录。
小黄的比特币钱包地址中有两种交易类型,Coinbase是一种比较特殊的交易,是指小黄挖矿后的获得的奖励,这种交易实际上是没有输入只有输出的,输出的就是挖矿者小黄的比特币钱包地址,小黄此时要向小牛转2个比特币,那么输入就是小黄挖矿得来10比特币的这个交易,输出2个比特币给小牛,另外转8个比特币给自己。
输出的数量必须小于等于输入的数量,若没有把多余的比特币转回给自己,那么很可能会作为手续费奖励给记账的矿工。
后续流程类似,小牛转给小王1比特币的输入是小牛从小黄那得到的2比特币。这样包含若干输入和输出得交易数据结构被称为UTXO即未花费的交易输出。数据库中有专门的表记录UTXO,一旦未花费得作为输入产生了其他输出,则输入交易就从UTXO表中删除。