Найти в Дзене

Что такое UTXO в криптовалюте

Оглавление

Неизрасходованные выходы транзакций (Unspent Transaction Outputs, или UTXO) — это разрозненные части Биткоина, полученные на адрес кошелька, но еще не потраченные.

Модель UTXO в Биткоине и проблема пыли | #BTC_2TheMoon
Модель UTXO в Биткоине и проблема пыли | #BTC_2TheMoon

Чтобы понять смысл этого, для наглядности можно провести аналогию с фиатными деньгами. Представим, что мы зашли в супермаркет и хотим купить одно яблоко, скажем, за 10 рублей, но у нас есть только купюра в 50 рублей.

Естественно, мы отдадим ее кассиру, который «превратит» 50 рублей в пять отдельных монет по 10 рублей, оставив себе одну и вернув нам четыре. Вот эти 4 десятирублевые монеты и есть аналог полученных, но еще не потраченных частей Биткоина, иначе называемых входами, которые в рассматриваемом примере являются сдачей.

В криптовалютах модель UTXO гарантирует, что каждый вход ссылается на выход, откуда пришла входящая транзакция или сдача, сверяет сумму входов с выходами и погашает (тратит) не потраченные входы при отправке транзакций.

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

Тем не менее, такая модель создает некоторые проблемы:

  • Транзакции могут разделяться на очень мелкие суммы, которые порой меньше комиссии сети.
  • Придется регулярно проводить оптимизацию непотраченных входов в целях уменьшения сетевой комиссии при отправке будущих транзакций.

Как работает UTXO-модель

UTXO — это полученная, но еще не потраченная часть Биткоина. Каждая отправленная транзакция состоит из одного или нескольких входов и нескольких (чаще одного или двух) выходов. То есть баланс кошелька — это комбинация всех UTXO, которые поступили на кошелек.

Сценарий с единичным UTXO

Предположим, мы только что добыли блок и получили новые Биткоины непосредственно из сети. Наше вознаграждение составит 3,5 BTC, которые зашли на баланс кошелька одной суммой. Эта коинбейс-транзакция представляет собой один UTXO.

Теперь, допустим, мы хотим подарить 1 BTC другу. Сеть возьмет наш единственный UTXO в 3,5 BTC и разделит его на три отдельных UTXO (для простоты восприятия цифры в примере условны):

  1. Подарок другу: 1 BTC.
  2. Сетевая комиссия: условно 0,000002 BTC, которая уйдет майнерам за обработку транзакции.
  3. Сдача: 2,499998 BTC. Она будет возвращена на наш кошелек.

Далее, предположим, что мы хотим отправить оставшиеся 2,499998 BTC на биржу. В этом случае сдача не предусмотрена:

  1. Перевод на биржу: 2,499997 BTC.
  2. Сетевая комиссия: 0,000001 BTC.

Можно заметить, что сетевая комиссия ниже, при том, что сумма перевода больше. Это связано с тем, что плата за обратку транзакции Биткоина определяется не количеством отправляемых BTC, а весом транзакции, т. е. ее размером в байтах. Этот вес формируется из:

  • Веса входов (адресов, с которых пришли монеты) ~150 байт каждый.
  • Веса выходов (адресов, куда уходят монеты) ~40 байт каждый.
  • Веса самой транзакции ~10 байт.

Таким образом, при меньшем количестве UTXO в кошельке любые исходящие транзакции проще обрабатываются сетью и, следовательно, дешевле в плане сетевых комиссий.

Такой пример, когда кошелек содержит только один UTXO, встречается редко. Чаще активный адрес биткоин-кошелька постоянно имеет несколько входов.

Сценарий с множеством UTXO

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

К примеру, у нас есть 10 BTC, которые мы получили несколькими входящими переводами: 2 BTC, 0,9 BTC, 3 BTC, 4 BTC, 0,1 BTC. Из этих 10 BTC мы хотим отправить 5 BTC на биржу. В нашем случае транзакция будет выглядеть следующим образом:

  • Отправка на биржу: 5 BTC (2 BTC + 3 BTC + 0,1 BTC).
  • Сетевая комиссия: 0,000003 BTC.
  • Сдача: 0,099997 BTC.

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

Важно понимать, что баланс Биткоина не похож на традиционный банковский баланс. Протокол не может отщипнуть кусок от входа и послать этот кусок адресату. Блокчейну, основанному на UTXO-модели, необходимо гасить (тратить) вход полностью, и если сумма выхода (отправки или комиссии) НЕ равна сумме входа, то старый вход гасится полностью, а неизрасходованная часть, т. е. сдача, при подтверждении транзакции сформирует новый вход.

Многие приложения-кошельки используют умные алгоритмы формирования таких сложных отправок, целью которых является не допустить формирования лишних входов. Эти умные алгоритмы стараются выбирать только те входы, которые будут полностью погашены, это значит, что сумма отправки (выход) собирается не из каждого отдельного входа, а из тех, которые в совокупности дадут значение, равное выходу.

Однако если имеется вход (UTXO), покрывающий всю сумму выхода и комиссию сети, то тратиться будет только он. Часто при таком варианте образуется небольшая сдача, величина которой порой даже меньше сетевой комиссии. Кроме того, начинающие пользователи могут неосознанно принимать на кошелек незначительные суммы в виде донатов, выплат с кранов, регулярных мелких или пробных покупок. Именно такие незначительные суммы называются «пылью».

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

Оптимизация UTXO: как решить проблему «пыли»

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

Да, если бы не существовало оптимизации (консолидации) входов.

Каждый из нас хоть раз в жизни, но собирал всю мелочь в кармане и относил ее в кассу магазина или банк для обмена на более крупные купюры. Это и есть оптимизация, но только фиатных денег. То же самое возможно и с UTXO Биткоина.

Оптимизация — это процесс, предполагающий отправку всех мелких, средних и/или крупных UTXO в виде одного крупного UTXO в целях сокращения их количества.

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

Как оптимизировать входы (UTXO)

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

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

Как UTXO-модель предотвращает двойные траты

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

Двойное расходование или двойная трата — это повторная передача (отчуждение) одних и тех же уже потраченных активов
Двойное расходование или двойная трата — это повторная передача (отчуждение) одних и тех же уже потраченных активов

На концепцию модели UTXO сильно повлияли ранние системы цифровых денег, такие как eCash Дэвида Чаума в 1980-х годах и B-money Вэя Дая в 1990-х. В этих ранних попытках создания цифровой валюты использовались схожие механизмы отслеживания результатов отдельных транзакций для предотвращения двойных трат.

Позже Сатоши Накамото усовершенствовал наработки и реализовал в дизайне Биткоина систему, которая стала основополагающим элементом, обеспечивающим целостность и безопасность блокчейна.

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

Модель UTXO обеспечивает защиту от двойных трат за счет трех основных правил:

  • Каждая транзакция должна ссылаться на адрес получателя (вход) и адрес отправителя (выход).
  • Сумма выходов не может превышать сумму входов.
  • Как только транзакция подтверждается, ее счетчик UTXO обновляется: старые входы гасятся и появляются новые. Новые UTXO могут быть использованы в будущих транзакциях, а погашенные — нет.

Отличия UTXO-модели от аккаунт-модели

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

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

Эта модель гораздо проще для понимания, поскольку работает аналогично традиционным банковским счетам. Когда пользователь инициирует транзакцию перевода определенной суммы с адреса на адрес, блокчейн-платформа, основанная на аккаунт-модели, проверяет эту транзакцию и обновляет информацию по адресам в своем распределенном реестре.

В Ethereum реализовано отслеживание глобального состояния (global state), в котором, так сказать, хранятся данные о балансах всех аккаунтов в блокчейне, включая принадлежащих пользователям и смарт-контрактов. Когда транзакция отправляется, виртуальная машина Ethereum (EVM) проверяет ее и обновляет балансы адресов участвующих сторон.

Несмотря на то, что модель аккаунтов проста и эффективна, она сопряжена с проблемами масштабируемости, рисками безопасности и большими проблемами конфиденциальности.

UTXO- и аккаунт-модели — не единственные реализации в блокчейне. Например, в Cardano была предложена модель расширенных неизрасходованных транзакционных входов (EUTXO). Она дополняет возможности традиционной модели UTXO за счет включения функций, обычно ассоциируемых с аккаунт-моделью, таких как более сложные скрипты и смарт-контракты с состоянием.

Iota использует Tangle, тип направленного ациклического графа (DAG), для обеспечения быстрых транзакций, подходящих для устройств Интернета вещей (IoT).

Хотя UTXO-модель лежит в основе самого крупного и известного блокчейна в мире — Биткоина — отрасль постоянно развивается. Появляются новые модели, предлагающие инновационные решения проблем, с которыми сталкиваются имеющиеся.

Что внутри | BTC_2TheMoon | Биткоин, блокчейн, криптовалюта | Дзен