关键要点
未使用交易输出(UTXO)是已收到但尚未使用的比特币的离散块。
交易可以分割 UTXO 来适应付款、找零和网络费用。
将较小的 UTXO 合并到较大的 UTXO 中可以减少未来的交易输入。
UTXO 模型确保每个输入都引用先前的输出,将输入与输出相加,并在确认后更新 UTXO。
UTXO提供了清晰的资金流向,增强了隐私性,而账户模型虽然简单,但却面临可扩展性和安全性的问题。
UTXO简单解释
想象一下,你走进一家超市,想花 1 美元买一个橙子,但你只有一张 5 美元的钞票。很自然地,你会把它交给收银员,收银员会把 5 美元兑换成五张 1 美元的钞票,收银员会把其中一张留给你,然后把四张还给你。
虽然未使用交易输出(UTXO)的概念乍一看可能令人望而生畏,但它们可以简单地被视为你钱包中保留的隐藏货币面额。
如果您打算管理自己的比特币,那么了解 UTXO 是什么、为什么它们很重要以及如何有效地处理它们至关重要。
如果没有这些知识,您将来可能会遇到重大问题。
什么是UTXO?
UTXO 是您已收到但尚未使用的比特币块。就像您在实体钱包中持有不同面值的美元(例如 20 元、5 元和几枚硬币)一样,您发送的每笔比特币交易都由一个或多个隐藏的 UTXO 组成。
因此,您的余额是您钱包中持有的所有 UTXO 的组合。
以下是一个简单的例子。
单一 UTXO 场景
假设你刚刚挖掘了一个区块并直接从网络收到了新铸造的比特币。
如果你的奖励是 3.5 BTC,由区块奖励和交易费组成,那么这个金额就构成一个 UTXO。
可以将其视为你现在拥有的一块新铸造的比特币。
现在,假设您想向朋友 Bob 发送 1 BTC。网络将获取您的 3.5 BTC 单个 UTXO,并将其拆分为三个单独的 UTXO(这些示例数字已四舍五入,以方便理解):
找零: 2.5 BTC 将作为找零发送回您的钱包。
网络费用:少量金额,比如0.000002 BTC,将用于支付网络费用。
向鲍勃付款: 1 BTC 将发送给鲍勃。
接下来,假设你想把剩下的 2.5 BTC 寄给你的妹妹 Alice。在这种情况下,由于没有零钱,所以只需要考虑费用:
网络费用: 0.000001 BTC。
支付给Alice: 2.5 BTC将发送给Alice。
您还会注意到费用较低。这是因为比特币交易费用取决于交易数据的大小(以字节为单位),而不是发送的比特币数量。
因此,钱包中的 UTXO 越少,您进行的任何交易都更容易被网络处理,因此也更便宜。
这种只持有一个 UTXO 的情况很少见。所以,这里还有一些其他场景。
多个 UTXO 场景
这将是一个更加现实的情况,因为大多数人都会在他们的钱包中持有多个 UTXO。
汤姆想给他的朋友杰瑞发送 1.2 BTC。
这次,Tom 的钱包里有各种小型、中型和大型 UTXO。这意味着网络需要从许多较小的 UTXO 中形成较大的交易。
例如,如果 Tom 在多个 UTXO 中总共有 10 BTC,则交易细目可能如下所示:
找零: 8.8 BTC 将作为找零发送回 Tom 的钱包。
网络费用: 0.000009 BTC。
作为 1.2 BTC 交易的一部分,将发送给 Jerry 的 UTXO:
付款 1:0.9 BTC
付款2:0.15 BTC
付款3:0.10 BTC
付款4:0.05 BTC
当然,这些示例是为了简单起见而四舍五入的,但你会注意到交易越复杂(即涉及的 UTXO 数量越多),成本就越高。
你可以通过各种在线工具查看组成你钱包余额的UTXO。下面是一个UTXO管理界面的示例。
重要的是要明白,比特币余额不同于传统的银行余额。不要将“一个比特币”视为一个单位,而要考虑钱包中有多少个 UTXO 组成余额。每个 UTXO 代表一个离散的比特币,可用于交易。
你知道吗?比特币的 UTXO 模型概念深受早期数字现金系统的影响,例如 20 世纪 80 年代 David Chaum 的 eCash 和 20 世纪 90 年代 Wei Dai 的 B-money 提案。这些早期的数字货币尝试使用了类似的想法,即跟踪单个交易输出以防止双重支付,中本聪后来在比特币的设计中对其进行了改进和实施。UTXO 模型成为比特币的基础元素,确保了区块链的完整性和安全性。
合并 UTXO
你现在可能会想:
当然,如果由于费用的必然性和匹配交易的 UTXO 面额不均而导致交易不断分裂,那么随着时间的推移,它们将变得更加复杂,这意味着平均费用将不可避免地呈上升趋势。
理论上,是的,如果“合并”不可能的话。
您是否曾将硬币和小额面额的纸币带到 Coinstar 机器上?这些机器会接收您的零钱,进行计数,然后为您提供一张代金券,您可以在商店的客户服务台将代金券兑换成现金。
事实上,比特币 UTXO 也有可能实现同样的效果。“合并”是指将多个较小的 UTXO 作为一个较大的 UTXO 发送给自己,从而减少未来交易输入的数量。
这样做很重要;否则,您最终可能会得到数百甚至数千个不同的 UTXO,从而使任何交易活动都相对昂贵。但是,建议在网络费用较低时这样做。
如何合并 UTXO
在合并 UTXO 方面,大多数钱包都提供此功能,因此各个平台的流程应该相当相似。本示例将使用 Sparrow Wallet。
第一步:打开Sparrow钱包,获取收款地址
在 Sparrow Wallet 中,点击“接收”按钮。
复制出现的最新未使用的接收地址。
步骤 2:选择要合并的 UTXO
导航到 Sparrow Wallet 中的 UTXO 部分。
单击选择您想要合并的所有 UTXO。
单击“发送所选”按钮继续。
步骤 3:创建合并交易
将之前复制的接收地址粘贴到“付款至”字段中。
如果需要,为此交易添加标签。
根据您的偏好调整交易费用。Sparrow Wallet 会自动将此识别为“自转账”。
点击“创建交易”。
步骤 4:完成并签署交易
检查交易详情。确保输入(选定的 UTXO)和输出(合并的 UTXO)正确。
点击“完成交易以供签署”继续。
步骤5:确认交易
等待区块链上确认交易。确认后,您的 UTXO 将合并为单个 UTXO。
UTXO 模型如何防止双重支付
正如比特币白皮书中概述的那样,实施 UTXO 模型的原因有很多,但可以说,最重要的是它可以防止双重支付。
事实上,比特币的设计需要能够防止用户更改账本,将他们已经花掉的比特币返还给他们,或者更恰当地说,防止用户两次花掉同一个比特币。
UTXO 模型是该解决方案的关键部分,主要通过三种方式防止双重支付:
每笔交易输入都必须引用之前的交易输出:例如,Alice 之前收到了 1 BTC。当向 Bob 发送 0.5 BTC 时,她的交易引用了她收到的 1 BTC。剩余的 0.5 BTC 通常会作为新的 UTXO 返回给 Alice。
输入总和等于输出总和:假设 Alice 的输入是 1 BTC。她向 Bob 发送 0.5 BTC,并收到 0.5 BTC 找零。这可以防止出现任何差异并确保资金正确分配。
一旦交易得到确认,UTXO 就会更新: Alice 向 Bob 发送的 0.5 BTC 交易得到确认。原始的 1 BTC UTXO 被标记为已使用。创建新的 UTXO:0.5 BTC 给 Bob,0.5 BTC(减去费用)返还给 Alice。这些新的 UTXO 可以在未来的交易中使用,而已使用 UTXO 则不能。
UTXO 与账户模型
UTXO模型通过提供清晰的资金轨迹,降低了防止双重支付的复杂性,并通过使用多个地址增强了隐私性,使得验证区块链的完整性变得更加容易。
然而,它伴随着更复杂的交易结构和更大的交易规模以及有限的智能合约支持。因此,随着2015 年上线的 以太坊区块链的创建,“账户模型”被提出。
事实上,账户模型更容易理解,因为它的运作方式与传统银行账户类似。当你发起一笔交易,将指定金额从你的账户转移到 Alice 的账户时,银行会进行验证并更新其账本中的余额。
例如,以太坊维护一个全局状态,记录区块链上所有账户的余额,包括用户拥有的账户和基于合约的账户。提交交易后,以太坊虚拟机 (EVM)会对其进行验证,并相应地更新相关方的账户余额。
账户模型虽然简单高效,但存在可扩展性问题、安全风险和更大的隐私问题。因此,UTXO 和账户模型并不是区块链领域的唯一方法。
例如,Cardano 在 2017 年提出了扩展未花费交易输出(EUTXO)模型。该模型通过合并通常与账户模型相关的特性(例如更复杂的脚本和有状态的智能合约)扩展了传统 UTXO 模型的功能。
此外,Iota 使用 Tangle(一种有向无环图 (DAG))来促进适合物联网 (IoT) 设备的快速、无费用的交易。
需要记住的是,虽然 UTXO 模型为比特币(全球最大、最知名的区块链)提供了动力,但该行业正在不断发展。Cardano 的 EUTXO 和 Iota 的 Tangle 等新模型正在涌现,为以太坊账户模型等传统模型面临的挑战提供了创新解决方案。