Глоссарий / Транзакции и комиссии
Индекс выхода
Другие названия: vout.
- Что такое индекс выхода?
- Индекс выхода представляет собой позицию одного выхода внутри транзакции, отсчитываемую от нуля, и это число после двоеточия, когда монета записана как txid:1.
Транзакция может оплатить сразу десятки получателей, поэтому один идентификатор никогда не говорит, какой из платежей ваш. Индекс хранится как четырехбайтовое число, что допускает значения до 4 294 967 295, гораздо больше выходов, чем может вместить любой блок. В паре с идентификатором транзакции он образует outpoint, постоянный адрес монеты внутри реестра.
Как это работает
Выходы упорядочены, и порядок таков, в каком их сериализовал создатель транзакции. Первый выход имеет индекс 0, второй имеет индекс 1, и нумерация идет до конца списка без пропусков. Индекс ничего не сообщает ни о сумме, ни о получателе, ни о назначении выхода; это позиция и ничего больше.
Каждый вход в каждой транзакции несет одно из этих чисел. Вход начинается со ссылки размером 36 байт: 32 байта идентификатора транзакции, за которыми следует четырехбайтовый индекс в порядке little-endian. Так трата указывает, какую монету она расходует, и поэтому узлы могут проверить трату, не просматривая всю цепочку.
Транзакция coinbase в каждом блоке намеренно нарушает эту схему. У нее нет монеты для траты, поэтому ее единственный вход указывает на идентификатор транзакции из 32 нулевых байт с индексом 0xffffffff, максимальным значением, которое может вместить поле. Все, что ссылается на такой outpoint, распознается как вновь выпущенные деньги, а не как перевод.
Позиция также раскрывает информацию, поэтому кошельки относятся к ней как к настройке конфиденциальности. Если бы сдача всегда оказывалась под индексом 1, любой наблюдатель мог бы мгновенно помечать выход сдачи в каждой транзакции. Bitcoin Core рандомизирует, где находится выход сдачи, а BIP69 предложил противоположный подход: сортировать входы и выходы в детерминированном лексикографическом порядке, чтобы из порядка нельзя было вывести вообще ничего.
Где это видно
Именно на экранах управления монетами большинство людей встречает это число, не зная его названия. Sparrow, Electrum и Bitcoin Core каждый показывает ваши монеты как идентификатор транзакции плюс индекс, потому что два выхода одной транзакции могут оба принадлежать вам, и различить их может только индекс.
Пакетная обработка на биржах делает число заметным. Когда Kraken или Binance выплачивают сотню выводов одной транзакцией, ваша монета находится на той позиции, которую ей дало программное обеспечение пакетной обработки, поэтому увидеть свои средства под индексом 87 из 120 выходов совершенно нормально и не означает, что что-то пошло не так.
Инструменты для разработчиков запрашивают его напрямую. Команда gettxout принимает идентификатор транзакции и индекс как отдельные аргументы, файлы PSBT ссылаются на входы по outpoint, а аппаратные кошельки показывают на экране "output 2 of 3", пока вы подтверждаете трату. Службы поддержки, которые просят «txid и vout», просят ту же пару значений.
Индекс выхода vs outpoint
Индекс выхода сам по себе бессмыслен, потому что индекс 0 существует в каждой когда-либо созданной транзакции. Outpoint представляет собой пару, идентификатор транзакции и индекс вместе, и он определяет ровно одну монету из всех монет, когда-либо существовавших. Это различие важно в тот момент, когда вы вставляете что-то в поле управления монетами или в обращение в поддержку: половина ссылки не является ссылкой.