将一笔钱重复使用,就是双重支付问题,即“双花”问题。在使用纸币或其他物理货币时,不会产生这个问题,因为需要将一笔钱交给别人才会完成支付,自然而然没有双重支付的问题。但我们在互联网上使用电子支付手段时,双花问题是必须要注意的问题。无论是银行在线转账、还是微信支付宝等支付软件,
双花的传统解决方案,支付完成时发生的变化的往往只是其数据库中更改的一串数字。防止双花问题事关用户的财产安全。
在传统的在线支付的过程中,必须引入一个可以信赖的第三方,这个第三方可以是银行一类的金融机构,也可以是腾讯阿里这类大公司,但无论如何,都需要一个中心机构,对支付过程进行保障,对数据库进行维护。交易双方都信赖这个第三方,其凭证可以作为交易确实存在的证据。其过程可以简化的理解为众多参与者依赖一个强大中心的结构。
中心化网络
比特币的独特之处在于:第一次提出一种舍弃第三方机构而实现了交易方直接进行交易的电子货币系统。所有使用比特币的参与者均是平等的,在这种对等网络中没有一个强大的中心机构,参与者是匿名的,但交易记录是公开透明的,每发生一次交易,向整个网络进行广播,每个参与者都可以接收到整个信息,然后对交易信息进行确认,当一段时间内的所有交易信息都在整个网络的大部分参与者确认后,便形成了一种共识,然后这些交易信息会被记录在区块中。
对等网络在系统中各个参与者对交易的验证过程就是防止比特币双花的重要环节。比特币引入了一个很重要的概念——UTXO(Unspent Transaction Output),含义就是未花费的交易输出。对于任何一笔交易,一定有一个资金来源和资金去向且两者数量相等。一个账户收到了比特币,那么接收到的这笔金额记入UTXO,一个账户向外转账,其资金来源必须是记录在UTXO中的,同时结合用户凭证对这个UTXO进行锁定,此后如果该账户仍让用这笔资金进行支付,则会验证失败,即如果进行双重支付,则只有第一次支付会被确认。当确认完成,接收者想要使用这笔刚刚接收到的UTXO时,也需要使用本账户的凭证进行支付。
所以我们看到,对于任何资金,都可以利用区块链中的数据记录,追溯至比特币最初的发行位置,但交易时不需要对整个交易历史进行验证,只需要验证当前交易的输入的来源是否来自UTXO即可。通过这种方式比特币有效的防止了双重支付问题。
这里值得提出的是,UTXO是比特币系统中的一个最小交易单位。和我们使用纸币的观念不同,纸币包含固定面值,如100元,50元等,我们拥有的金额就是这些固定面值的组合。但在比特币系统中,一个账户可以包含很多UTXO,每个UTXO可以有不同的面值。例如,账户A的初始UTXO是100元,B为0元,A向B支付了10元,假设不考虑交易费用,则此时,A的100元UTXO整体作为输入,其中10元作为输出给B,90元输出给自己A,这样A的UTXO为90元,B的UTXO为10元。此时如果有账户C向B转了30元,则B账户中有两个UTXO,分别为10元和30元,B账户可支配的总额就是40元。
UTXO总结一下,在比特币系统中,引入UTXO的概念,对每个账户的可支配金额进行验证,所有不是来自UTXO的交易输入都不会被验证通过。比特币通过这种方式来防止一笔金额被双重支付。UTXO为交易的最小单位,一个交易可以有多个UTXO作为输入,也可以有多个输出,交易的输出作为输出账户的新UTXO,输出的账户可以根据自己的账户凭证使用这笔UTXO参与新的交易。接下来会介绍如何在对等网络中建立共识来防止对于交易记录的篡改问题。
网友评论