时间:2023-08-13|浏览:198
UTXO,即未花费的交易输出(Unspent transaction output),基于UTXO的模型与银行使用的账户余额模型完全不同。
在比特币账户中,余额不会显示成一个总数,而是由区块链网络中所有与当前账户有关的UTXO所组成。比特币的每一笔交易都由输入和输出两个部分组成,输入代表转入到你的比特币地址上的币,输出代表你转出的币。未花费的交易输出会那么差额就是交易费,该交易费将被增加到该区块的激励中。”
由于UTXO的特殊设计,转账比特币会生成两笔交易,一笔转给对方,一笔转给自己,俗称“找零”。
在现实生活中进行资金交易时,流程通常是这样的:小黄得到了10元现金,转给小牛2元,那么小黄的账户减去2元,小牛的账户加上2元;小牛和小黄又分别转给小王1元,小牛和小黄的账户分别减去1元,在小王的账户上加上2元。
而在比特币交易中,记账方式如下所示。同样是上述流程,小黄通过挖矿得到了10比特币,他向小牛转了2比特币。后来小牛和小黄又各自向小王转了1比特币。
而比特币钱包地址中只记录了这几笔交易的流水,并没有余额的概念。
每笔比特币交易由若干个输入和输出组成,输入是用来证明你能够拿出这些比特币给别人的凭证,这个凭证就是前一个人给你的转账记录。
小黄的比特币钱包地址中有两种交易类型。Coinbase是一种特殊交易,指的是小黄挖矿后获得的奖励,这种交易实际上只有输出没有输入,输出的是挖矿者小黄的比特币钱包地址。小黄要向小牛转2个比特币,那么输入就是小黄挖矿得来的10比特币交易,输出是2个比特币给小牛,另外8个比特币转回给自己。
输出数量必须小于等于输入数量,如果没有把多余的比特币转回给自己,很可能会作为手续费奖励给记账的矿工。后续流程类似,小牛向小王转1比特币的输入是小牛从小黄那得到的2比特币。包含多个输入和输出的交易数据结构被称为UTXO,即未花费的交易输出。数据库中有专门的表记录UTXO,一旦未花费的输入产生了其他输出,该输入交易就会从UTXO表中删除。
为什么中本聪选择采用UTXO而不是账户体系呢?一个直接的好处是交易可以并行处理。例如,在银行的账户体系中,如果你和你朋友都想对某一个银行卡账户进行操作,这两笔交易在处理时有先后顺序。而在UTXO中不存在这样的问题,只要每笔钱都有来源且来源是未被使用过的,任意多个操作同时向一个地址转账,或者从同一个地址转出也是没有问题的。