utxo bitcoin что это
Что такое UTXO?
UTXO (unspent transaction output) — выход неизрасходованных транзакций.. В основном, это сумма или оставшееся изменение криптовалюты, которое вы получаете от каждой транзакции. В качестве входных данных для транзакции могут использоваться только неизрасходованные выходные данные. При выполнении транзакции входные данные удаляются, а выходные данные создаются в виде новых UTXOs, которые затем могут быть использованы в будущих транзакциях.
Например, если у вас есть UTXO, который определяет, что у вас есть 10 монет, и вы хотите купить что-то, что стоит 2 монеты, вы сделаете транзакцию, которая потратит весь Ваш баланс UTXO, отправив 2 монеты другому человеку и 8 монет обратно себе. Как только эта транзакция будет завершена, UTXO будет создан как для отправителя, так и для получателя. В общем случае UTXO определяет, сколько пользователь получил обратно и сколько пользователь может потратить. Сумма, которую пользователь получит обратно, будет добавлена к его балансу счета. Таким образом, наиболее вероятно, что у каждого пользователя будет более одного UTXOs, и сумма всех неизрасходованных монет в каждом UTXO будет равна общему балансу счета пользователя.
· Простота. Благодаря UTXO, на которые имеются уникальные ссылки и которые полностью расходуются при затратах, не дает возможности для повторного воспроизведения транзакции.
· Транзакции могут быть проверены параллельно. Две транзакции не могут повлиять на один и тот же UTXO. Это связано с состоянием транзакций UTXO без сохранения состояния. Транзакции не относятся ни к какому входу за пределами потребляемых UTXO и соответствующих сигнатур.
· В модели UTXO поощряется сохранение конфиденциальности. Пользователям рекомендуется создавать новый адрес для каждой входящей транзакции, включая изменение адреса. Используя каждый раз новый адрес, трудно однозначно связать разные монеты с одним владельцем.
· Особенности UI/UX сложны. Пользователи, как правило, думают о счетах, когда они хранят свои деньги. Поставщик кошелька должен управлять потенциальным набором адресов и суммировать соответствующие остатки. Для выполнения этого способа сохранения конфиденциальности может потребоваться запуск локального узла.
· Возможности смарт-контрактов в модели UTXO весьма ограничены. Каждый UTXO имеет критерии расходов, которые диктуют условия расходов. Это может потребовать подписи от нескольких сторон, но существует мало возможностей ссылаться на внешние государства, такие как оракулы.
Что такое ошибка UTXO?
Пыль — это крошечное количество монет в дробных значениях и обычно меньше сетевого сбора/комисси за перевод. Протокол биткоина иногда генерирует крошечные суммы монет, когда пользователи отправляют и получают BTC. Другие блокчейны UTXO (Unspent Transaction Output), форки биткоина, например, Litecoin (LTC), Dogecoin (DOGE), Bitcoin Cash (BCH), также генерируют такую же крошечную сумму.
Пыль имеет 3 негативных последствия:
Пользователям невыгодно тратить средства, которые требуют большей сетевой комиссии для подтверждения транзакции
Она загрязняет экосистему, перегружая сеть нерентабельными транзакциями (с точки зрения хранения данных и времени транзакция малой стоимости требует хранения пространства данных, аналогичного транзакции большой стоимости)
Она снижает уровень конфиденциальности, если вы объединяете пыль из разных кошельков в один, это раскрывает ваши идентификаторы кошельков, и посторонние могут догадаться, что все кошельки принадлежат одному человеку.
При попытке отправить BTC/LTC/DOGE/BCH на De-Fi-кошелек Crypto.com может возникнуть ошибка пыли UTXO:
Транзакция отклоняется сетью, потому что она построена с использованием пыли UTXO, требуя большей комиссии, чтобы потратить фактическую сумму. Такой подход позволяет предотвратить спам сети транзакциями, замедляющими работу сети и создающими расходы для тех, кто управляет серверами BTC/LTC/DOGE/BCH.
Транзакция генерирует остатки пыли, что может затруднить их использование (см. предыдущий пункт)
Как можно разрешить ошибку пыли UTXO?
Не отправляйте транзакции с малой стоимостью с более высокой суммой комиссии. Поскольку сеть попытается создать UTXO из транзакции с маленькой суммой, транзакция будет неудачной.
Перед отправкой средств попробуйте добавить в кошелек больше средств. Более крупная сумма транзакции гарантирует приём транзакции сетью.
Выберите более низкий уровень комиссии на экране подтверждения отправки
Убедитесь в том, что в кошельке осталась значительная сумма, чтобы сеть не посчитала транзакцию пылью при следующей попытке расхода остатка баланса
Что такое UTXO (Unspent Transaction Output)?
UTXO расшифровывается как Unspent Transaction (TX) Output. Фактически, это означает количество оставшейся криптовалютной «мелочи», которую вы получаете в качестве сдачи с каждой транзакции. Не так давно мы разбирали что такое «селекция монет», но решили более детально рассмотреть этот момент. Для более подробного объяснения придется сначала рассмотреть, как происходит типичная крипто транзакция. Используем в качестве примера Bitcoin, так как это самая популярная криптовалюта, использующая UTXO.
Пример UTXO транзакции
Когда вы проверяете свой кошелек Bitcoin, вы видите свой баланс. Для примера давайте предположим, что у вас 100 Биткоинов. Хотя вы видите только сумму на счете, ваш баланс состоит из нескольких UTXO. У вас может быть четыре UTXO по 25 BTC, два UTXO по 50 или, например, сет UTXO из 37, 18, 40 и 5 Биткоинов. Стоимость каждого UTXO не имеет значения, но их сумма в нашем случае всегда будет составлять 100 BTC.
Продолжая наш пример, давайте предположим, что мы отправились покупать новый автомобиль. Отбросив стереотипный вариант Lamborghini, вы останавливаете свой выбор на Porche за 35 Биткоинов. Однако в вашем кошельке есть UTXO ценностью только в 15, 17, 28 и 40 BTC и нет «купюры» номиналом в 35 Биткоинов. UTXO невозможно разделить, поэтому вы просто не сможете отдать ровно 35 Биткоинов.
Вместо этого вы отдадите 40 BTC, на месте которых сеть создаст два новых UTXO ценностью в 35 и 5 Bitcoin. Автодилер получит 35 BTC, а вы получите свою сдачу в размере 5 BTC.
Также вы можете потратить свои UTXO в 17 и 28 Биткоинов, получив в качестве сдачи 10 Биткоинов. Транзакция может использовать любую комбинацию UTXO и у вас нет возможности повлиять на ее выбор.
Точно так же расплачиваясь, вы можете совместить несколько UTXO в более крупной транзакции, уменьшив их количество в сети.
А что насчет комиссии за транзакцию?
Комиссия также включается в транзакцию и вычитается из получаемого в качестве сдачи UTXO. Уравнение выглядит примерно так:
Новое UTXO = (сумма UTXO в транзакции) – (значение транзакции) – (комиссия за транзакцию)
Добавим в наш недавний пример комиссию в один Bitcoin:
Новое UTXO = (17+28) – (35) – (1) = 9 BTC
Важность UTXO и потенциальные проблемы
Введение UTXO сильно упрощает методы учета на блокчейне. Вместо того, чтобы вынужденно отслеживать и хранить каждую транзакцию, система отслеживает только неизрасходованные коины, известные нам как UTXO.
Таким образом, каждый коин в экосистеме Bitcoin может быть потрачен только единожды. Биткоины, в данный момент находящиеся на кошельках, еще не были использованы по двум причинам:
UTXO выполняют важную роль в предотвращении атаки двойного расходования, а также не позволяют пользователям тратить коины, которые не существуют. Ноды в сети записывают и поддерживают базу данных, содержащую каждое UTXO (т.е. неизрасходованный коин), доступное к расходованию. Если вы попытаетесь прислать транзакцию с коином, которого нет в базе, ноды отклонят эту транзакцию.
Потенциальные проблемы с хранением
Ноды хранят базу данных UTXO в RAM, поэтому важно соблюдать разумный объем данных. По мере того, как он растет, стоимость работы заполненной ноды тоже увеличивается. Если обслуживание заполненной ноды станет слишком дорогим, мы будем наблюдать дальнейшую централизацию сети Bitcoin в руках более состоятельного меньшинства, которое сможет себе позволить использовать эти ноды.
Риск централизации – один из главных аргументов против увеличения размера блока Bitcoin. Разработчик Bitcoin Гевин Андерсен хорошо описал это в своей статье «UTXO uh-oh…»:
«Один мегабайтовый блок содержит около 100 млн 500-байтовых транзакций в год. Если каждый блок увеличит UTXO на 500 байт, это прибавит около 50 гигабайт в год».
Размер блока в один мегабайт ограничивает верхний лимит, до которого каждый год может расти база данных UTXO. Гевин продолжил:
«Разрешив проводить больше транзакций без каких либо других изменений, мы, скорее всего, ускорим рост UTXO, делая весь процесс более затратным и ускоряя полное заполнение каждой ноды».
Дабы не вырывать из контекста слова Андерсена, стоит отметить: в своей статье он выступает все-таки за увеличение размера блока. Он утверждает, что влияние объема UTXO не такое существенное, как считают многие. А учитывая сложность масштабирования второго уровня, необходимо ввести увеличенные блоки в ближайшее время, пока эти решения еще будут актуальны в долгосрочной перспективе.
Решения
К счастью, существует несколько решений потенциальной проблемы с хранением. Во-первых, нодам не надо хранить всю базу данных UTXO в RAM. Часть данных можно хранить на более дешевом диске HDD или SSD. Хотя это замедлит время валидации каждой ноды, особых проблем не возникнет, если это время будет составлять меньше 10 минут.
Вдобавок, разработчики Bitcoin постоянно улучшают механизмы транзакций, для оптимизации базы данных UTXO.
Наконец, Segregated Witness (Segwit) и похожие решения масштабирования косвенно замедляют рост базы данных UTXO. Следующая информация взята напрямик из документации Bitcoin Core:
«Segwit улучшает ситуацию за счет создания подписных данных, которые не влияют на объем UTXO, и стоят на 75% меньше. Это, в свою очередь, побуждает пользователей отдавать предпочтение транзакциям, минимизирующим влияние на UTXO из-за меньшей комиссии на них. А разработчиков это заставляет работать над смарт-контрактами и новыми функциями, которые бы дальше минимизировали влияние на UTXO».
Заключение: альтернативы UTXO
Мы постоянно использовали Bitcoin в нашем сегодняшнем примере, однако существует немало других использующих UTXO криптовалют типа Bitcoin Cash, Litecoin, Komodo и тому подобных коинов.
Также существует много криптовалют, использующих другие механизмы учета. Например, Ethereum использует модель транзакции, основанную на учетной записи. В общих чертах, этот механизм обеспечивает лучшую экономию пространства и упрощает код, однако вместе с этим проигрывает в плане приватности транзакций и ведет к потенциальным проблемам с масштабируемостью.
Если десять крипторазработчиков спросить о самом лучшем методе учета, скорее всего, каждый из них даст разный ответ. Для всего криптосообщества это до сих пор горячо обсуждаемый вопрос, который все еще не имеет конкретного решения. И судя по сложности вопроса, идеального решения никогда и не будет.
Дисклеймер: не рассматривайте эту статью как рекомендацию по инвестиции. Проведите тщательный анализ, прежде чем инвестировать в какую-либо криптовалюту.
Для торговли на рынке криптовалют Хриплый Биток рекомендует биржу Exmo!
Utreexo: сжимаем множество UTXO Bitcoin
В сети Bitcoin все узлы в ходе консенсуса соглашаются над множеством UTXO: сколько монет доступно для траты, кому именно и при каких условиях. Множество UTXO — это минимально необходимый для узла-валидатора набор данных, без которого узел не сможет удостовериться в валидности приходящих транзакций и блоков, их содержащих.
В связи с этим предпринимаются попытки всячески уменьшить хранимое представление этого множества, сжать его без потери гарантий безопасности. Чем меньше объем хранимых данных, тем ниже требования к дисковому пространству узла-валидатора, что делает запуск узла-валидатора дешёвым, позволяет наращивать сеть и увеличивать тем самым устойчивость сети.
В этой заметке мы запилим Rust-прототип недавнего предложения от соавтора Lightning Network Paper, Thaddeus Dryja — Utreexo: a dynamic hash-based accumulator optimized for the Bitcoin UTXO set, позволяющего уменьшить требования к дисковому пространству для узлов-валидаторов.
В чём проблема?
Одной из вечных проблем Биткоина была его масштабируемость. Идея «сам себе банк» требует от участников сети вести учёт всех доступных для использования средств. В Bitcoin доступные средства выражаются в виде множества нерастраченных выходов — UTXO-set. Хотя это и не особо интуитивное представление, оно является выгодным с точки зрения производительности реализации, по сравнению с представлением, в котором у каждого «кошелька» есть «баланс» в виде отдельной записи, а также добавляет приватности (например, обеспечивает работу CoinJoin).
Важно различать историю транзакций (то, что зовётся блокчейном) и текущее состояние системы. История транзакций Bitcoin в настоящее время занимает порядка 200 Гб дискового пространства, и продолжает расти. Однако состояние системы гораздо меньше, порядка 4 Гб, и учитывает только факт владения монет кем-либо в настоящее время. Объем этих данных так же со-временем увеличивается, но значительно с меньшей скоростью и иногда даже имеет тенденцию к уменьшению (см. КДПВ).
Лёгкие клиенты (SPV) обменивают гарантии безопасности на возможность не хранить никакого минимального состояния (UTXO-set), кроме приватных ключей.
UTXO и UTXO-set
UTXO (Unspent Transaction Output) — нерастраченный выход транзакции, конечная точка путешествия каждого сатоши, передаваемого в транзакциях. Нерастраченные выходы становятся входами новых транзакций и при этом тратятся (spend) и удаляются из UTXO-set.
Новые UTXO всегда создаются транзакциями:
Процесс работы с UTXO:
Кошельки считают количество доступных для траты монет (баланс) исходя из суммы UTXO, доступных этому кошельку для траты.
Каждый узел-валидатор, для предотвращения попыток двойной траты (double spend), должен отслеживать набор всех UTXO при проверке каждой транзакции каждого блока.
У узла должна присутствовать логика:
Существуют способы уменьшить требования к хранимой информации о множестве, сохранив при этом возможность добавлять и удалять элементы, проверять и доказывать существование элемента в множестве с помощью криптографических аккумуляторов.
Аккумуляторы для UTXO
Идея применения аккумуляторов для хранения множества UTXO обсуждалась ранее.
UTXO-set строится на лету, во время начальной загрузки цепочки блоков (IBD, initial block download), хранится в полном объёме и постоянно, при этом его содержимое изменяется после обработки транзакций из каждого нового и корректного блока сети. Данный процесс требует загрузки примерно 200 Гб данных блоков и проверки сотен миллионов цифровых подписей. После того, как процесс IBD закончен, в сухом остатке UTXO-set будет занимать около 4 Гб.
Однако, при использовании аккумуляторов, правила консенсуса относительно средств сводятся к проверке и генерации криптографических доказательств, а бремя отслеживания доступных средств перекладывается на плечи владельца этих средств, который предоставляет доказательства их наличия и владения ими.
Аккумулятором можно назвать компактное представление множества. Размер хранимого представления, при этом, должен быть либо постоянным , либо увеличиваться сублинейно относительно мощности множества и размера самого элемента, например
, где n — мощность хранимого множества.
При этом аккумулятор должен позволять генерировать доказательство включения элемента в множество (inclusion proof) и давать возможность эффективно проверить это доказательство.
Аккумулятор называется динамическим если позволяет добавлять элементы и удалять элементы из множества.
Примером такого аккумулятора может послужить RSA-аккумулятор, предложенный Boneh, Bunz, Fisch в декабре 2018 года. Такой аккумулятор имеет постоянный размер хранимого представления, но требует наличия общего секрета (trusted setup). Это требование сводит на нет применимость такого аккумулятора для trustless-сетей типа Bitcoin, поскольку утечка данных при генерации секрета может позволить злоумышленникам создавать фальшивые доказательства существования UTXO, обманывая узлы с UTXO-set на базе такого аккумулятора.
Utreexo
Предложенная Thaddeus Dryja конструкция Utreexo позволяет создать динамический аккумулятор без trusted-setup.
Utreexo представляет собою лес из идеальных двоичных Деревьев Меркла и является развитием идей, представленных в Efficient asynchronous accumulators for distributed pki, добавляя возможность удалять элементы из множества.
Логическая структура аккумулятора
Элементы аккумулятора расположены в виде леса идеальных двоичных деревьев. Деревья упорядочены по высоте. Данное представление выбрано как наиболее наглядное и позволяет визуализировать слияние деревьев в ходе проведения операций над аккумулятором.
Автор замечает, что поскольку все деревья леса идеальны, их высота выражается степенью двойки, равно как и любое натуральное число можно представить в виде суммы степеней двойки. Соответственно, любой набор листов может быть сгруппирован в виде двоичных деревьев, а во всех случаях, добавление нового элемента требует знания лишь о корневых узлах хранимых деревьев.
Таким образом, хранимое представление аккумулятора Utreexo — это список корневых узлов (Merkle root), а не весь лес деревьев целиком.
Добавление элементов
Поскольку мы используем деревья Меркла, то родителем каждого из двух узлов является один узел, хранящий хеш конкатенации хешей узлов-потомков:
Автор замечает, что для предотвращения атак, описанных Charles Bouillaguet, Pierre-Alain Fouque, Adi Shamir, и Sebastien Zimmer в
Second preimage attacks on dithered hash functions, помимо двух хешей следует добавлять к конкатенации ещё и высоту внутри дерева.
В ходе добавления элементов в аккумулятор, необходимо отслеживать, какие корневые элементы оказываются изменены. Следуя по пути изменения корневых элементов для каждого добавляемого элемента, позднее можно сконструировать доказательство наличия этих элементов.
Для добавления элемента в аккумулятор, нужно:
Создание доказательства для добавленных элементов
Используя полученную ранее в ходе добавления элемента информацию (структуру Update ), можно создать доказательство того, что элемент был добавлен в аккумулятор. Для этого обходим таблицу сделанных изменений и добавляем каждый шаг в путь Меркла, который впоследствии и послужит доказательством:
Проверка доказательства для элемента
Проверка доказательства включения элемента (inclusion proof) сводится к следованию по пути Меркла, пока он не приведёт к существующему корневому элементу:
Удаление элементов
Для удаления элемента из аккумулятора требуется предоставить валидное доказательство того, что элемент там находится. Используя данные из доказательства, можно вычислить новые корневые элементы аккумулятора, для которых данное доказательство больше не будет верным.
Процесс удаления элемента «А»:
Интеграция в существующую сеть
Используя предложенный аккумулятор, узлы могут отказаться от использования БД для хранения всех UTXO, сохраняя при этом возможность изменять UTXO-set. Однако возникает проблема работы с доказательствами.
Назовём узел-валидатор, который использует аккумулятор UTXO компактным (compact-state node), а валидатор без аккумулятора — полным (full node). Существование двух классов узлов создаёт проблему интеграции их в единую сеть, поскольку компактные узлы требуют доказательства существования UTXO, которые тратятся в транзакциях, а полные узлы — нет. Если все узлы сети одновременно и скоординировано не перейдут на использование Utreexo, тогда компактные узлы останутся позади и не смогут работать в сети Bitcoin.
Для решения проблемы интеграции компактных узлов в сеть, предлагается ввести дополнительный класс узлов — мосты. Узел-мост — это полный узел, который ко всему прочему хранит аккумулятор Utreexo и доказательства включения для всех UTXO из UTXO-set. Мосты вычисляют новые хеши и обновляют аккумулятор и доказательства по мере поступления новых блоков с транзакциями. Поддержка и обновление аккумулятора и доказательств не накладывает дополнительной вычислительной нагрузки на такие узлы. Мосты жертвуют дисковым пространством: требуется хранить порядка хешей, по сравнению с
хешей для компактных узлов, где n — мощность множества UTXO.
Архитектура сети
Мосты дают возможность постепенно добавлять компактные узлы в сеть без изменения ПО существующих узлов. Полные узлы работают как и раньше, распространяя транзакции и блоки между собой. Узлы-мосты представляют собою полные узлы, которые дополнительно хранят данные аккумулятора Utreexo и набор доказательств включения для всех UTXO на данный момент. Мостовой узел никак не афиширует себя как таковой, прикидываясь полным узлом для всех полных узлов и компактным узлом — для всех компактных. Хотя мосты и соединяют обе сети вместе, в действительности требуется соединять их только в одном направлении: от существующих полных узлов к компактным узлам. Это возможно из-за того, что формат транзакций не требуется изменять, а доказательства для UTXO для компактных узлов может быть отброшено, поэтому любой компактный узел точно так же может рассылать транзакции всем участникам сети без участия узлов-мостов.
Заключение
Мы рассмотрели аккумулятор Utreexo и реализовали его прототип на языке Rust. Рассмотрели архитектуру сети, которая позволит интегрировать узлы на базе аккумулятора. Преимуществом компактных улов выступает размер хранимых данных, который зависит логарифмически от мощности множества UTXO, что сильно снижает требования к дисковому пространству и производительности хранилища для таких узлов. Недостатком выступает дополнительный трафик узлов на передачу доказательств, но техники агрегации доказательств (когда одно доказательство доказывает существование нескольких элементов) и кеширования могут помочь удержать трафик в приемлемых пределах.
Что такое UTXO и зачем он нужен в Биткоине?
UTXO (Unspent Transaction Output) расшифровывается как вывод неизрасходованных транзакций. Простыми словами, это остатки криптовалюты, которые вы получаете с каждой транзакции. Для более подробного объяснения нужно разобраться в самом принципе совершения переводов монет. Для примера возьмем самый распространённый проект — Биткоин.
Пример UTXO
В своём Биткоин-кошельке вы видите баланс. К примеру, 100 BTC. И хотя в интерфейсе отображается один баланс, он на самом деле состоит сразу из нескольких UTXO. У вас может быть четыре UTXO по 25 биткоинов или десять UTXO по 10 биткоинов — разницы никакой.
В один прекрасный момент вы решаете потратить 35 биткоинов — купить новенькую машину, к примеру. Однако в вашем кошельке несколько UTXO эквивалентами 15, 17, 28 и 40 биткоинов. Что же делать?
Выводы неизрасходованных транзакций невозможно поделить сразу же. С вашего кошелька уходит UTXO в размере 40 биткоинов. Сеть формирует два новых вывода: один в размере 35 BTC (он отправляется дилеру в счёт платы за машину) и второй на 5 BTC (он отправляется вам обратно на кошелёк).
Можно было бы также потратить UTXO в размере 17 и 28 биткоинов, тогда вы получили бы в качестве «сдачи» 10 биткоинов. Транзакция может состоять из комбинации разных UTXO. Правда, пользователь не может контролировать, какие именно выводы будут отправлены.
Что насчёт комиссий?
При переводе монет также учитываются затраты на комиссии майнерам. Вот как это выглядит в виде формулы:
Новый UTXO = сумма UTXO в транзакции — размер транзакции — комиссия
Разберём по этому принципу последний пример. А для простоты расчётов комиссию приравняем к одному биткоину:
Новый UTXO = (17 + 18) — 35 — 1 = 9 BTC
Потенциальные проблемы
Применения принципа выводов значительно упрощает расчёты на блокчейне. Вместо того чтобы хранить в блоках информацию о каждой индивидуальной транзакции, мы просто отслеживаем монеты, которые не были потрачены (UTXO).
Напомним, каждый биткоин можно потратить всего один раз. Другими словами, вы не можете переслать одну монету на несколько разных адресов, бесконечно её копируя. Особую роль в этом играют UTXO, ведь именно по информации о выводах сеть криптовалюты отслеживает движение всех монет.
Правда, ноды Биткоина хранят информацию об UTXO в оперативной памяти, поэтому её размер не должен превышать определённых лимитов. С каждым годом стоимость обслуживания полной ноды BTC растёт, а объём информации об UTXO тоже увеличивается. Всё это может привести к централизации сети криптовалюты, ведь в обозримом будущем только богатые смогут себе позволить поддерживать один из узлов системы.
Решение проблемы простое — хранить в оперативной памяти лишь часть UTXO, а остальное отправлять на SSD. Конечно, это повлияет на скорость подтверждения транзакций, однако разработчики Биткоина постоянно ищут новые решения оптимизации процесса перевода монет. Наконец, огромную роль в оптимизации сыграла интеграция протокола SegWit: с его помощью программистам удалось уменьшить затраты на хранение UTXO на 75 процентов.
Ещё больше интересного ищите в нашем крипточате ходлеров!