比特币输入输出以及未花费输出 UTXO

比特币钱包实质上并不包含任何比特币。相反,它包含了交易记录。当你向某人发送“比特币”时,实际上是在发送证明你已经进行了交易,这些交易现在构成了一个正面的账户余额。

这些记录被称为先前交易的输出。它们共同构成了你的账户余额。它们证明你有比特币可支配,并且允许任何人查看这些比特币的来源。你可以通过收集一些这些输出并将它们转换为交易输入来向另一个区块链地址发送比特币。接收它们的地址将视这些比特币为此交易的输出。你可以将剩余的比特币发送回你的地址作为未使用的交易输出(或 UTXO)。

请记住,输入和输出仅涉及交易。不存在“钱包输出”或“地址输出”这样的概念。这种记录交易的方法仅适用于比特币和类似的区块链(例如,以太坊并非如此)。此外,所有合法输出在技术上都是未使用的,因此它们被视为 UTXO。

输入、输出和 UTXO 要点

  • 比特币作为交易记录存在于账本重。
  • 交易输出是发送到你地址的比特币的“账单”。
  • 当你向某人发送比特币时,你的输出将成为交易输入。
  • 未使用的交易输出(UTXO)是证明你拥有正面账户余额的输出。

交易的工作原理

在准备一笔交易时,需要进行一些计算。原则上,你必须自己进行这些计算,但大多数钱包应用程序会自动处理这些计算。无论是谁进行计算,以下是需要完成的步骤:

  1. 规划 → 确定要发送的金额、发送方地址和接收方地址(发送方和接收方可以是同一个人 - 这是将小额 UTXO 合并成更大 UTXO 以清理钱包中多余“找零”的方法)。
  2. 输入 → 选择要从哪些 UTXO 中收集。只要所表示的 BTC 总额足够支付所需发送的金额,任意数量的正数 UTXO 都可以。所选的输出代表这笔交易的输入。
  3. 输出 → 创建至少两个交易输出:一个输出到接收方地址(可以有多个此类输出,甚至可发送给多个接收方),和一个将多余比特币(如果有的话)返回到你控制的钱包地址(通常是你发送方的同一个钱包)。所有这些输出的总和应该小于输入。为什么?
  4. 手续费 → 因为剩下的是交易费用 - 一个输出去矿工地址。如果这个输出太小,交易将无法被处理。此外,如果你未将多余硬币分配回你的地址,它将被加密矿工获取。

一笔交易的案例

Jamie 的钱包中有三个 UTXO:3、4 和 6 BTC(总共 13 BTC)。他想向 Sandy 发送 5 BTC。他不能简单地从总余额中扣除 5 BTC;他需要使用他的输出。

  1. Jamie 确定要发送 5 BTC 的地址。他选择总和至少为 5 BTC 的 UTXO 组合。
  2. 他可以选择 3 + 4、4 + 6 或 3 + 6。但 Jamie 想尽可能多地消除找零,所以他选择了 3 + 4 + 6。
  3. Sandy 喜欢找零,所以她希望输出分成两部分。她可以自己拆分 5 BTC 的输出,但由于她和 Jamie 是朋友,Jamie 安排他的交易将 2 BTC 和 3 BTC 输出到 Sandy 的地址。还剩下 8 BTC - 他将 7 BTC 输出回自己的地址,其余金额留给矿工(Jamie 很慷慨,手续费通常仅需几个聪)。
  4. 矿工看到与这笔交易相连的丰厚手续费,急切地将其包含在区块中。

UTXO 数据库

UTXO 数据库是所有代表当前可花费比特币的输出的数据库。当一个交易被验证时,其输入会与 UTXO 数据库中的输出进行比较。这需要做到避免双重花费。验证者必须确保一笔交易不会被花费两次(或者换句话说,确保只有未使用的交易输出作为输入)。

验证者不必查看 UTXO 数据库中输出之外的内容。不需要翻阅整个区块链以弄清给定 UTXO 的历史是否真实(尽管这是可能的)。只要一个输出出现在 UTXO 数据库中,这足以证明它是合法交易产生的输出。

每个 UTXO 的历史都可以一直追溯到其创世区块,防止有人凭空创造比特币。