什么是UTXO
比方说我银行卡账号A有100元钱,我们马上会想到账号A的余额为100元,这是最典型常见的账户(Account)模型体系,在我们生活中这类成熟的交易模型几乎无处不在。但是在比特币网络中,实际上并没有账户的概念,没有所谓的比特币余额一说,有的是遍布全网区块链的UTXO。
UTXO是未花费交易输出(unspend transaction output)的简称,所谓未花费交易输出是指关联比特币地址的比特币金额的集合。一个UTXO的基本单位是“聪”,“聪”是比特币的最小计量单位,一个比特币等于10的8次方聪。一个UTXO一旦被创建则不可分割,只能当作交易的输入被花费掉,花费后产生新的UTXO,这样周而复始地实现货币的价值转移。因此我们使用的比特币钱包看到的账户余额实际上是UTXO聚合计算的产物。
例如我们去商店购买10元的商品,我们有多种支付方法,我们可以使用一张100元支付,消费10元找零90元;也可以使用2张5元或1张10元刚好完成支付,这应该算是生活中的UTXO模型吧!
交易输入和输出
简单来说,比特币的交易由交易输入和交易输出组成,UTXO是交易输入和输出一部分,所以说UTXO是交易最基本的组成单元。
一个交易输入指向特定的UTXO,并且包含签名脚本,这个签名脚本用来满足UTXO的花费条件,为真则宣布自己对这笔资金拥有所有权。实际上节点在构造交易时会根据一定的算法选择一定数量的UTXO,同时生成相应的脚本签名作为输入的一部分加入到交易中。
每一个交易输出都伴随着资金的转移,交易输出包含一定数量的比特币和锁定脚本。锁定脚本作为资产指向一个比特币地址而设置的花费条件,只有满足这个花费条件的人才可以花费这笔资金。
总得来说,交易的输入和输出总是在大都数交易中都会同时出现,这样就实现比特币资金的价值转移,当然还有一种交易模型有些特殊,它只有输出,这就是比特币区块中第一笔交易称为coinbase交易,也称这为创币交易,它没有输入,是系统用于对矿工工作量证明的奖励,稳定增加相应的货币供应。