主页 > 下载安卓版imtoken钱包 > 【区块链探索笔记十一】:UTXO

【区块链探索笔记十一】:UTXO

下载安卓版imtoken钱包 2023-03-17 05:45:16

什么是 UTXO

在比特币钱包中,我们通常可以看到账户余额,但在中本聪设计的比特币系统中,并没有余额的概念。“比特币余额”是衍生自比特币钱包应用程序的产品。中本聪发明了 UTXO 交易模型并将其应用于比特币。

UTXO(Unspent Transaction Outputs)即未使用的交易输出,是比特币交易生成和验证的核心概念。事务形成一组链结构。所有合法的比特币交易都可以追溯到一笔或多笔远期交易的输出。这些链的来源是挖矿奖励,最终是当前未花费交易的输出。

基于账户的交易

我们先来看看传统交易是如何进行的:我们设计一个支付系统,给张三一个余额为100元的账户,给李四一个余额为50元的账户。当张三要付李四 20 元时,请执行以下操作:

比特币查询区块到账

1. 查看张三账户余额是否充足。不足20元,终止交易,向张三报告“余额不足”

2. 从张三的账户中扣除20元(假设手续费为零)

3. 给李四的账户加20元

无论是银行、信用卡、证券交易系统,还是互联网第三方支付系统,其核心都是基于账户的设计比特币查询区块到账,以关系数据库为支撑。

比特币查询区块到账

基于 UTXO 的交易

理解 UTXO 最简单的方法是描述比特币从诞生到商业世界的起起落落的经历。假设这样一个场景:张三挖了 12.5 个比特币。几天后,他将其中的2.5个付给了李斯。几天后,他和李思各自贡献了2.5个比特币,凑成了5个比特币支付给王舞。

比特币的区块链账本记录了一笔又一笔交易。

每笔交易有多个交易输入,即资金来源,也有多个交易输出,即资金去向。一般来说,每笔交易都会花费一个输入并产生一个输出,而产生的输出就是“未花费的交易输出”,也就是UTXO。

比特币查询区块到账

比特币交易遵循几个规则:

首先,除了coinbase的交易,所有的资金来源都必须来自前面一笔或几笔交易的UTXO,就像一根水管,一个接一个,一个接一个,一个进一个出,源源不断,资金流淌交易之间。

其次,任何交易的总交易输入必须等于总交易输出,并且等式两边必须平衡。

比特币查询区块到账

上图中的第一笔交易#1001 是 coinbase 交易。比特币由矿工开采。当矿工竭尽全力寻找合格的区块时,它有权创建一个 coinbase 交易,将新的金额放入其中,并输出交易输出的收款人地址。在一个栏中,以直立的方式写下您的地址。假设这个比特币的数量是12.5枚,这个coinbase交易连同张三挖出的区块被每个节点接受,经过六次确认后将永远铭刻在历史中。

几天后,张三打算向李四支付2.5个比特币,张三发起了#2001的交易。本次交易的资金来源写为“#1001(1)”,即交易#1001的第一个UTXO,张三挖出来的coinbase交易。然后,在交易中输出UTXO项本次交易,2.5 个比特币的收款人地址设置为李斯的地址。

请注意,此交易必须消耗所有产生 12.5 个比特币的输出项,由于张三只打算支付李斯 2.5 个比特币比特币查询区块到账,为了消耗剩余的 10 个比特币,他剩下的 10 个比特币必须支付给自己,以满足输入和输出平衡的规则。

再过几天,张三和李四打算用AA系统给王舞5个比特币。然后张三或李四发起事务#3001。在交易输入部分,有两个资金来源,分别是#2001(1)和#2001(2),代表#2001的交易。(1)和(2) UTXO 项。然后在这个交易的输出部分做同样的事情,给王舞 5 个比特币,给张三剩余的 7.5 个比特币。归还给自己。如果王舞要花掉他的 5 个比特币以后他必须将交易中的资金来源标明为#3001(1).

比特币查询区块到账

所以,事实上,没有比特币,只有 UTXO。当我们说张三拥有 10 个比特币时,我其实是指在当前的区块链账本中,有几笔交易的 UTXO 项目支付到张三的地址,而这些 UTXO 项目的数量是 10。账户余额我们在比特币钱包中看到的其实是钱包通过扫描区块链,聚合所有属于用户的UTXO来计算的。

两种交易方式的比较

1.UTXO只需要看最后一笔交易,账户系统需要看所有历史数据后的所有加减法才能得到正确的余额,两者效率上的差距会加大时间;

2.UTXO以后可以剪除旧的历史数据,但是账户系统不能丢弃旧的数据。前者区块链可以控制整体规模,而后者只能继续扩大。

一点想法

比特币规定,每笔新交易的输入必须是某笔交易的未花费输出,每一个输入也需要由上一次输出对应的私钥签名,并且每个比特币节点都会将当前的UTXO存储在整个区块链上,全网节点通过UTXO和签名算法验证新交易。