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.