Перейти к содержанию

Модель UTXO

Как Bitcoin представляет доступную для расходования стоимость через неизрасходованные выходы транзакций, проверяет расходы, создаёт сдачу и связывает выбор монет с комиссиями и конфиденциальностью.

Обновлено

Материал предназначен только для обучения и не является инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

Краткий ответ

Модель неизрасходованных выходов транзакций (UTXO) представляет доступную для расходования стоимость как отдельные выходы, а не как единый баланс, записанный за счётом. В Bitcoin вход обычной транзакции указывает на предыдущий выход с помощью идентификатора транзакции и индекса выхода. В таком выходе записаны сумма и блокирующий скрипт. Баланс в кошельке — это вычисленная сумма выходов, которые он способен потратить, а не поле баланса внутри одного адреса.

Выход расходуется целиком. Если выбранные входы превышают платёж и комиссию, транзакция должна явно создать выход сдачи: протокол не возвращает её автоматически. Одна транзакция может поглотить несколько существующих UTXO и создать несколько новых, у каждого из которых будут своя сумма и условия расходования.

Как это работает

Чтобы обычная, не coinbase, транзакция была действительной, каждый указанный выход должен существовать и оставаться неизрасходованным, каждый вход должен выполнять условия блокировки соответствующего выхода, а общая стоимость выходов не должна превышать общую стоимость входов. Разница доступна в качестве комиссии транзакции:

fee = sum(inputs) - sum(outputs)

При принятии блоков узел удаляет потраченные выходы из текущего набора UTXO и добавляет вновь созданные. История блоков по-прежнему нужна для проверки и восстановления этого состояния. Реорганизация цепочки может заменить недавние блоки, поэтому выходы вблизи её вершины могут снова стать неподтверждёнными или исчезнуть из принятой истории.

В рамках одной принятой истории цепочки конкретный выход можно израсходовать только один раз. Конфликтующие неподтверждённые транзакции могут претендовать на один выход, но допуск и замена в mempool относятся к политике узла, а не к правилам, разрешающим двойное расходование в цепочке. BIP 125 определяет сигнал и политику добровольной замены; получение неподтверждённой транзакции поэтому не является окончательным расчётом.

Место в блоке Bitcoin оценивается главным образом по весу транзакции и ставке комиссии, а не по переводимой сумме. BIP 141 определяет virtual size = ceil(weight / 4). Входы обычно добавляют больше данных, чем выходы, поэтому расходование множества мелких UTXO при одной ставке может стоить дороже одного крупного UTXO. Точный размер зависит от типов используемых скриптов и witness.

У транзакций, расходующих разные UTXO, раздельные зависимости по входам, что упрощает параллельную проверку и построение. Однако они не становятся автоматически независимыми в каждой реализации или задаче: две транзакции с одним выбранным выходом конфликтуют, а потомки зависят от неподтверждённых предков. Механизм выбора монет в кошельке должен согласовывать эти зависимости.

UTXO не обеспечивают анонимность. Объединение входов может указывать на общее управление, а шаблоны распознавания сдачи и повторное использование адресов — связывать действия. Это эвристики, а не криптографические доказательства, но консолидация способна раскрыть отношения, незаметные при раздельных расходах.

В отличие от модели счетов, модель UTXO явно показывает каждый доступный для расходования объект и путь его потребления. Системы счетов обычно обновляют общее состояние, например балансы и nonce. Ни одна модель не лучше во всех случаях: они по-разному решают задачи представления состояния, программируемости, параллельности и устройства кошелька.

Расчётный пример

Alice контролирует UTXO на 0.08 BTC, 0.12 BTC и 0.50 BTC. Чтобы заплатить Bob 0.15 BTC, кошелёк выбирает первые два входа на общую сумму 0.20 BTC и оценивает комиссию в 0.0002 BTC. Он создаёт следующие выходы:

  • Bob: 0.15 BTC
  • Сдача Alice: 0.0498 BTC

Расчёт: 0.20 - 0.15 - 0.0002 = 0.0498 BTC. После подтверждения выходы на 0.08 BTC и 0.12 BTC потрачены; выход Bob и сдача Alice становятся новыми UTXO; выход на 0.50 BTC остаётся нетронутым.

Если бы транзакция создала только выход Bob на 0.15 BTC, пропущенные 0.05 BTC стали бы комиссией, а не автоматическим возвратом. Кошелёк может выбрать другой набор входов, объединить несколько платежей или консолидировать мелкие выходы при более низких ставках. Здесь приходится сопоставлять текущие и будущие комиссии, надёжность подтверждения и конфиденциальность.

Риски и меры контроля

  • Риск комиссии: раздробленные UTXO увеличивают вес входов; перед трансляцией следует оценить подписанную транзакцию и её ставку.
  • Риск конфиденциальности: объединение входов и узнаваемая сдача могут связать адреса; новый адрес не гарантирует невозможность такой связи.
  • Риск подтверждения: конфликтующие транзакции, правила замены и реорганизации делают неподтверждённые поступления обратимыми.
  • Риск восстановления: цепочка хранит UTXO, а кошелёк хранит или выводит ключи и данные поиска, необходимые для их обнаружения и расходования; нужно резервировать все обязательные факторы восстановления.

Распространённые заблуждения

Адрес — это постоянный счёт

Адрес кодирует или представляет условия расходования. Кошелёк может контролировать выходы, отправленные на множество адресов получения и сдачи, поэтому один адрес не отражает всё его состояние.

Комиссия пропорциональна сумме платежа

Комиссия зависит прежде всего от веса транзакции и выбранной ставки. Крупный платёж с малым числом входов может быть компактнее и дешевле небольшого платежа, собранного из множества входов.

Протокол создаёт сдачу автоматически

Сдача — обычный выход, который кошелёк плательщика создаёт намеренно. Любая стоимость входов, не распределённая по выходам, доступна майнеру как комиссия.

Неподтверждённая означает рассчитанную

Mempool — предварительное представление узла, а не консенсусный реестр. Политики допуска, замены и удаления различаются; риск подтверждения снижается со временем, но не исчезает при трансляции.

Связанные темы

Источники

Навигация

Поиск по вики...