比特币交易的核心结构分为两部分:交易输入(input)和交易输出(output)。输入负责说明这笔币从哪里来,输出负责说明这笔币将流向哪里。比特币并不存在传统银行账户那样的余额字段,钱包里看到的余额,本质上是多个尚未花费交易输出,也就是utxo的总和。一笔新交易,就是把旧utxo作为输入消耗掉,再生成新的utxo交给收款方或留给自己。

交易输入并不是简单写一个付款地址,而是引用此前某笔交易中的特定输出。它通常包含上一笔交易的交易哈希、输出编号,以及用于证明支付权限的签名数据。在传统交易中,这部分证明信息主要放在scriptSig里;采用隔离见证后,签名和公钥等内容还可能放入witness字段。节点会根据这些数据验证签名,确认付款者确实掌握对应私钥,并检查被引用的UTXO没有被重复花费。输入越多,交易体积通常越大,所需支付的网络手续费也可能随之上升。

交易输出则承担分配比特币的功能,核心由金额和锁定脚本组成。金额以聪为单位记录,1枚比特币等于1亿聪;锁定脚本规定未来满足什么条件,才能花费这笔UTXO。日常转账中,收款地址会被钱包转换成相应脚本,地址本身并不是链上直接保存的账户。常见的隔离见证地址,背后对应的是见证程序,节点依据脚本规则验证签名、公钥或更复杂的多签条件。一个交易可以有多个输出,因此既能向多个地址付款,也能同时生成收款输出和找零输出。
找零机制是理解比特币交易的关键细节。假设钱包中只有一个价值0.1 BTC的UTXO,而用户需要支付0.06 BTC,钱包通常会创建两个输出:一个发送给对方的0.06 BTC,另一个返还给自己的0.039 BTC,剩余的0.001 BTC作为矿工手续费。手续费并不是单独写进某个费用栏,而是输入总额减去输出总额,即输入金额-输出金额。也正因为找零需要生成新的输出,用户看到的每次付款往往不只是一个收款地址,还会出现一个由钱包自动管理的找零地址。

一笔普通比特币交易还会带有版本号、输入数量、输出数量和锁定时间等字段,但交易输入与交易输出仍是最核心的两大组成部分。矿工打包交易时,会检查输入是否有效、签名是否通过、输出金额是否超出输入金额,并将确认后的UTXO状态写入区块链。区块中的Coinbase交易属于特殊情况,它没有普通意义上引用旧UTXO的输入,却可以通过区块奖励和交易手续费生成输出。弄清输入、输出、找零与手续费之间的关系,基本就掌握了比特币转账运行逻辑的骨架。