Глоссарий / Транзакции и комиссии
Выход транзакции
Другие названия: Выход, TxOut.
- Что такое выход транзакции?
- Выход транзакции представляет собой сумму в биткоинах плюс условие блокировки, которое определяет, кто сможет потратить ее следующим, и это единственное место, где биткоин действительно существует.
Его образуют два поля: сумма в восемь байт в сатоши и скрипт, задающий условие ее расходования. Адрес, который вы вставляете в форму вывода, есть не что иное, как этот скрипт в удобной для человека кодировке, поэтому выбор bech32 вместо более старого формата на деле есть выбор блокировки, за которой будут лежать ваши биткоины. Создать выход дешево, а потратить его позже дорого.
Как это работает
Выход представляет собой небольшую запись, в которой нигде не назван владелец.
Поле value занимает 8 байт и содержит целое число сатоши. Шестидесяти четырех бит с избытком хватает для валюты с пределом около 2 100 000 000 000 000 сатоши, и именно использование целых чисел вместо десятичных дробей избавляет учет биткоина от ошибок округления. Затем идут префикс длины и скрипт блокировки, называемый в исходном коде scriptPubKey, то есть короткая программа, которую должен выполнить тот, кто потратит выход в будущем.
Разные скрипты дают разный размер и разную стоимость. Блокировка pay-to-public-key-hash занимает 25 байт скрипта, так что весь выход занимает 34 байта. Блокировка нативного SegWit занимает 22 байта, так что выход занимает 31 байт. Блокировка Taproot занимает 34 байта скрипта и 43 байта в целом. Знакомые вам кодировки адресов прямо соответствуют этим блокировкам: начальный 1, bc1q, bc1p.
Слово «блокировка» точнее слова «владелец». Скрипт не фиксирует человека. Он фиксирует проверку, и потратить монету может любой, кто эту проверку пройдет, и именно поэтому приватный ключ нужно защищать, а не считать простым логином.
Важны еще два свойства. Выходы нумеруются по позиции, начиная с нуля, поэтому второй выход транзакции имеет индекс 1. А выход ниже порога пыли, примерно 546 сатоши для устаревшей блокировки и 294 для нативной SegWit, по умолчанию не будет передан, потому что потратить его стоило бы дороже, чем он содержит.
Где это видно
Выходы находятся в правом столбце любой страницы обозревателя блоков, и при расходовании их почти всегда два.
Один из них является платежом, а другой сдачей, и ничто в транзакции не говорит, какой из них какой. Это предположение служит сырьем для анализа блокчейна, и поэтому кошелек, который повторно использует адрес сдачи, отследить легче, чем тот, который этого не делает.
Выходы представляют собой также память сети. Каждый полный узел хранит базу данных всех неистраченных выходов, потому что именно с этим набором нужно сверять каждую новую транзакцию. Созданный вами выход остается в этой базе данных на десятках тысяч машин, пока кто-нибудь его не потратит. Поэтому создание множества крошечных выходов не только дорого, но и в некоторой степени недружелюбно по отношению к сети, а их объединение является скорее любезностью, чем экономией.
Единственное исключение намеренно невозможно потратить. Выход OP_RETURN несет данные и никогда не может быть погашен, поэтому узлы сразу удаляют его из набора неистраченных выходов, а не хранят вечно.
Для тех, кто покупает биткоин, практическая версия коротка. Выводите средства на формат адреса, за который будущий вы будете благодарны, предпочитайте несколько крупных выводов множеству мелких и помните, что баланс, который показывает ваш кошелек, есть всего лишь сумма выходов, заблокированных сейчас на ключах, которыми он управляет.
Выход транзакции vs UTXO
Выход представляет собой запись; UTXO представляет собой состояние, которое эта запись имеет только до тех пор, пока никто ее не потратил. Каждый когда-либо созданный выход навсегда записан в блок и может быть прочитан там спустя годы, но в момент, когда более поздняя транзакция ссылается на него, он перестает быть неистраченным и покидает набор, который отслеживают узлы. Таким образом, каждый UTXO является выходом, тогда как большинство выходов уже не являются UTXO. У этого различения есть практическая сторона: баланс вашего кошелька есть сумма ваших UTXO, а не сумма всего, что когда-либо было выплачено на ваши адреса, и обозреватель блоков, показывающий большой общий объем полученного на адрес, описывает историю, а не деньги, которые у вас еще есть.