术语表 /交易与手续费
交易输出
又称输出、TxOut、Output。
- 交易输出是什么?
- 交易输出是一笔比特币金额,加上决定下一步由谁来花费它的锁定条件,也是比特币真正存在的唯一位置。
一个输出由两个字段构成:以聪为单位的8字节金额,以及一段说明花费条件的脚本。您粘贴到提币表单中的地址,不过是这段脚本的一种便于人阅读的编码,因此选择 bech32 而不是较旧的格式,实际上是在选择您的比特币将处于怎样的锁定条件之后。输出创建起来成本低,日后解锁的成本高。
运作方式
输出是一条很小的记录,其中任何地方都没有写明所有者。
金额字段为8字节,存放整数个聪。比特币总量上限约为2,100,000,000,000,000聪,64位已绰绰有余,而使用整数而不是小数,正是比特币记账没有舍入误差的原因。随后是一个长度前缀和锁定脚本(源代码中称为 scriptPubKey),这是一段简短的程序,日后的花费者必须满足它。
不同的脚本产生不同的大小和不同的成本。pay-to-public-key-hash 锁定脚本为25字节,整个输出为34字节。原生 SegWit 锁定脚本为22字节,整个输出为31字节。Taproot 锁定脚本为34字节,整个输出共43字节。您熟悉的地址编码与这些锁定方式直接对应:以1开头的地址、bc1q 地址和 bc1p 地址。
“锁定”一词比“所有者”更准确。脚本并不记录某个人,它记录的是一项检验,任何能通过检验的人都可以花费这笔比特币,这正是私钥必须妥善保护、而不只是保护一个登录账号的原因。
还有两个属性值得注意。输出按位置编号,从零开始,因此一笔交易的第二个输出的索引是1。此外,低于粉尘阈值的输出默认不会被转发,传统锁定方式约为546聪,原生 SegWit 锁定方式约为294聪,因为花费它的成本会高于它所含的金额。
在哪里会遇到它
输出是每个区块浏览器页面的右侧一栏,一笔花费交易中几乎总有两个输出。
一个是付款,另一个是找零,交易中没有任何信息说明哪个是哪个。这种猜测正是区块链分析的原材料,也是重复使用找零地址的钱包比不重复使用的钱包更容易被追踪的原因。
输出也是网络的记忆。每个全节点都保存着所有未花费输出的数据库,因为新交易恰恰要对照这个集合进行检查。您创建的输出会存放在数以万计的机器上的这个数据库中,直到有人花费它。因此,创建大量微小输出不仅成本高,也略显不利于他人,而将它们合并既是一种礼让,也是一种节省。
唯一的例外是刻意设为无法花费的输出。OP_RETURN 输出携带数据,永远无法被赎回,因此节点会立即将其从未花费集合中剔除,而不是永久存储。
对于购买比特币的人来说,实用的做法很简单。提币到日后会让您庆幸的地址格式,宁可少次大额提币,也不要多次小额提币,并记住钱包显示的余额,只是当前锁定在其所控制密钥上的各个输出之和。
交易输出 vs UTXO
输出是一条记录;UTXO 是该记录仅在无人花费时才具有的状态。每个已创建的输出都被永久写入区块,多年后仍可在其中读取,但一旦后续交易引用了它,它就不再是未花费状态,并离开节点所跟踪的集合。因此,每个 UTXO 都是输出,而大多数输出已不再是 UTXO。这一区别有其实际意义:您的钱包余额是您的 UTXO 之和,而不是曾经支付到您各个地址的全部金额之和,区块浏览器上某个地址显示的巨额累计收款描述的是历史,而不是您仍然持有的资金。