比特币源码阅读(0.16)(十)

UTXO(未花费的交易输出)

比特币交易中的基础构建单元是交易输出。交易输出是比特币不可分割的基本组合,记录在区块上,并被整个网络识别为有效。比特币完整节点跟踪所有可找到的和可使用的输出,称为 “未花费的交易输出”(unspent transaction outputs),即UTXO。

当我们说用户的钱包已经“收到”比特币时,我们的意思是,钱包已经检测到了可用的UTXO。通过钱包所控制的密钥,我们可以把这些UTXO花出去。 因此,用户的比特币“余额”是指用户钱包中可用的UTXO总和,而他们可能分散在数百个交易和区块中。

“一个用户的比特币余额”,这个概念是比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚集所有属于该用户的UTXO来计算该用户的余额 。大多数钱包维护一个数据库或使用数据库服务来存储所有UTXO的快速参考集,这些UTXO由用户所有的密钥来控制花费行为。

本质上,区块链系统只记录交易本身,而不记录交易的结果。区块链系统只处理所有的交易,而需要清算、查看余额等信息,由区块链节点自行处理。

UTXO系统遵守两个规则:
1、 除了 CoinBase(挖矿交易)之外,所有的资金来源都必须来自前面某一个或者几个交易的UTXO;
2、任何一笔交易的输入总量必须等于输出总量,等式两边必须配平。

UTXO模式最大的好处就是,它忠实地记录了交易。我们的现实世界是随着时间流动的,交易一笔一笔地发生,比特币的区块链系统一笔一笔忠实地记录着这个世界发生的事情,不能回滚,不能删除。只要交易记录准确了、清楚了,那么每个人进行清算的结果就都不会出错。