比特币交易分为交易输入与交易输出两大部分,这也是比特币UTXO模型的核心构成,链上每一笔转账数据,本质就是输入与输出的重组与价值再分配。很多币圈新手会把比特币交易简单理解成账户之间的余额划转,但比特币没有传统意义的账户体系,不存在地址直接记录余额的机制,所有资产都以未花费交易输出的形式存放在链上,想要完成转账,就必须依靠输入、输出相互配合完成资产所有权的转移,理解这两个部分,就能看懂绝大多数链上交易的底层逻辑。

交易输入代表一笔交易当中的资金来源,每一个输入都必须指向历史交易里没有被花费过的输出,也就是UTXO,简单来说就是引用之前收到比特币的那笔交易记录,把这笔资产拿出来进行花费。输入当中会包含上一笔交易的编号、输出索引以及解锁脚本,解锁脚本主要是用户私钥生成的数字签名,用来证明用户拥有这笔资产的支配权限,网络节点会校验签名合法性,签名无效的交易会直接被网络拒绝。一笔交易可以同时拥有多个输入,当钱包需要转账的金额大于单个UTXO的数值时,钱包会自动聚合多笔历史UTXO合并作为输入,就像现实生活掏出多张现金凑齐付款总额,被当做输入使用过后的UTXO会直接标记为已花费,无法再次重复使用。

交易输出则定义资金的分配去向,输出会写明比特币数量和锁定脚本,锁定脚本绑定接收地址,规定谁才有资格花费这笔新生成的UTXO。一笔交易可以生成多组输出,最常见就是收款方输出和找零输出,因为UTXO不支持拆分,假如用户拿3BTC的UTXO只转账1BTC给他人,剩余2BTC不能直接留在原输入当中,必须生成一笔指向自己地址的找零输出返还给自己,很多新手看不懂链上交易出现自己地址,大多就是找零机制在起作用。输入的总金额减去全部输出总金额,差额部分就是给到矿工的交易手续费,如果交易没有设置找零输出,多余的资产会全部作为手续费交给矿工,日常使用钱包时,主流钱包都会自动生成找零输出,降低用户误操作风险。

输入与输出形成环环相扣的链式关系,每一笔交易的输入,都是过往交易生成的输出,新交易执行完成之后,旧输入对应的UTXO作废,输出变成等待被下一笔交易引用的新UTXO。从链上浏览器查询任意比特币交易,都能够清晰看到vin也就是输入列表,vout也就是输出列表,通过追踪输入可以回溯这笔资金最早的流转路径,这也是比特币链上可溯源的根本原因。对于普通交易者,不用手动编辑输入输出参数,钱包软件会自动完成UTXO挑选、签名、生成找零输出等全部工作,但了解这套机制,可以帮助看懂链上浏览器数据,识别异常交易,理解手续费高低和交易大小之间的关联,规避因为脚本、找零逻辑带来的转账踩坑。