一、简介
UTXO全名是Unspent Transaction Outputs
,相比于账户模型来说没那么直观。
它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。
比特币中并没有一个纪录所有帐户余额的帐本,要确定一个地址有多少余额,简单的说,就是要回顾这个地址所有的交易,并且找到所有发送给这个地址的比特币,再把他们全都加起来就是当前余额。
二、基于UTXO的交易
比特币交易遵守几个规则:
- 除了 coinbase交易之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。
- 任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。
交易的数据结构:
- 交易输出[amount : xxxxx , locking script:xxxxxxxx , metadata:xxxxxxx]
amount表示要转移的金额,locking script表示对满足条件的进行编码,为了使金额得以认出,metadata泛指其他所有需要使用的元数据。
- 交易输入[Tx hash : xxxxxxxxxx , output index : xxxxx , unlocking script:xxxxxxxx , metadata:xxxxxxx]
Tx hash表示交易的哈希,output index指明引用的交易从哪个UTXO中提取 ,unlocking script表示对引用UTXO的locking script进行解码,metadata泛指其他所有需要使用的元数据。
比特币中的一笔「交易」过程
假设Fred给了Alice 2个BTC,Ted给了Alice 3个BTC,我们把这两笔寄给Alice,总和为5的BTC称为
Unspent Transaction Outputs
:也就是说现在Alice拥有了两笔Unspent Transcation Outputs
,可以当作他未来转钱给别人的input
。如果现在Alice想要转5 BTC给Bob,他要将前面两笔总和刚好为5的UTXO当作这笔交易的输入。而矿工要验证的就是并没有其他交易在先前的区块当中,已经使用过这笔Unspent Output
。如果同一笔输出已经被发送过,那它就不是Unspent
了,这就是比特币预防Double Spending
的方法。