什么是比特币未花费交易输出 (UTXO)?

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