127 / 736WIT

Witness Data

Дані для перевірки права витрачати

Мережа має знати не лише куди ви надсилаєте монети, а й чи маєте право їх витрачати. Witness містить докази, зокрема підписи. Відокремлення цих даних не вилучає їх із Bitcoin.

Witness Data — дані, додані до входів транзакції для перевірки умов витрачання SegWit. Вхід посилається на раніше отримані монети, які тепер витрачаються. Witness може містити підписи, відкриті ключі чи скрипт. Це частина транзакції, а не ще одне місце зберігання грошей.

Анна раніше отримала Bitcoin і тепер хоче заплатити Петру. Попередня оплата створила вихід: запис про суму й умови її подальшого витрачання. Нова транзакція посилається на цей вихід своїм входом. Недостатньо просто заявити, що монети належать Анні. Для звичайного платежу гаманець створює підпис, який можна перевірити без розкриття приватного ключа. Гаманець — це застосунок або пристрій для отримання й надсилання біткоїнів. Приватний ключ — секретне числове значення, за допомогою якого створюють такий підпис. У SegWit такі дані подаються як witness відповідного входу. Наявність підпису ще не означає його правильності. [1] [4] [5]

Уявіть різницю між вимогою «покажіть чинний документ» і документом, який ви показуєте. У Bitcoin рішення приймає не людина: відповідність перевіряють правила. Witness program є частиною умови в попередньому виході, а його версія визначає спосіб перевірки. Witness надає вже нова транзакція, що витрачає вихід. Технічно це впорядкований список елементів даних для кожного входу. Він не є автоматично виконуваною програмою чи копією всіх невитрачених монет. [1] [7]

Witness може розкрити підпис, відкритий ключ або використаний скрипт — програму, що описує умови витрачання. Відкритий ключ використовують для перевірки підписів; його не потрібно тримати в таємниці. Це не зашифрована скринька. Приватний ключ залишається у вас: ним підписують, а не надсилають його в мережу замість підпису. Ні witness, ні оприлюднений підпис не замінюють Seed Phrase, слова для відновлення гаманця. Якщо втратити ключі й резервну копію, сама публічна історія платежів не поверне можливості підписувати нові перекази. [1] [3] [4]

Оглядач блоків — це застосунок для пошуку транзакцій і блоків певної мережі. Оглядач може показувати wtxid поруч із txid. Обидва є хешами — короткими відбитками точного запису даних, отриманими подвійним застосуванням SHA-256. txid використовує запис без witness, а wtxid — повний запис із witness. Це не адреси одержувача й не два різні платежі. Без witness використовується початковий формат, і обидва ідентифікатори збігаються. У Bitcoin Core v29.0 команда decoderawtransaction подає повний ідентифікатор у полі hash, а дані witness входу — у txinwitness. [1] [7] [8]

Інша транзакція може посилатися на попередню ще до підтвердження. Якби хтось змінив її ідентифікатор лише зміною даних підпису, посилання перестало б відповідати. Зміна тільки witness не змінює txid, що допомагає протоколам із залежними транзакціями, наприклад Lightning Network. Це не обіцянка незмінності всієї транзакції. Інші поля чи старі входи без SegWit усе ще можуть вплинути на txid, а змінений witness має пройти належну перевірку. [1] [6]

Witness передається разом із повним записом транзакції й після включення належить до даних блока. Це не безкоштовне сховище поза ланцюгом. Байт, доданий серіалізацією witness, дає 1 WU ваги, а базовий байт — 4 WU; WU означає одиницю ваги. Full Node самостійно перевіряє правила й потребує відповідних даних для перевірки витрачання. Менша вага не дозволяє пропускати необхідні перевірки й не означає, що дані не займають місця. [1] [7]

У старому форматі докази для витрачання записували в scriptSig. Нативний SegWit версії 0 вимагає порожнього поля: потрібні дані містяться у witness. Є також варіант, обгорнутий у P2SH, старіший спосіб платежу на умову, визначену хешем скрипту. Тут scriptSig має містити лише внесення відповідного witness program, без довільних додаткових команд. Докази залишаються у witness. Та сама мета може мати різні записи, тому назви поля недостатньо для розуміння. [1] [5]

P2WPKH надає підпис і відкритий ключ. Вузол перевіряє відповідність хешу ключа початковій умові й правильність підпису. P2WSH дозволяє умову, визначену хешем цілого скрипту. Останній елемент witness називається witnessScript: його хеш має відповідати програмі у виході. Попередні елементи дають початкові дані для виконання скрипту, наприклад підписи. BIP 143 визначає формування підписуваного повідомлення для цієї версії, включно із сумою витрачуваного виходу. Саме успішне читання даних ще не доводить виконання умов. [1] [2] [5]

Taproot використовує нативний witness версії 1 і розрізняє витрачання за ключем та за скриптом. Перед вибором шляху відкладається annex, якщо він є, — особливе додаткове поле; його дані все одно враховуються у вазі й покриваються підписом. Один елемент, що залишився, тлумачиться як підпис шляху за ключем. Шлях за скриптом розкриває скрипт і control block — дані, що доводять його зв’язок із попереднім виходом, а не новий блок ланцюга. Попередні елементи, якщо є, постачають дані скрипту. Правила версії 0 не можна просто перенести сюди. [3] [5]

Криптографічне зобов’язання (commitment) — це відбиток, що прив’язує дані до їхнього конкретного вмісту. Коли потрібне таке зобов’язання щодо witness, BIP 141 пов’язує witness із рештою блока через Coinbase Transaction, першу транзакцію для винагороди майнеру. Дерево хешів wtxid утворює корінь, який узагальнює дані. Для транзакції винагороди в цьому дереві використовується нульовий wtxid. Корінь поєднують із зарезервованим значенням розміром 32 байти та двічі хешують; результат записують у її вихід як зобов’язання. Якщо жодна транзакція не має witness, це зобов’язання необов’язкове. Воно пов’язує публічні докази, але не зберігає ключі й не замінює перевірку. [1]

Для повної картини прочитайте також SegWit, Block Weight, Bitcoin Script, Taproot, Bitcoin, Seed Phrase. На цю статтю також посилаються Block Weight, Miniscript, Compact Block Filters.

DOC · 001BIP 141 — Segregated WitnessСпецифікація DOC · 002BIP 143 — SegWit signature hashingСпецифікація DOC · 003BIP 341 — TaprootСпецифікація DOC · 004Bitcoin Developer Reference — TransactionsДокументація DOC · 005Bitcoin Core v29.0 — Script interpreterДокументація DOC · 006Bitcoin Core — Segregated Witness benefitsДокументація DOC · 007BIP 144 — Segregated Witness Peer ServicesСпецифікація DOC · 008Bitcoin Core v29.0 — decoderawtransactionДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада