UTXO账户模型
UTXO ( Unspent Transaction Output),直接翻译出来的意思是“未花费的输出”,不过由于Transaction 被简称为 TX,所以这个短语缩写为 UTXO。
在比特币系统里,没有设计使用交易者账户系统,而是记录一笔又一笔的交易,而且交易输入(资金来源,包括挖矿所得)=交易输出(即UTXO)+矿工费,比特币就在一个接一个的交易输入与输出中流动起来。
举例来说(忽略矿工费):假如小李通过挖矿获得10个比特币,在系统中就记录为交易输入是“挖矿所得”,交易输出即UTXO为小李的比特币地址10个比特币,同时整个交易就被系统编上交易号001;当小李转3个比特币给小王,在系统中就记录为交易输入是“资金来源交易号001”,UTXO第一项为小王的比特币地址3个比特币,第二项为小李比特币地址7个比特币,同时整个交易被系统编上交易号002;小王得到3个比特币后,就转了1个给小张,另外小李也转了1个给小张,那么系统中就记录为交易输入是“资金来源交易号002”及其两个细分输入项1、2,UTXO第一项为小张的比特币地址2个比特币,第二项为小王的比特币地址2个比特币,第三项为小李的比特币6个比特币,以此类推。
UTXO的模型结构,使得比特币的每一笔交易都可以追溯到上一个交易,可以一直追到矿工挖出它的那块区块为止,所以说比特币为什么不可以伪造,技术来源就是UTXO。
杜绝“双花”问题
在互联网里进行传输,由于数据的可复制性,就会存在同一笔数字资产或者数字货币会被重复使用、被双重支付的可能,这种双重消费就是“双花”问题。
在中心化的系统里,“双花”问题只需要中心机构保留交易总账,通过实时修改账户余额的方法就能保证每一笔交易的电子货币只消费一次,而比特币系统是去中心化的,为防止“双花”问题的产生,使用UTXO模型、时间戳服务器、六次区块确认,这三种方式来整合解决。
比特币系统的交易节点会先对一笔交易进行验证,看是否在UTXO当中,不存在就验证失败。然后为防止一个UTXO被重复使用,使用时间戳服务器给交易加上时间戳,那么挖矿的节点会根据时间戳的数据选择最先被记录的交易,将该交易打包成区块。但是最终确认,还需要经过六个区块的确认之后,这样交易才最终获得确定,而一般经过六个确认之后,该比特币几乎不可能被双花了。