Utreexo позволяет узлу Bitcoin проверить, не была ли расходуемая сумма уже использована, не сохраняя полный список непотраченных выходов. Узел — программа, которая проверяет транзакции и блоки и обменивается данными с другими участниками сети. Он хранит небольшие контрольные отпечатки и получает конкретные записи с проверяемыми доказательствами. Правила расходования и количество биткоинов не меняются; это не стандартная модель Bitcoin Core.
Анна хочет отправить Петру биткоины, полученные раньше. Поэтому её транзакция ссылается на тот предыдущий платёж. Отдельная запись суммы и условий её расходования называется выходом; пока он не потрачен, это UTXO. Вход новой транзакции содержит ссылку на этот предыдущий выход и данные, необходимые для его расходования. Узел должен проверить, что запись существует и Анна ещё её не потратила. Обычно он ведёт UTXO set — базу всех текущих непотраченных выходов, а не личных счетов с балансами. С её ростом увеличивается нагрузка на диск. Thaddeus Dryja представил Utreexo в 2019 году как способ снизить эту локальную нагрузку. [1] [6] [8]
Сначала для каждой записи вычисляют хеш — короткий контрольный отпечаток данных. В дереве Меркла отпечатки объединяют попарно и снова хешируют, пока не получится верхний отпечаток, корень. Utreexo использует несколько таких деревьев; проверяющий узел может хранить их корни вместо полного списка. Для выхода Анны он получает данные и доказательство с нужными соседними отпечатками. По ним он вычисляет путь к корню и сравнивает результат с уже отслеживаемым состоянием. Одного утверждения отправителя недостаточно. Такая структура называется криптографическим аккумулятором: она доказывает принадлежность записи множеству. Но корни — не сжатая резервная копия. Из них нельзя распаковать все исходные записи. [1] [2]
Полученные данные хешируются, а доказательство позволяет проверить их связь с состоянием, которое отслеживает узел. Нельзя принимать неверное доказательство только потому, что оно пришло от знакомого сервера. Цифровая подпись подтверждает разрешение на платёж с помощью закрытого ключа — секретного числового значения, не раскрывая сам ключ. Скрипт задаёт условия, которые необходимо выполнить для расходования выхода. Даже верное доказательство принадлежности не заменяет проверку подписей, скриптов, сумм и остальных правил транзакции и блока. Utreexo меняет хранение состояния, но не разрешает пропускать эти проверки. [2] [5] [8]
Кто-то по-прежнему должен хранить достаточно данных для построения доказательств. Документация библиотеки различает prover, который хранит весь лес деревьев, и verifier, которому хватает корней. Проверяющий может кешировать некоторые доказательства, но одних корней недостаточно для создания произвольного доказательства. Данные не исчезают: меняется их распределение между участниками. [2]
Блок объединяет транзакции в пакет, добавляемый в общую историю. При расходовании выход удаляется из отслеживаемого множества, а новые непотраченные выходы добавляются. Вместе с этим меняются доказательства. Доказательство для прежнего состояния после следующих блоков может потребовать обновления. При реорганизации сеть принимает другую действительную ветвь цепочки, заменяя часть прежней истории блоков. Реализация должна обрабатывать обновления доказательств, одновременные транзакции и откат при реорганизации цепочки. Это не сертификат, который один раз скачали и используют вечно. [2] [3]
Pruned Node удаляет старые данные блоков после проверки, но традиционно сохраняет текущую базу UTXO. Utreexo нацелен именно на эту базу. Это разные виды экономии, которые можно сочетать. Ни обрезка, ни маленький аккумулятор сами по себе не означают, что узел проверил прошлое, не обработав его. История блоков, текущее состояние и способ первоначальной проверки — три разные вещи. [6] [5]
Представьте новый узел, который начинает с состояния, полученного от кого-то другого, вместо проверки блоков с самого начала. Тем самым он предполагает, что исходное состояние верно. Небольшой аккумулятор не устраняет это доверие: последующие доказательства проверяются именно относительно принятого состояния. Поэтому в AssumeUTXO принятие snapshot, то есть снимка состояния на определённый момент, нужно отделять от последующей фоновой проверки истории. Документация utreexod описывает запуск по умолчанию из состояния, заданного в программе. Сам по себе он не является независимой проверкой всех прежних блоков. Способ запуска — отдельный выбор, а не неотъемлемое свойство Utreexo. [7] [3]
Реализация utreexod использует Utreexo для проверки сети Bitcoin. При проверке 17 октября 2026 года её документация отмечает статус beta и не рекомендует использовать программу в mainnet с существенными суммами. Также указан параметр --noassumeutreexo, отключающий запуск из предполагаемого состояния. Это не рекомендация по установке: сначала проверьте текущую версию, режим, источник программы и возможности восстановления. [3]
Базовая концепция не требует переписывать денежные правила Bitcoin или менять существующие блоки. Но доказательства нужно создавать, передавать и обновлять, поэтому участвующим узлам необходимы соответствующие программы и обмен данными. Небольшое локальное состояние может помочь более дешёвым устройствам. Оно не означает автоматически больше транзакций в блоке, меньшие комиссии для всех или переход всех узлов на новый формат. [1] [4]
Меньше данных на диске может означать больше сетевого трафика и зависимость от своевременной доступности данных. Правильно проверяющий узел отклонит поддельное доказательство. Однако поставщик может не предоставить нужные данные и задержать проверку. Поэтому оператор оценивает весь режим: хранение, передачу, кеш, проверку исходного состояния и поведение при сбоях. Utreexo может удешевить самостоятельную проверку, но не делает отсутствие данных несущественным. [3] [4]
Для полной картины прочитайте эту статью вместе с UTXO, Full Node, Pruned Node, AssumeUTXO, Merkle Tree, Bitcoin Core.