令人眼花缭乱的区块链名词之:UTXO

hello,大家好,我们第六期的区块链技术分享来啦~~本期分享的主题是UTXO(Unspent Transaction output)未花费的交易输出

 

在比特币系统中,每个全节点都会记录UTXO。要理解UTXO模式,首先要清楚:比特币采用的是基于交易的账本模式也就是transaction-based Ledger。怎么理解?

 

通俗地解释,比特币系统并不存在“账户”,而只有“地址”。只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和。比特币系统并不会帮你把这些地址汇总起来形成你的账户。

 

因此,在比特币网络中核心是:交易。交易将价值从交易输入转移到交易输出。交易输入是价值的来源,通常是上一笔交易的输出。

为了深入理解UTXO,下面我们先举例说明比特币上的交易。

交易

简单来说,一个比特币交易,就是告诉网络,某个拥有一定数量比特币的用户已经授权将这笔比特币转让给另一位用户。新的所有者可以通过另外一笔授权转让交易来使用这些比特币,以此类推,形成一个所有者转换的链条。

 

每个区块链网络都是一个分布式账本, 交易就像复式账本的一笔笔记录,每个交易均包含一到多条的“输入”——这是比特币账户的借方。每笔交易也包含了一到多条的“输出”——这是比特币账户的贷方。

 

 

这里扩展解释一下记账相关的知识点:

 

 

人类社会发明的记账技术先后有四种

 

 

(1)早在原始社会时,人类发明了“结绳记账”;

 

 

(2)农业社会时发明了“记流水账”;

 

 

(3)工业社会时发明了“复式记账”,复式记账的平衡表使账目一目了然,适应了工业社会的企业管理,但它避免不了经理人与会计可能从原始数据源头造假。

 

 

(4)区块链是一个分布式账本,分布式账本是一种在网络成员之间共享、复制和同步的数据库。

 

复式记账法的记账规则是:“有借必有贷,借贷必相等。”使用“借”与“贷”两个记账符号,而这两个记账符号没有实际意义。借助记账符号将同一笔交易或事项以相同的金额记录在两个以上会计科目中,这样的记账方法有助于我们弄清楚交易和事项的来龙去脉。

 

 

输入和输出(借和贷)加起来不要求相等。实际上,输出加起来的和应稍小于输入的和,这个差额就是隐含的“交易费用”,这笔小额费用归那些将交易归集到账本的矿工所有。(下图中的交易费用就是小费)

 

 

如下图所示,爱丽丝支付给鲍勃的交易使用了上一笔交易的输出,作为这笔交易的输入,输出则包含两部分,一部分给Bob(0.0150BTC),另一部分用于找零(0.0845BTC)。交易形成了一个链条,最新交易的输入对应上一笔交易的输出。

 

 

爱丽丝的私钥密钥提供的签名解锁了前笔交易的输出,向比特币网络证明了她对这些资金的所有权。她在交易中附上鲍勃的地址,形成一个“限制”,限制鲍勃必须使用私钥签名才能花费这笔资金。这个过程展示了价值在爱丽丝和鲍勃之间转移的过程。

交易输出将一笔与私钥关联的价值赋予一个新用户。目标密钥称为安全锁。在未来的交易中,需要通过签名来获取这笔资金

 

 

如果每一笔输入都要关联上一笔输出,那么在比特币网络中到底是先有输入还是先有输出?

 

这个问题是有标准答案的:先有输出。

 

 

在比特币里面有一类特殊交易叫铸币交易,也是比特币网络发新币的方式。

 

 

铸币交易并不需要消耗(花费)。实际上,它只有一个输入,叫做币基(coinbase),这个交易从无到有生成了比特币。铸币交易有一个输出,支付到矿工的比特币地址。

 

 

上图中,铸币交易的输出将25.09094928比特币发送到矿工的比特币地址,地址是1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N。

 

UTXO

 

 

从前面的分析来看,交易的输入方在转账之前,先要用私钥签名,表示自己对这笔钱的所有权,也就是这笔钱还未被消费。

 

比特币全节点跟踪所有可用和可消费的输出,称为“未花费的交易输出”(unspent transaction outputs),即UTXO,所有UTXO的集合被称为UTXO集。

 

 

UTXO集大小在新的UTXO增加时而增长,并在UTXO被消耗时而缩小。每一个交易都代表UTXO集中的变化(状态转换)。

 

 

怎么理解呢?假设Alice向Bob转账8比特币,那么转账步骤如下:

 

 

1) 假设Alice之前通过挖矿获得了 10 个比特币,在她的地址中,这些比特币是某个币基交易的 UTXO。

 

 

2) Alice 发起一个交易,输入是自己的上一个交易,输出有两个:一个是 Bob 的地址,数量是 8个比特币;另一个自己的地址,数量是2比特币,Alice 用自己的私钥对交易进行签名。

 

 

比特币交易还要遵循一个原则:每一次交易的输入值都必须全部花掉,不能只花掉部分。你有一个价值20比特币的UTXO并且想支付1比特币,那么你的交易必须消耗掉整个20比特币的UTXO,并产生两个输出(UTXO):一个支付了1比特币给接收人,另一个支付了19比特币的找零到你的钱包。由于UTXO不可分割特性,大部分比特币交易都会产生找零。

 

 

3) 当交易被区块链确认后,Alice 的 UTXO 就变成了 2。而在Bob的地址中就多了一个 UTXO,数量是8。

 

 

比特币网络中UTXO的变化,如下图:

因此在比特币系统中并不存在比特币,只有UTXO,每一笔比特币都源自上一个交易,是上一个交易的未花费的交易输出。

 

 

我们可以沿着这样的交易链条一直向上追溯。在源头,每一枚比特币都是通过挖矿被创造出来的,在每一笔比特币的源头是一种特殊的交易——比特币矿工因挖矿生成区块而获得奖励的币基交易(coinbase transaction

 

 

未使用的交易输出(UTXO)和我们熟悉的银行账户有着很大的不同。为什么要采用这样的设计?

 

第一,UTXO设计易于确认比特币的所有权。

 

 

采用UTXO设计,要确认我拥有比特币,只要确认上一个交易我的确获得了它们即可。在比特币区块链中,一个区块经过6次确认后,其中的交易可被认为是真实无误的。因此,通常只要上一个交易是真实的,我就的确拥有这些比特币。

 

 

第二,UTXO设计与区块链账本是完全融为一体的。

 

 

银行账本与区块链账本都是一种所有权管理系统,

 

 

它的首要任务有两个:

 

 

一是记录某一时刻谁拥有什么;

 

 

二是通过转账交易把钱从一个人转给另一个人。

 

 

银行账本的记录方式是每一刻形成一个快照,把重心放在第一个任务上,也就是谁拥有什么;

 

 

UTXO的记录方式是把重心放在第二个任务上,然后反过来完成第一个任务,由转账交易来记录所有的所有权转移过程。

 

 

转账交易累积成的区块链账本可在某一刻来确认谁拥有什么,这一刻的记录也就是区块链的状态。

 

 

因此比特币的系统设计就是一个状态转换系统(statetransition system)。以太坊也是一个状态转换系统,区别于比特币transaction-based Ledger基于交易的模型以太坊是account-based Ledger基于账户的模型,以太坊也采用这种状态转换系统的设计,同时又对其进行了改进,主要是引入了智能合约,让对状态转换进行编程更方便。

 

 

今天的分享就这么多,大家周末愉快~~

 

本文参考:

 

  1. 《结构性改革:中国经济的问题与对策》

  2. 《区块链:技术驱动金融》

  3. 《区块链:通往资产数字化之路》

  4. 《精通区块链编程》

    来源:Candy链上笔记