Что такое UTXO?
UTXO — непотраченные выходы транзакций, из которых складывается баланс Bitcoin-кошелька. В этом разделе объясняется, как транзакции тратят и создают UTXO, как устроены сдача и комиссия, как размер входов влияет на стоимость и почему комбинирование входов раскрывает информацию о приватности.
UTXO, сокращение от unspent transaction output (непотраченный выход транзакции), — это часть BTC, созданная предыдущей транзакцией, которая ещё не была потрачена. Bitcoin не хранит балансы счетов. Баланс вашего кошелька — это просто сумма всех UTXO, которыми вы можете распоряжаться с помощью своих ключей, а каждый платёж тратит некоторые из них целиком и создаёт новые.
Монеты как кусочки, а не общая сумма
Представьте UTXO как банкноты в кошельке, а не как число на банковском счёте. Если у вас есть купюра 0,05 BTC и купюра 0,012 BTC, ваш баланс составляет 0,062 BTC, но существует он в виде двух отдельных частей.
Каждая транзакция делает две вещи:
- Тратит входы. Она ссылается на существующие UTXO и с помощью подписи доказывает, что вы вправе их тратить. Каждый вход тратится полностью; потратить половину одного нельзя.
- Создаёт выходы. Она создаёт новые UTXO, привязанные к адресу получателя и почти всегда один, возвращаемый вам как сдача.
Как только выход использован как вход, он исчезает. Сети нужно помнить только непотраченные выходы — поэтому эта совокупность называется набором UTXO (UTXO set). Каждый полный узел хранит копию и проверяет новые транзакции по ней, благодаря чему Bitcoin не допускает двойной траты одной и той же монеты.
Пример со сдачей и комиссией
В вашем кошельке три UTXO: 0,05 BTC, 0,012 BTC и 0,0031 BTC. Вы хотите заплатить 0,06 BTC.
Рисунок: разобранный пример в виде транзакции. Входы тратятся полностью; разница, которая не попадает в выходы, и есть комиссия.
- Кошелёк выбирает входы. Ни один UTXO не покрывает 0,06 BTC, поэтому он выбирает 0,05 + 0,012 = 0,062 BTC. Часть в 0,0031 BTC не затрагивается.
- Он создаёт выход для платежа. 0,06 BTC отправляются получателю.
- Он рассчитывает комиссию. У этой транзакции два входа и два выхода, её размер составляет около 209 виртуальных байт. При условной ставке 5 сатоши за виртуальный байт комиссия равна 1 045 сатоши, или 0,00001045 BTC.
- Остаток возвращается как сдача. 0,062 − 0,06 − 0,00001045 = 0,00198955 BTC отправляются на новый адрес, которым управляет кошелёк.
В транзакции Bitcoin нет отдельного поля для комиссии. Комиссия — это сумма входов минус сумма выходов, и её получают майнеры. Если бы кошелёк не создал выход для сдачи, вся разница в 0,002 BTC досталась бы майнеру как комиссия. Хорошо написанные кошельки этого не допускают, но именно поэтому ручное составление транзакций рискованно.
Почему UTXO влияют на комиссии
Комиссии в Bitcoin зависят от того, сколько данных занимает транзакция, а не от того, сколько стоимости она переводит. Каждый вход добавляет данные, поэтому платёж, покрытый 20 мелкими UTXO, обходится гораздо дороже, чем такая же сумма, покрытая одним крупным UTXO.
Это имеет практические последствия:
- Множество мелких поступлений становится дорогим для траты. Кошельки, которые получают много мелких платежей, например выплаты от майнинга, могут столкнуться с большой комиссией, когда монеты наконец будут перемещены.
- Объединение дешевле всего, когда сеть спокойна. Некоторые пользователи объединяют много мелких UTXO в один в периоды низких комиссий, чтобы в будущих платежах требовалось меньше входов.
- Пыль может стать практически непотратимой. UTXO стоимостью меньше комиссии, необходимой для его траты, не имеет практической пользы. Политика ретрансляции Bitcoin Core по умолчанию также считает очень мелкие выходы «пылью» и не ретранслирует транзакции, которые их создают; при настройках по умолчанию эта граница составляет около 546 сатоши для старых типов адресов и 294 сатоши для нативных адресов SegWit.
Наше руководство по комиссиям за транзакции в блокчейне объясняет, как сама ставка комиссии определяется. Тип адреса также влияет на то, сколько данных занимает каждый вход, об этом рассказано в статье Типы адресов Bitcoin.
UTXO и приватность
Объединение входов раскрывает информацию. Когда транзакция тратит два UTXO одновременно, любой, кто смотрит на блокчейн, может обоснованно предположить, что оба принадлежали одному владельцу. Белая книга Bitcoin признавала это в разделе о приватности: транзакции с несколькими входами показывают, что их входы принадлежали одному и тому же человеку.
Выходы сдачи тоже раскрывают информацию, поскольку часто можно определить, какой выход является платежом, а какой возвращается отправителю. Кошельки используют новые адреса для сдачи и более разумный выбор монет, чтобы уменьшить эти подсказки, но полностью устранить их не могут.
Выбор монет для траты
Большинство кошельков выбирают UTXO автоматически при отправке платежа, обычно чтобы снизить комиссию. Некоторые предлагают «контроль монет» (coin control), который позволяет точно выбрать, какие UTXO тратить. Это помогает двумя способами: можно избежать объединения монет из разных источников, например вывода с биржи и приватного платежа, что связало бы их публично, а также выбрать входы, которые дают самую маленькую транзакцию, когда комиссии высоки. Кошельки с контролем монет обычно показывают размер каждого UTXO и его происхождение.
Пыль и консолидация
Очень маленькие UTXO могут стоить дороже, чем сами по себе, поскольку каждый вход увеличивает размер транзакции и, следовательно, её комиссию. Такие выходы часто называют пылью (dust). Кошелёк, полный мелких UTXO, например от множества небольших платежей или выплат за майнинг, может стать дорогим в использовании при росте комиссий. Распространённая практика — консолидация: когда комиссии низкие, отправить несколько мелких UTXO самому себе одной транзакцией, создав один более крупный, который дешевле потратить позже. Консолидация имеет цену для приватности, так как связывает эти монеты в блокчейне, поэтому её лучше проводить с учётом этого компромисса.
UTXO и модель счетов
Не каждый блокчейн работает так. Ethereum и многие сети, построенные по его образцу, используют модель счетов: у каждого адреса есть баланс, и транзакция вычитает из одного баланса и прибавляет к другому, примерно как в банковской книге учёта.
| Модель UTXO (Bitcoin) | Модель счетов (Ethereum) | |
|---|---|---|
| Что хранится | Непотраченные выходы | Баланс на каждом адресе |
| Как вы платите | Тратятся целые выходы, сдача возвращается | Сумма вычитается из вашего баланса |
| От чего зависит комиссия | От размера данных, включая число входов | От использованных вычислений (газа) |
| Приватность | Новый адрес для каждого платежа — естественная практика | Один адрес часто используется повторно |
Наше руководство о том, что такое криптотранзакция, подробнее сравнивает обе модели, а статья «Что такое Bitcoin» помещает UTXO в контекст всей сети.
Эта статья носит образовательный характер и не является финансовой, инвестиционной, юридической или налоговой консультацией. Цифровые активы подвержены сильным колебаниям цены, и вы можете потерять вложенную сумму.
Источники
- Bitcoin: A Peer-to-Peer Electronic Cash System (разделы 9 «Combining and Splitting Value» и 10 «Privacy») — Сатоши Накамото, октябрь 2008
- Исходный код Bitcoin Core, policy.h (стандартная комиссия ретрансляции для пыли) — Bitcoin Core, GitHub
- BIP 141: Segregated Witness (виртуальный размер и скидка на данные свидетелей) — Bitcoin Improvement Proposals, GitHub