什么是UTXO?
UTXO(Unspent TransactionOutputs)是未花费的交易输出,它是比特币交易过程中的基本单位。除创世区块以外,所有区块中的交易(Tx)会存在若干个输入(Tx_in,也称资金来源)和若干个输出(Tx_out,也称资金去向),创世区块和后来挖矿产生的区块中给矿工奖励的交易没有输入。除此之外,在比特币系统中,某笔交易的输入必须是另一笔交易未被使用的输出,同时这笔输入也需要上一笔输出地址所对应的私钥进行签名。当前整个区块链网络中的UTXO会被储存在每个节点中,只有满足了来源于UTXO和数字签名条件的交易才是合法的。所以区块链系统中的新交易并不需要追溯整个交易历史,就可以确认当前交易是否合法。
在比特币交易系统中,没有账户ID和账户密码一说,也没有账户余额计算一说。但是有公钥(钱包地址)和秘钥,可以浅显的类比理解为:公钥就是账户ID,私钥就是账户密码。在比特币交易系统中,知道对方公钥,就可以给对方转账进行交易。拥有了私钥,就代表着拥有了该地址下所有UTXO的使用权和控制权。
UTXO一般结构如下:
{"addr":"14uhqGYDEhqwfdoP59QdLWdt4ha5CHttwQ","n":1,"script":"76a9142ae017a5bd24a3f935897085253e503fbfd66f4e88ac","spent":false,"tx_index":335926477,"type":0,"value":21680000}
其中, addr:交易接受方地址,即拥有人地址;spent:是否花费;tx_index:交易索引;value:交易数额。
比特币交易遵守以下规则:
1、所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,历史交易出入相接,生生不息,钱就在交易之间流动起来了。
2、任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。

UTXO VS账户模型

UTXO由于可以同时处理多个UTXO,因此可以实现并行事务并鼓励可伸缩性创新。同时,UTXO具有更好的隐私性,只要用户为每笔交易使用新地址,UTXO就可以提供更高级别的隐私。但是相对账户模型,UTXO模型的复杂度更高,存储空间较大,无状态性,效率也不及账户模型,但对于双花攻击的抗性更强。




