什么是比特币未花费的交易输出 (UTXO)?
理解 UTXO 模型 💻
UTXO 一览
当您向他人发送比特币时,系统会以编程方式执行几个步骤。交易流程最早的步骤之一是,您的 加密货币钱包会扫描区块链,以确定您拥有的资金数额。这些资金被称为未花费的交易输出 (UTXO)。
您可以将 UTXO 视为先前比特币交易中剩余的零钱。
这些资金被视为“未花费”,因为您可以自由地将它们发送给他人或转移到另一个钱包。它们被称为“交易输出”,因为它们是由先前的交易创建的。
如果您用一张 20 美元的钞票支付 12 美元的午餐,您会剩下 8 美元。在这个例子中,剩下的 8 美元就是一笔未花费的交易输出。它会回到您的钱包中,随时可以用来购买其他东西。
比特币 UTXO 的工作原理正是如此。当您进行交易时,先前比特币交易的输出(即您的比特币零钱)将用作新交易的输入。
实体现金交易和 UTXO 之间的另一个关键相似之处在于,两者都必须全额花费且不可分割。如果您有一个 5 比特币的 UTXO,并想向某人发送 1 BTC,您必须发送价值 5 比特币的整个 UTXO,然后会收到一个价值 4 BTC(减去任何费用)的新 UTXO 作为找零。
就像在上面的例子中,您递出一张完整的 20 美元钞票来支付 10 美元的午餐一样。
当一个 UTXO 被花费时,它被视为“已消耗”,并从技术上被移出流通。
任何剩余的找零都会生成一个全新的 UTXO。UTXO 系统的这一部分正是比特币解决双花问题的方式。
就像您不能将一张 5 美元的钞票给店主后,再将同一张 5 美元的钞票给另一个人一样,比特币用户也无法在两次独立的数字交易中成功使用同一个未花费的交易输出。
当有人试图将同一个 UTXO 花费两次时,这两笔交易最终都会进入内存池 (mempool)——一个存放待处理交易的等候室。它们会一直留在这里,直到赢得工作量证明竞赛的成功矿工将它们打包到新的区块中。
您可以在我们的 Kraken 学习中心文章什么是比特币挖矿?中了解有关此流程的更多信息。
即使两笔交易被打包到两个独立的区块中并同时处理,由于有时间戳,其中一笔交易也会先于另一笔得到验证。经过一定数量的确认(新的区块被添加到区块链上)后,其他节点会标记第二笔无效交易并拒绝它。
Coinbase 交易
只有在通过挖矿创造出新铸造的 BTC 时,比特币交易才没有输入。
这被称为 coinbase 交易,它代表了每个新区块中的第一笔交易。
流通中的每一个 satoshi(比特币的子单位)都可以使用透明的区块链账本追溯到其各自的 coinbase 交易。
为什么比特币使用 UTXO 模型?
账户余额
为了识别用户的余额(也称为 UTXO 集),加密钱包软件会扫描区块链,以查找与相应公共钱包地址关联的所有 UTXO。
所有 UTXO 的总和准确地反映了钱包所有者控制的加密货币数量。
当一个 UTXO 被花费时,该金额会分配给收款人的公共钱包地址,一旦交易执行,新的 UTXO 就会记录在区块链上。
存储
Bitcoin UTXO 记录在各种交易中,这些交易存储在 Bitcoin 区块链的区块中。然而,这些信息没有明确的索引,因此很难快速搜索和整理元数据。
在使用 Bitcoin Core 客户端等钱包软件时,UTXO 元数据会使用 LevelDB 数据库进行存储和索引。LevelDB 是 Google 于 2011 年创建的一个开源存储系统,它能让 UTXO 的定位速度快得多。
Bitcoin Core 客户端是一款热门软件,用于连接到 Bitcoin 区块链网络。Bitcoin Core 最初由 Satoshi Nakamoto 创建,现在由一个志愿开发者社区进行维护。
UTXO 内部探秘 🚗
从更技术的层面来看,一笔交易主要有四个部分:
- 版本:这会告知网络节点正在使用的是哪个版本的客户端软件。不同版本遵循不同的规则来验证交易数据。
- 锁定时间:这是决定交易何时可以添加到区块链的时间。该输入规定了矿工节点可以处理该交易的最早时间。
- 输入:指向资金来源或生成该 UTXO 的前一笔交易的信息。输入中还包含一个名为“解锁脚本”的内容。
- 输出:有关转账金额、资金所有权被重新分配到的钱包以及新形成的 UTXO 的信息。输出中还包含一个“锁定脚本”。
UTXO 与实体现金有何不同
实体钞票比喻与 UTXO 模型之间的主要区别在于,比特币和其他基于 UTXO 的加密资产不受固定金额(例如 5 美元、10 美元、15 美元等)的限制。任何数量的比特币(最多八位小数)都可以是一个未花费的交易输出。
例如,您可能会在一次交易后剩下 0.0003847 BTC。
这笔金额将成为一个新的 UTXO,如果使用,必须全额花费,不能分割成更小的金额。
假设 John 的加密钱包余额为 1 比特币。他的余额和该余额的构成是两回事,就像您的钱包里可能有 100 美元,但这 100 美元可能由四张 20 美元的钞票、两张 5 美元的钞票和一张 10 美元的钞票组成。
假设 John 的 1 BTC 余额由 5 个不同的未花费交易输出组成。
- 0.138 BTC
- 0.1 BTC
- 0.004 BTC
- 0.73 BTC
- 0.028 BTC
John 想给 Jane 发送 0.6 BTC。为此,John 的钱包软件会自动将他控制的任意数量的 UTXO 组合在一起,以支付这笔交易以及处理该交易所涉及的任何矿工费。
在本例中,假设他的钱包软件自动将 John 价值 0.73 BTC 的比特币 UTXO 发送给 Jane,并将扣除交易费后的剩余金额作为新的 UTXO 返还给 John。
这笔金额会自动发送到一个找零地址;这是一个链接到您加密钱包的独立地址。
锁定和解锁脚本 🔒
创建 UTXO 时,会使用接收者的公共钱包地址将其锁定。要将该 UTXO 用作新交易的输入,必须先使用发送者的数字签名将其解锁。
这是关于比特币交易需要了解的另一件重要事情。进行交易时,比特币并不会以数字方式从一个账户转移到另一个账户。相反,它们会被解锁,重新分配给新的所有者,然后再次锁定。
这意味着只有新的所有者才能使用其数字签名解锁资金,并将其转移到其他地方;转移给另一个人或他们控制下的另一个钱包。
Script 是比特币用来处理交易(包括锁定和解锁 UTXO)的一种编程语言。
- 锁定脚本 (ScriptPubKey):当 UTXO 被锁定时,锁定脚本(称为 ScriptPubKey)会设定 UTXO 在用作输入前必须满足的条件。这通常需要通过提供数字签名来证明您拥有与用于锁定 UTXO 的公共钱包地址相对应的私钥。
- 解锁脚本 (ScriptSig):要解锁 UTXO,您必须满足锁定脚本设定的条件,即提供数字签名,证明您控制着与用于锁定 UTXO 的公钥相对应的私钥。
这可以防止任何其他人访问和使用这些资金。
什么是 Bitcoin 粉尘?
比特币灰尘是指包含先前交易中剩余的极微量聪 (satoshi) 的 UTXO。
就其本身而言,处理这些极小数量 BTC 所需的交易手续费会超过其自身价值,因此它们通常会存放在找零地址中,等待与其他 UTXO 捆绑在一起并被花掉。
什么是粉尘攻击?
粉尘攻击是指诈骗者向数十万个不同的钱包地址发送粉尘。其目的是确定社会工程学攻击的潜在目标。
诈骗者会监视包含他们发送的粉尘的地址,等待所有者进行一笔交易,将与其钱包关联的不同地址的 UTXO 捆绑在一起。由于粉尘 UTXO 非常小,它们很有可能会与其他 UTXO 组合在一起并用作输入。
一旦发生这种情况,诈骗者就可以大致了解一个人拥有哪些资金。然后,他们就可以选择在交易中嵌入网络钓鱼消息,诱使所有者点击下载恶意软件的链接,或访问模仿合法登录页面的虚假网站,并索取个人信息。
比特币粉尘攻击有多危险?
粉尘攻击不会让诈骗者获取您的资金。
它们的作用仅仅是确定哪些地址由特定的加密货币钱包控制。
为了将您遭受粉尘攻击的风险降至最低,最好切勿点击粉尘交易附带的链接或访问相关网站。
开始购买 Bitcoin
既然您已经全面了解了未花费交易输出模型,您准备好继续您的加密货币之旅并购买比特币了吗?
请查看我们的 Kraken 学习中心指南,详细了解如何购买 Bitcoin (BTC),并立即注册 Kraken 账户。