北慕城南6星评价
2020-03-27 13:56:40
所谓UTXO模型,简单来说,就是一种特殊的账户记账模型。它的中文意思叫作未花费交易输出”,它跟银行传统的账户模型有一个很大的区别就是,这种模型只记录交易本身,而不记录交易的结果。
像传统的银行账户模型,它是直接记录结果的,比如,我账户里有1万块钱,我要转给你3000,就会从我账户里扣除3000,我的账户余额是7000,你的账户里增加3000。
但UTXO模型不是这样记录的,它会把整个交易过程记录下来,原理是这样的:还是假设我账户里有1万块钱,我要转给你3000。UTXO在记录的时候,它会先记做这1万块钱全部转了出来,然后再记录有3000块转到了你的账户里,又有7000块从我的账户转到我自己的账户。
整个过程种,它会把牵扯到的账户资金、交易地址,转账资金、资金来源等信息全部记下。以此就能够追踪到每一笔交易的最初来源。所以,UTXO的本质其实是一种流水记账,会把交易的过程记录下来。
这种模型的好处在于,它让每次交易过程,都被记录得明明白白,并且可以追溯每笔资金的源头。也正是基于这个特点,UTXO可以和共识机制一起解决双花问题。
区块链解决第一种类型的双花问题,同样借鉴了传统银行的方式,会按照顺序一笔一笔处理交易。当节点在处理一笔交易的时候,会先通过UTXO模型检验交易资金存不存在,然后追溯这笔交易的源头,确定没问题后,就会通过共识机制进行全网广播,记录到链上。
如果有人想要用同一笔钱支付两次,区块链网络只会确认先接受到的那一笔,之后那笔交易,节点会在查询UTXO时发现,这笔资金已经被支付出去,并不存在于你的账户中,从而拒绝交易。以此解决了第一种情况的双花问题。
不过由规则内引发的双花问题是UTXO也没有办法解决的。所谓规则内引发的双花问题,就是利用共识机制的规则本身,对已经记好账的交易进行篡改,常见的就是51%算力攻击。比如有一个采用POW共识机制的区块链,因为整个网络的人数比较少,有一个节点掌握了整个网络51%的算力,这个时候,他就可以先进行一笔交易,等交易完成后,再通过共识机制篡改之前的那笔交易记录,否定之前的那笔交易,让已经花过的钱又重新回到自己账户,再次使用。
而这种情况的双花问题,只能通过提高全网算力的方式来解决,所以,在区块链中,使用的人越多,全网算力越高,整个网络也就越安全。
总的来说,UTXO不仅可以协助共识机制解决区块链中的第一类双花问题,更赋予了区块链可追源的特点,区块链也能以此为基础,保证每笔交易的真实与可靠。
云篆山7星评价
2020-03-21 13:57:44
其实根本没有什么比特币,有的只是UTXO。UTXO是unspent transaction outputs(未花费的交易输出)的缩写。“未花费的交易输出”是什么意思?其实可以把这个词拆开来看—未花费的/交易输出。比特币只有两种状态:已花费、未花费,只有未花费的状态才能用于交易或转账。为什么要设计UTXO模式,这是中本聪创造的在数字世界中避免双花的问题(一笔钱花费两次的情况)。
比特币是通过挖矿算力竞争,从而争夺新区块的记账权的。在获得新区块的记账权的同时,会获得新区块奖励的比特币。比如中本聪2009年1月3日挖出了比特币的创世区块,就获得了50个比特币。这50个比特币在比特币钱包地址里看到它就是一个UTXO。获得新区块记账权从而获得比特币奖励的过程被称为币基交易,这是一个特殊的交易,它没有输入只有输出。以后都以输出而非输入为基准,对比特币的状态进行描述。
UTXO即未花费的交易输出,即还没有花费的别人的交易输出,是相对上一个和我们交易的、给我们转入比特币的人来说的,相对他/她来说这笔交易是一种交易输出。如果转到我们的比特币钱包里,我们还没有花出去,那就是未花费的交易输出。比特币的UTXO只有两种状态:已花费和未花费。比特币作为区块链1.0数字货币的代表应用,第一次真正的实现在网络世界中创造一种不可复制的唯一的价值表示。使得互联网从信息互联网向价值互联网迈进。
同时UTXO模式还有利于防伪验证,识别某条交易的比特币是不是真的,只需识别和判断在他之前的所有交易都是真的,这样该笔交易的比特币才能被证明是真实存在的。而UTXO模式为验证之前的交易信息提供了便捷,这比基于余额的验证方式要简便和高效的多。尽管后来的以太坊和EOS都未采用UTXO模式,但是在当时的技术条件下,UTXO是较为理想的方式。
当然在物理世界中不用考虑双花的问题,因为每张钱都有一串独特的代码,也就是说每张钱都是独一无二的。在现实世界中我们买东西,通常一手交钱一手交货,不会存在一笔钱花费两次的问题。而在互联网的世界中,数字文件是可被无限次进行复制的,数字能被复制但是钱或者说是价值不能被复制。为了避免在网络世界中出现双花问题,中本聪巧妙的设计了UTXO模式。
一笔交易就是一个UTXO,每个UTXO都是一次性的,即一次必须消耗完。这种一次性的机制就很好的避免了双花问题。比如我们买到商品时,首先要撕掉一次塑料包装纸。这个塑料包装纸就是一次性的,撕开了就不能恢复原样了。同理UTXO只有两种状态,你没有花它的时候,它静静在你比特币钱包地址上躺着的时候,比特币是未花费的状态。而一旦UTXO被拿来支付和交易,就变成已花费的状态。
比如我的一个UTXO里有10个比特币,我需要向小明转账5个比特币,那么这个UTXO必须一次性消耗完,但是我只转给小明5个比特币就好,那我剩下的5个比特币不就浪费了?不是的,虽然比特币的UTXO必须一次消耗完,在转账的时候需要给小明转5个比特币的同时,转给自己5个,不然多余的5个比特币就被浪费了。
比特币的UTXO模式,虽然很好的解决了双花问题。但是这种使用方法相对落后,我们这代人使用惯了支付宝和微信支付这种便捷的第三方支付,UTXO甚至都不能看到账户余额,只是在比特币地址上能看到有几个UTXO。就像有多个抽屉的桌子,每个抽屉里都有现金,如果你想知道这个桌子里总共有多少钱,需要挨个抽屉数一下最后加总。而比特币钱包地址里的UTXO也类似这样,总额是多少并不直接知道,需要将每个UTXO里的比特币加总起来。