UTXO是比特币交易系统里面,中本聪的三大原创技术之一,另外两个分别是区块链和智能合约。今天我们就来讲讲这个天才设计UTXO。
01 什么是UTXO?
《精通比特币》中关于UTXO的定义是这样的:
UTXO(Unspent Transaction Output):未花费的交易输出。
在比特币的世界里的每一笔转账,都能够追溯上一笔交易。每一笔付款,都可以追溯到上一笔的收款。一直往上追溯到它诞生的时矿工挖出来的那个区块。
02 举例说明
首先,为了理解这个概念,我们先来用一个现实中的例子类比:
UTXO系统有点类似于现实中的纸币消费,比如你有10元、5元、1元纸币各1张。你要花费12元向我买水果。你手中的3张纸币是真实存在的未花费的交易输出(UTXO),因为我看的见(类似区块链网络中的地址查询)。为了买12元的水果,你要给我10元和5元2张纸币(UTXO),为了保证输入输出相等,我会收下你的15元,并付你1张1元纸币和1张2元纸币或者直接给你3张1元纸币(新的UTXO)。
上述的类比其实不太准确,比如少了系统的存在,下面我们来详细讲解一下。
传统的中心化账户系统,如银行、微信、支付宝等,在记录交易时,实际上是在你的账户余额上进行加减。比如你的账户余额里面有10元,你向奶茶妹妹买了一杯奶茶刷卡消费8元。这时系统会在你的银行卡余额中减掉8元,你的账户中还剩余2元,在奶茶妹妹的账户中增加了8元,这就是传统账户系统的交易方式。
而在比特币的UTXO交易系统中,是没有账户余额的概念的:我们已经知道,比特币是靠挖矿来获得新币,即最初的挖矿交易,在挖矿交易中,输出是矿工的收款地址。当矿工将这笔新BTC交易给别人时,就有了这笔新币的第一项UTXO。
依然以买奶茶为例:
假设这个矿工的地址中,有3笔未花费过的交易输出,分别为 1BTC、6BTC、5BTC。一杯奶茶价格8BTC。矿工如果想买这杯奶茶,那么该如何交易呢?直接向奶茶妹妹的地址中转账8BTC吗?
当然不是,我们已经说明比特币交易系统中是没有账户余额概念的,有的只是地址。而地址就像硬币一样,是没有办法掰开来花费的。因此实际的交易是这样的:
你向奶茶妹妹的地址中转11个BTC(6+5),系统会付给奶茶妹妹8个BTC,另外3个BTC会生成新的1个或多个UTXO,回到你的地址中,这是在比特币网络中自动完成的。这时你的地址中应该是3BTC+原来的1BTC,共4个BTC(这里只做说明,未考虑支付矿工费的情况),输入和输出相等,至此交易完成。UTXO方案不记录你的“余额”,而是只确认交易本身。
03 结束语
你看,比特币账户就是一个个的地址,每一笔交易,其实都是对UTXO地址的记录。
以上就是今天的【区区区块链】,欢迎你与我一起学习,我是Kerzzi,叫我柯子就好。
公众号:叫我柯子就好。知识星球:行思区块链。
04 思考题
思考:如果比特币网络不使用UTXO?而是采用传统账户系统的余额记账方式会有什么问题?
提示:
余额记账:需要一个数据库,记录所有人的余额,所有节点同步该账本。
UTXO:只记录交易本身,所有节点同步该账本。
@seeyoo, 棒棒哒~~~