AssumeUTXO ускоряет начало работы узла Bitcoin загрузкой снимка — сохранённого состояния на определённом блоке. Временно узел опирается на ожидаемый отпечаток этого состояния, встроенный в программу. Позже он сам обрабатывает историю и сравнивает результат; снимок не заменяет этой работы.
Пётр запускает свой первый Full Node — программу, которая сама проверяет правила Bitcoin. Блок объединяет транзакции в пакет, добавляемый в общую историю. При обычном запуске сначала нужно пройти длинную историю. AssumeUTXO позволяет начать с подготовленного набора UTXO: ещё не потраченных выходов транзакций, каждый из которых содержит сумму и условия её расходования. Снимок отражает состояние после определённого блока. Это не архив всех платежей и не доказательство того, что компьютер Петра уже проверил всё прошлое. [1] [3]
Имя файла не делает снимок правильным. При загрузке через loadtxoutset Bitcoin Core v29.0 проверяет формат, базовый блок (блок, которому соответствует снимок) и поддерживаемые параметры. Он также вычисляет хеш содержимого UTXO — его криптографический отпечаток — и сравнивает с ожидаемым значением до активации. Изменённые данные не пройдут проверку лишь потому, что файлу дали внушающее доверие имя. [2] [3] [6]
После принятия снимка узел продолжает с его состояния, проверяет последующие блоки и может достичь текущего конца цепи. Он не принимает их на веру: условия расходования и допустимое создание новых биткоинов по-прежнему проверяются. Преимущество в том, что этот путь к текущей работе не обязан ждать завершения старой истории. Это не означает, что прошлое уже проверено локально. [1] [6]
Одновременно из исторических блоков строится второе состояние — от начала до основы снимка. Это независимый расчёт по истории, а не ещё одна копия скачанного перечня. Поэтому некоторое время программа поддерживает два состояния с разным прогрессом. Техническая команда getchainstates показывает их. Само достижение последних блоков активным состоянием ещё не подтверждает завершения фоновой работы. [1] [8]
Ожидаемый хеш и поддерживаемый базовый блок относятся к определённой версии программы. Пока узел Петра сам не пересчитает историю, он полагается на правильность этой встроенной информации. Сравнение хешей позволяет проверить совпадение содержимого, но само по себе не доказывает, что оно получено из действительной истории. Если бы ожидаемое состояние было ошибочным, раннее использование узла опиралось бы на это неверное предположение. Поэтому последующую историческую проверку нельзя путать с проверкой файла при загрузке. [2] [6]
Файл может поступить от другого оператора, но это не даёт ему права выбирать принимаемое состояние. Важно совпадение со значением, поддерживаемым программой, а не обещание поставщика. Нельзя также загрузить любой снимок с любого блока: поддержка зависит от версии и сети. Проверка хеша не гарантирует доставку файла и не устраняет затраты времени, трафика и места на его получение и обработку. [2] [4] [7]
Когда фоновая работа достигает того же базового блока, узел вычисляет хеш построенного им набора UTXO и сравнивает с ожидаемым хешем снимка. Это не сравнение сегодняшнего состояния со старой фотографией: оба относятся к одной точке истории. Если они различаются, описанная реализация останавливает узел и прекращает использовать состояние, полученное из снимка. Она не скрывает расхождение и не объявляет проверку успешной. [1] [6]
AssumeUTXO меняет прежде всего время до начала использования узла. Историческая загрузка и проверка продолжаются, а временно поддерживаются две базы состояния. Это нагружает процессор и диск. Pruned Node экономит место, удаляя старые, уже обработанные файлы блоков, но не пропускает проверку правил. Pruned Node тоже может использовать снимок, но экономия хранилища имеет собственные ограничения. Некоторые вспомогательные индексы должны обрабатывать историю с начала, поэтому ранняя готовность узла не означает мгновенной готовности всех подключённых приложений. [5] [7]
Набор UTXO содержит сведения о неизрасходованных выходах, а не приватные ключи, разрешающие расходование. Цифровая подпись подтверждает разрешение на платёж с помощью приватного ключа — секретного числового значения, не раскрывая сам ключ. Набор UTXO — не резервная копия кошелька и не способ вернуть потерянную Seed Phrase — слова восстановления кошелька, использующего такой механизм. Старые платежи тоже могут появиться не сразу: для их поиска могут понадобиться блоки до снимка. Копирование ключей, поиск истории своего кошелька и проверка состояния сети — разные задачи. [1] [7]
Похожие названия легко перепутать. AssumeUTXO начинает с загруженного состояния и восстанавливает старую историю в фоне. А assumevalid при определённых условиях пропускает часть исторических проверок скриптов, то есть условий расходования, включая подписи. Это отдельная оптимизация, которая также может влиять на историческую проверку. Само завершение AssumeUTXO не означает, что она была отключена. Читая инструкцию, различайте точку старта узла, фактические проверки и момент завершения каждой из них. [5] [6]
Для полной картины прочитайте эту статью вместе с Initial Block Download, Pruned Node, Block Propagation, Nakamoto Consensus, Bitcoin, Bitcoin Core. На эту статью также ссылаются Initial Block Download, Pruned Node, Utreexo.