Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 1
Модель UTXO
Почему в Биткоине нет счетов и как реестр узнаёт, что уже потрачено
МатериалыВеб-браузер с доступом к обозревателю блоков (например, mempool.space)Публичный биткоин-адрес с несколькими UTXOБлокнот для записи идентификаторов и сумм выходов
Любопытство
- Что происходит с балансом, если нет счетов, которые нужно обновлять?
- Как нода проверяет, что вход ещё не был потрачен, не просматривая все предыдущие транзакции?
- Почему из-за того, что монета несёт всю свою историю, сложнее оставаться анонимным?
Исследование
- Биткоин не использует модель счетов, как банковские реестры и Ethereum. В этих системах балансы хранятся по адресам и обновляются на месте: при отправке средств сумма вычитается из одного баланса и добавляется к другому. В Биткоине такого хранилища нет. Вместо этого используется структура, похожая на наличные: ценность существует только в виде отдельных непотраченных единиц. Нет центрального реестра, отслеживающего «общую сумму Алисы»; есть лишь набор отдельных выходов, которые в данный момент доступны для траты.
- Эти единицы называются непотраченными выходами транзакций (Unspent Transaction Outputs, UTXO). Каждый UTXO содержит определённую сумму в сатоши и скрипт блокировки, который определяет, кто может его потратить. Транзакция расходует целые UTXO в качестве входов и создаёт новые UTXO в качестве выходов. Потраченные ею выходы покидают набор доступных для траты монет (сами транзакции остаются в истории цепочки), а новые выходы пополняют его. «Баланс» кошелька — это не хранимое число, а сумма всех UTXO, условия скриптов блокировки которых могут выполнить его приватные ключи.
- Такая структура упрощает проверку для нод сети. Поскольку каждый вход ссылается на конкретный ранее непотраченный выход, ноде достаточно проверить, что этот выход существует в текущем состоянии и ещё не был использован. Ей не нужно пересчитывать глобальные балансы или проверять сложную историю счетов. Каждая полная нода хранит «chainstate» — по сути, полный набор всех активных UTXO в каждый момент времени. Это обеспечивает быструю и детерминированную проверку попыток двойной траты.
- Сравнение с Ethereum подчёркивает ключевое проектное решение. Ethereum использует модель счетов, в которой у каждого адреса есть хранимый баланс и nonce (счётчик транзакций) для защиты от replay-атак. Обновление счёта требует глобального изменения дерева состояния. Биткоин создаёт новые выходы, а не редактирует балансы на месте, поэтому монеты несут свою историю, связывающую прошлые транзакции с текущими активами.
- Эта историческая связь имеет серьёзные последствия для приватности и взаимозаменяемости. Поскольку каждый вход указывает на предыдущий выход, аналитики могут отследить движение средств по цепочкам UTXO. Хотя существуют миксеры и другие методы, сама структура затрудняет полный разрыв связи между происхождением монеты и её текущим владельцем. Эту прозрачность часто приводят в спорах о том, действительно ли биткоины взаимозаменяемы, поскольку некоторые участники рынка могут предпочитать «чистые» монеты с менее отслеживаемой историей.
- Чтобы увидеть это на практике, откройте в кошельке, получившем несколько платежей, режим управления монетами (coin control, или «UTXO»): в нём каждый выход указан отдельно, со своей суммой и идентификатором транзакции. В обозревателе блоков страница адреса показывает то же самое — список полученных выходов, часть из которых потрачена, а часть нет. Именно этот список отдельных выходов и есть подлинное ончейн-представление владения; «баланс», отображаемый в интерфейсе, — всего лишь расчёт на стороне клиента, выполненный на основе этого набора.
Ключевые факты
- В Биткоине нет счетов или балансов, хранящихся в блокчейне; владение состоит исключительно из непотраченных выходов транзакций (UTXO).
- Каждый UTXO содержит сумму в сатоши и скрипт блокировки, задающий условия, необходимые для его траты.
- Транзакция расходует целые UTXO в качестве входов и создаёт новые UTXO в качестве выходов; потраченные ею выходы покидают набор UTXO.
- Каждая полная нода хранит «chainstate» — полный набор всех непотраченных на данный момент выходов, используемый для проверки.
- Отображаемый в кошельке баланс — это локальный расчёт, суммирующий значения UTXO, которые контролируют его приватные ключи, а не значение, хранящееся в блокчейне.
- В отличие от модели счетов Ethereum с nonce и изменяемыми балансами, модель UTXO в Биткоине рассматривает монеты как отдельные единицы, несущие свою историю, которые заменяются, а не обновляются.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 различных цифровых активов или валют. Для каждого укажите, использует ли он систему балансов на основе счетов (как Ethereum) или систему выходов на основе UTXO (как Биткоин).
6СгруппироватьРаспределите эти 9 по 6 категориям в зависимости от того, как они работают с состоянием: изменяемые балансы, неизменяемые выходы, гибридные модели, централизованные реестры или другое.
3Выделить главноеСведите 6 групп к 3 фундаментальным причинам, по которым протокол может выбрать для структуры своего реестра UTXO, а не счета.
1КристаллизоватьНапишите 1 предложение о том, как отсутствие хранимых балансов меняет способ предотвращения двойной траты в Биткоине по сравнению с традиционными банками.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.