
Transaction Input 是什么:理解 BSV 交易输入与 UTXO 引用
Transaction input 是 BSV 交易的资金来源,它引用上一笔交易中的某个未花费 output,并提供解锁数据。理解 input 有助于掌握 UTXO 模型、outpoint、双花冲突、手续费计算和交易调试。
林知衡
technical_editor
在 BSV 的 UTXO 模型中,transaction input(交易输入)是当前交易的资金来源。它不会表示“从某个账户扣款”,而是明确引用上一笔交易中某个尚未被花费的 output,并提供解锁该 output 所需的数据。
理解 input,是理解 BSV 交易结构、手续费、UTXO 选择、双花冲突和交易调试的基础。
Transaction input 是什么
一句话概括:
Transaction input 是当前交易对上一笔未花费交易输出(UTXO)的引用。
BSV 不是账户余额模型。一笔交易不能简单写成:
- 从 Alice 扣 10
- 给 Bob 加 10
在 UTXO 模型中,资金存在于一组未花费交易输出里。要发起一笔新交易,就必须说明:这笔交易要花掉哪一笔旧 output。
这个“引用旧 output”的部分,就是 input。
除特殊的 coinbase 交易外,普通交易都必须通过 input 引用已有 UTXO。没有 input,交易就没有资金来源。
交易为什么需要 input
在 UTXO 模型里,钱不是记录在账户余额字段中,而是分散在多个未花费交易输出中。
当你要花钱时,需要做两件事:
- 指出要花哪一个旧 output;
- 证明你有权花它。
因此,一个 input 通常包含以下信息:
- 上一笔交易的 TXID;
- 上一笔交易中的 output index;
- 解锁该 output 所需的脚本或签名数据;
- 一些序列号等控制字段。
组合起来看,input 的含义就是:
我要花掉某笔旧交易里的第 N 个 output,并提供对应的解锁材料。
outpoint:input 最关键的引用
input 中最核心的部分是 outpoint。
outpoint 由两部分组成:
假设上一笔交易的 TXID 是 abc...123,其中有两个 output:
如果当前交易想花 Alice 的 100 satoshis,就必须引用:
只写 TXID 不够。因为一笔交易可以包含多个 output,必须通过 output index 指定具体要花哪一个 output。
input 不等于付款人
新手常把 input 理解成“付款人”。这个理解并不准确。
input 是资金来源,不是付款人身份。
它引用的是旧 UTXO。谁能花这个 UTXO,取决于旧 output 的 locking script,以及当前 input 提供的 unlocking data 是否匹配。
例如,在常见的 P2PKH 场景中,旧 output 可能锁定到某个公钥哈希。当前 input 要花它,就需要提供:
- 对应的公钥;
- 有效签名。
网络验证时会检查:
- 公钥哈希是否与旧 output 的锁定条件匹配;
- 签名是否有效。
只有验证通过,这个旧 UTXO 才会被承认为已被合法花费。
一个交易可以有多个 input
一笔交易不一定只引用一个 UTXO。很多交易会有多个 input,这通常意味着它们在合并多个旧 UTXO。
假设钱包里有三个 UTXO:
现在要支付 100 satoshis,单个 UTXO 不够。钱包可以选择多个 UTXO 作为 inputs:
input 总额为 120 satoshis。交易可以再创建 outputs,例如:
因此,多 input 交易不是异常。它只是说明这笔交易花费了多个 UTXO。
input 的解锁数据
input 不只是引用旧 output,还要提供“我有权花它”的证据。
在常见 P2PKH 场景里,input 会提供:
- 签名;
- 公钥。
而旧 output 的 locking script 会检查:
- 公钥哈希是否匹配;
- 签名是否有效。
这就是 input 与 Script 的关系:
input 提供解锁材料,旧 output 提供锁定条件。
只有两者匹配,交易验证才能通过。
input 与双花
同一个 UTXO 只能被花一次。
如果两笔交易都引用同一个 outpoint,它们就是冲突交易。例如:
这两笔交易不能同时有效。网络最终只能接受其中一笔进入有效链。
这就是双花问题在交易结构层面的表现:多个交易试图花费同一个 UTXO。
在 BSV 开发中的意义
开发 BSV 应用时,input 会影响许多工程问题,包括:
- 钱包如何选择 UTXO;
- 手续费如何计算;
- 交易体积有多大;
- 是否需要合并小额 UTXO;
- 是否会暴露地址关联;
- 交易是否依赖未确认祖先交易;
- 签名是否匹配旧 output。
SDK 和钱包通常可以自动选择 input,但开发者不能永远把 input 当作黑盒。
当交易构造或广播失败时,常见原因包括:
- input 引用的 outpoint 错误;
- UTXO 已经被花费;
- output index 写错;
- 签名与旧 output 的锁定条件不匹配;
- 交易依赖的未确认祖先交易存在问题。
理解 input 的结构,有助于定位这些问题。
新手常见误解
关于 transaction input,以下几点尤其容易混淆:
- input 不是付款人账户,而是旧 UTXO 的引用;
- 只写上一笔 TXID 不够,还必须指定 output index;
- input 本身不是简单填写金额,验证时需要知道上一笔 output 的金额和脚本;
- 多 input 交易不是异常,它只是花费了多个 UTXO;
- 同一个 UTXO 被两笔交易引用,会形成冲突;
- input 提供的签名必须匹配旧 output 的锁定条件。
小结
Transaction input 的本质,是当前交易对旧 UTXO 的引用和解锁。
它回答了两个关键问题:
- 这笔交易的钱从哪里来?
- 当前交易是否有权花这笔钱?
在 BSV 中,理解 input 不只是理解交易格式的一部分,也直接关系到钱包设计、交易构造、手续费估算、UTXO 管理和故障排查。
参考链接
推荐文章
区块链2026年5月26日
一个地址可以有很多 UTXO:理解 BSV 中的地址、余额与交易构造
在 BSV 的 UTXO 模型中,一个地址不是账户,也不是单一余额槽。同一个地址可以关联多个 UTXO,钱包余额只是这些 UTXO 的汇总。理解这一点,有助于正确处理交易构造、手续费、UTXO 碎片化和隐私问题。
区块链2026年5月26日
在 BSV 中,花钱就是消耗旧 UTXO、创造新 UTXO
在 BSV 中,花钱不是修改余额,而是消耗旧 UTXO、创建新 UTXO。理解这一点,有助于掌握付款、找零、交易链以及 token 和应用状态转移的基本逻辑。
区块链2026年5月26日
什么是 UTXO:理解 BSV 交易模型的基础
UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。