MSTR Cat

Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 1

Модель UTXO

Почему в Биткоине нет счетов и как реестр узнаёт, что уже потрачено

МатериалыВеб-браузер с доступом к обозревателю блоков (например, mempool.space)Публичный биткоин-адрес с несколькими UTXOБлокнот для записи идентификаторов и сумм выходов

Любопытство

  1. Что происходит с балансом, если нет счетов, которые нужно обновлять?
  2. Как нода проверяет, что вход ещё не был потрачен, не просматривая все предыдущие транзакции?
  3. Почему из-за того, что монета несёт всю свою историю, сложнее оставаться анонимным?

Исследование

  1. Биткоин не использует модель счетов, как банковские реестры и Ethereum. В этих системах балансы хранятся по адресам и обновляются на месте: при отправке средств сумма вычитается из одного баланса и добавляется к другому. В Биткоине такого хранилища нет. Вместо этого используется структура, похожая на наличные: ценность существует только в виде отдельных непотраченных единиц. Нет центрального реестра, отслеживающего «общую сумму Алисы»; есть лишь набор отдельных выходов, которые в данный момент доступны для траты.
  2. Эти единицы называются непотраченными выходами транзакций (Unspent Transaction Outputs, UTXO). Каждый UTXO содержит определённую сумму в сатоши и скрипт блокировки, который определяет, кто может его потратить. Транзакция расходует целые UTXO в качестве входов и создаёт новые UTXO в качестве выходов. Потраченные ею выходы покидают набор доступных для траты монет (сами транзакции остаются в истории цепочки), а новые выходы пополняют его. «Баланс» кошелька — это не хранимое число, а сумма всех UTXO, условия скриптов блокировки которых могут выполнить его приватные ключи.
  3. Такая структура упрощает проверку для нод сети. Поскольку каждый вход ссылается на конкретный ранее непотраченный выход, ноде достаточно проверить, что этот выход существует в текущем состоянии и ещё не был использован. Ей не нужно пересчитывать глобальные балансы или проверять сложную историю счетов. Каждая полная нода хранит «chainstate» — по сути, полный набор всех активных UTXO в каждый момент времени. Это обеспечивает быструю и детерминированную проверку попыток двойной траты.
  4. Сравнение с Ethereum подчёркивает ключевое проектное решение. Ethereum использует модель счетов, в которой у каждого адреса есть хранимый баланс и nonce (счётчик транзакций) для защиты от replay-атак. Обновление счёта требует глобального изменения дерева состояния. Биткоин создаёт новые выходы, а не редактирует балансы на месте, поэтому монеты несут свою историю, связывающую прошлые транзакции с текущими активами.
  5. Эта историческая связь имеет серьёзные последствия для приватности и взаимозаменяемости. Поскольку каждый вход указывает на предыдущий выход, аналитики могут отследить движение средств по цепочкам UTXO. Хотя существуют миксеры и другие методы, сама структура затрудняет полный разрыв связи между происхождением монеты и её текущим владельцем. Эту прозрачность часто приводят в спорах о том, действительно ли биткоины взаимозаменяемы, поскольку некоторые участники рынка могут предпочитать «чистые» монеты с менее отслеживаемой историей.
  6. Чтобы увидеть это на практике, откройте в кошельке, получившем несколько платежей, режим управления монетами (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 предложение о том, как отсутствие хранимых балансов меняет способ предотвращения двойной траты в Биткоине по сравнению с традиционными банками.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS