阅读 259

区块链100讲:UTXO-你的比特币钱包里永远没有钱

image

比特币交易,是比特币系统中最重要的部分,在比特币交易过程中,有一个词经常被提及“UTXO”,有一种说法:你的比特币钱包里永远没有钱,但能拥有支配钱的权力。

如果有人告诉你,比特币世界里既没有所谓的“账户”,也没有所谓的“余额”,你一定会觉得很奇怪。你一定会问“明明我的钱包App告诉我,我有XX个比特币在钱包里躺着啊?”

本期《区块链100讲》我们来讲讲UTXO。

image

1

过去的认识

比特币交易,是比特币系统中最重要的部分。它的生命周期如下图:

image

它的生命周期始于它被创建的那一刻,也就是诞生。

随后,比特币交易被一个或者多个签名加密,这些签名标志着对该交易指向的比特币资金的使用许可。

接下来,比特币交易被广播到比特币网络中,在比特币网络中,每一个节点(比特币交易参与者)验证、并将交易在网络中进行广播,直到这笔交易被网络中大多数节点接收。

每个比特币节点都和一些其他节点相连,形成一个巨大的网状结构。每个节点收到交易之后都互相进行验证,如果有效就传播到其他节点,如果无效就拒绝并返回。一笔有效的交易在几秒钟就能传遍网络。

最终,比特币交易被一个挖矿节点验证,并被添加到区块链上一个记录着许多比特币交易的区块中。

一笔比特币交易一旦被记录到区块链上并被足够多的后续区块确认,便成为比特币总账簿的一部分,并被所有比特币交易参与者认可为有效交易。

于是,被这笔交易分配到一个新所有者名下的比特币资金可以在新的交易中被使用——这使得所有权链得以延伸且再次开启一个新的比特币交易生命周期。

2

UTXO

一笔比特币交易 是一个含有输入值和输出值的数据结构。

比特币交易的基本单位是未经使用的一个交易输出,简称UTXO,全称是“Unspent Transaction Output”。

在比特币的世界里既没有账户,也没有余额,只有分散到区块链里的UTXO。

UTXO是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。

比特币网络监测着以百万为单位的所有可用的(未花费的)UTXO。当一个用户接收比特币时,金额被当作UTXO记录到区块链里。这样,一个用户的比特币会被当作UTXO分散到数百个交易和数百个区块中。

实际上,并不存在储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。

“一个用户的比特币余额”,这个概念是一个通过比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。

——《精通比特币》

要理解UTXO,我们假设一共这样的场景:张三挖到12.5枚比特币,过了几天,他把其中2.5枚支付给李四。又过了几天,他和李四各出资2.5比特币凑成5比特币给王五。

如果是基于传统账户模型的设计,张、李、王三人在数据库中各有一个账户,则他们三人的账户变化如下图所示:

image

但在比特币中,这个过程是通过UTXO实现的,图示如下:

image

由图我们可知,上一笔交易的输出是下一笔交易的输入,形成一条交易链。在比特币世界里的每一笔转账,都能够追溯到上一笔交易,可以一直往上追溯到它诞生时矿工挖出来的那个区块。在一笔交易中,被交易消耗的UTXO被称为交易输入,由交易创建的UTXO被称为交易输出。

比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。当用户付款时,他的钱包通过选择可用的UTXO来构造一笔交易。一旦UTXO被选中,钱包会为它生成包含签名的解锁脚本,相当于把钱柜打开取钱出来支付。

UTXO的优势

在物理世界中,货币的价值传递很容易,通过金属货币/纸币能够很好实现价值传递;而在数字世界中,比特币会对前一次的交易和下一位拥有者的公钥签署一个数字签名,将这个签名附加在比特币的末尾发送给下一位所有者。通过UTXO的设计机制,很好的保证了每笔交易只能使用一次,即解决了数字世界的双重支付的问题,从而实现价值传递。

另外由于全网只记录UTXO,未来可以剪裁历史老数据,而不像中心化账户数据库系统一样需要记录所有的交易记录(增删改),不能丢弃老数据,从而减缓了整个网络数据增长过快的问题。

内容来源:孟岩的区块链思考、娜美岁月、U赞社区

整理:Cynthia

延伸阅读:区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!

区块链100讲:公开密钥算法不能不知道的4个概念

区块链100讲:据说,80%的人都搞不懂哈希算法

区块链100讲:以太坊(Ethereum ETH)挖矿教程

活动推荐

活动推荐:技术沙龙|从0开始写合约,以太坊开发者学习路径(天津)

扫描下图中二维码或点击“阅读原文”即可报名参加

image