Глоссарий / Транзакции и комиссии
UTXO
Другие названия: Unspent transaction output.
- Что такое UTXO?
- UTXO представляет собой один неизрасходованный фрагмент биткоина, находящийся на адресе: он создается целиком предыдущей транзакцией и может быть потрачен только полностью, никогда по частям.
В биткоине нет счетов и нет балансов. Вместо этого каждый узел отслеживает живой набор неизрасходованных выходов, а баланс вашего кошелька является просто суммой тех из них, для которых у него есть ключи. Трата уничтожает выбранные вами монеты и создает новые, поэтому перевод 100 000 сатоши может стоить дороже перевода 10 000 000.
Как это работает
Реестр представляет собой набор монет, а не таблицу с итогами по счетам. Каждый выход записывает две вещи: сумму в сатоши, хранимую как восьмибайтовое число, и скрипт блокировки, указывающий, что нужно предъявить, чтобы его разблокировать. Пока что-то его не потратит, этот выход остается в неизрасходованном наборе, который хранит каждый полный узел и обновляет блок за блоком.
Трата представляет собой уничтожение, за которым следует создание. Ваш кошелек выбирает целые выходы в качестве входов, доказывает, что может их разблокировать, и записывает новые выходы. Ничего не вычитается на месте, поэтому оплата 0,3 BTC из монеты в 1 BTC означает создание монеты в 0,3 для получателя и сдачи примерно в 0,7 для вас. Монета, с которой вы начали, навсегда исчезает из набора, и на месте одной записи оказываются две.
Bitcoin Core хранит весь набор в базе данных LevelDB под названием chainstate и кеширует часть его в памяти, при этом параметр -dbcache по умолчанию равен 1024 MiB, или 450 на машинах с менее чем 4 GiB оперативной памяти. Именно этот набор, а не архив блоков, узел проверяет, чтобы ответить на единственный вопрос, который важен при поступлении платежа: указывает ли этот вход на что-то, что еще существует? Обрезанный узел может отбросить сотни гигабайт старых блоков и по-прежнему полностью проверять, потому что неизрасходованный набор и есть состояние.
На краях есть две любопытные детали. 50 BTC, выплаченные в coinbase-транзакции генезис-блока 3 января 2009 года, никогда не были записаны в базу данных, поэтому их невозможно потратить. А в 2010 году, до того как BIP30 начали применять, две coinbase-транзакции дублировали более ранние и перезаписали их, стерев 100 BTC из набора; правило, запрещающее дублирующиеся идентификаторы транзакций, существует из-за этих блоков.
Только что добытые биткоины также приходят заблокированными. Выход coinbase нельзя потратить в течение 100 блоков, примерно 16 часов, и это собственная защита протокола от коротких реорганизаций цепи.
Почему это важно при покупке биткоина
Каждый вывод с биржи создает ровно одну монету в вашем кошельке, поэтому форму ваших запасов определяет то, как часто вы нажимаете эту кнопку. Покупка раз в неделю с выводом раз в неделю оставляет вам 52 монеты через год; те же покупки с выводом раз в квартал оставляют четыре. Swan и River обе строят регулярные покупки вокруг этого, запуская вывод при достижении порога, а не по каждому ордеру, и причина арифметическая: каждая из этих монет позже стоит около 68 виртуальных байт пространства блока, чтобы ее потратить.
Вторым следствием является происхождение. Монета не является анонимными наличными. Она несет историю транзакции, которая ее создала, и вывод с любой платформы, проверяющей личность, а это почти каждая биржа в этом обзоре, создает монету, задокументированную как ваша в базе данных комплаенса. Покупки через приложение Relai, которое доставляет прямо в ваш собственный кошелек, приходят с тем же документальным следом. Хранить такие монеты отдельно от монет, приобретенных в другом месте, можно только потому, что изначально это отдельные объекты.
В-третьих, восстановление кошелька не восстанавливает монеты. Сид-фраза восстанавливает ключи; затем программное обеспечение должно искать в цепи выходы, которые эти ключи могут разблокировать. Используйте необычный путь деривации или восстановите в программе, которая не проверяет ваш тип адреса, и монеты спокойно лежат в неизрасходованном наборе, пока ваш баланс показывает ноль. Хранение дескриптора выхода вместе со словами сид-фразы как раз и предотвращает такой день паники.
Отслеживание покупки 0,02 BTC через набор
Купите 0,02 BTC на Kraken и выведите их. Биржа объединяет вашу выплату с выплатами других клиентов, и один выход из этой партии стоимостью 2 000 000 сатоши заблокирован на ваш адрес. Теперь ваш кошелек хранит одну монету.
Два месяца спустя вы платите кому-то 500 000 сатоши, когда ставка для следующего блока составляет 5 sat/vB. Трата одного входа native SegWit и создание двух выходов занимает около 141 виртуального байта, поэтому комиссия составляет 705 сатоши. Происходят три вещи одновременно: монета в 2 000 000 сатоши покидает неизрасходованный набор, для получателя появляется монета в 500 000 сатоши, а на новом адресе, которым управляет ваш кошелек, появляется монета сдачи в 1 499 295 сатоши.
Ваш баланс изменился с 2 000 000 до 1 499 295 сатоши. Глобальный набор вырос на одну запись, и это тихая цена каждого платежа, который делает любой человек, и причина, по которой узлам нужна база данных, а не электронная таблица.
UTXO vs выход транзакции
Каждый UTXO является выходом транзакции; большинство выходов транзакций давно перестали быть UTXO. Выход представляет собой постоянную строку истории, которую можно прочитать и десятилетие спустя в блоке, который его включил. UTXO является правом на настоящее. В тот момент, когда кто-то тратит выход, он выпадает из неизрасходованного набора, оставаясь в цепи навсегда, и этот разрыв объясняет, почему узел может отбросить старые блоки, но никогда текущее состояние.
UTXO vs пыль
Пыль представляет собой UTXO с проблемой экономики, а не другой вид объекта. Принадлежность к неизрасходованному набору ничего не говорит о том, стоит ли перемещать монету. Выход в 600 сатоши так же действителен, как выход в 6 BTC, но при 30 sat/vB вход, который его тратит, стоит около 2040 сатоши, более чем в три раза больше того, что содержит. Поэтому кошелек может показывать баланс, который вы не можете полностью потратить.