跳转到正文
buybitcoinsmart

术语表 /交易与手续费

输出索引

又称 vout。

输出索引是什么?
输出索引是一笔交易中某个输出所在的位置,从零开始计数,也就是币被写成 txid:1时冒号后面的那个数字。

一笔交易可以同时向数十个收款方付款,因此仅凭交易标识符无法判断哪一笔付款属于您。索引以四字节数字存储,取值最大可达4,294,967,295,远多于任何区块所能容纳的输出数量。它与交易 ID 配对后构成 outpoint,即一枚币在账本中的永久地址。

运作方式

输出是有顺序的,顺序即交易创建者序列化时的顺序。第一个输出的索引为0,第二个输出的索引为1,编号一直延续到列表末尾,中间没有空缺。索引不描述金额、收款方或输出的用途,它只是一个位置,仅此而已。

每笔交易中的每个输入都带有这样一个数字。输入以36字节的引用开头:32字节的交易 ID,后接四字节的小端序索引。花费交易正是借此说明自己要消耗哪一枚币,节点也因此无需搜索整条链就能核验一笔花费。

每个区块的 coinbase 交易有意打破了这一规律。由于没有可花费的币,它唯一的输入指向由32个零字节组成的交易 ID,索引设为0xffffffff,即该字段所能容纳的最大值。任何引用该 outpoint 的交易都会被识别为新发行的货币,而不是转账。

位置还会泄露信息,因此钱包将其视为一项隐私设置。如果找零总是出现在索引1,任何观察者都能立即标记出每笔交易的找零输出。Bitcoin Core 会随机决定找零输出所在的位置,而 BIP69 提出了相反的做法:将输入和输出按确定性的字典序排列,使人们完全无法从排列顺序中推断任何信息。

在哪里会遇到它

大多数人是在币控制界面中遇到这个数字的,却不知道它叫什么。Sparrow、Electrum 和 Bitcoin Core 都把您的币列为交易 ID 加索引,因为同一笔交易的两个输出可能都属于您,只有索引才能把它们区分开。

交易所的批量处理会让这个数字变得显眼。当 Kraken 或 Binance 在一笔交易中支付一百笔提币时,您的币会位于批量处理软件为其分配的任意位置,因此看到您的资金位于120个输出中的索引87是完全正常的,并不表示出了任何问题。

开发者工具会直接要求提供它。gettxout 命令将交易 ID 和索引作为两个单独的参数,PSBT 文件通过 outpoint 引用输入,硬件钱包在您批准花费时会在屏幕上显示 "output 2 of 3"。客服人员索要"the txid and the vout",要的就是这同一对数值。

输出索引 vs outpoint

输出索引本身没有意义,因为索引0存在于有史以来的每一笔交易中。outpoint 是交易 ID 和索引合在一起的一对数值,能在所有曾经存在的币中唯一确定一枚币。当您把内容粘贴到币控制字段或客服工单时,这一区别就很重要:只有一半的引用不是引用。

请勿混淆

常见问题

区块浏览器中的 vout 是什么意思?

它就是输出索引,即输出在其所属交易中的位置,从零开始。区块浏览器和 RPC 输出使用 vout 作为字段名,钱包则常把同一个东西称为输出编号。

输出0是否总是付款,输出1是否总是找零?

不是,而且这样假设属于已知的隐私弱点。Bitcoin Core 会随机决定找零输出的位置,正是为了让观察者无法从排列顺序中读出意图。

相关术语

交易与手续费中的更多术语

阅读本页英文版