PSBT v2 — формат BIP 370 для обміну незавершеною транзакцією Bitcoin та даними для підписання. Номер позначає версію оболонки PSBT, а не автоматично версію транзакції чи новий спосіб мережевої перевірки.
PSBT v0 за BIP 174 містить глобальну непідписану транзакцію. BIP 370 переносить її конструкційні дані в окремі поля. Учасники можуть за правилами додавати входи й виходи після створення оболонки. Це не дозволяє довільно змінювати вже підписані частини й не робить сам файл платежем. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION має дорівнювати 2, а PSBT_GLOBAL_UNSIGNED_TX має бути відсутнім. Обов’язкове поле PSBT_GLOBAL_TX_VERSION окремо задає версію створюваної транзакції; глобальна мапа також містить кількість входів і виходів. Проста заміна номера версії у старому файлі не створює коректний PSBT v2. [BIP 370 — PSBT Version 2]
Вхід має визначати попередній TXID та індекс виходу, що витрачається. Вихід має містити суму в satoshi та scriptPubKey; додавання також оновлює відповідний глобальний лічильник. Відсутнє поле sequence входу означає 0xffffffff. Ці дані не замінюють перевірку UTXO та інших матеріалів, потрібних пристрою підписання. [BIP 370 — PSBT Version 2]
У PSBT_GLOBAL_TX_MODIFIABLE біт 0 дозволяє змінювати входи, а біт 1 — виходи. Біт 2 попереджає про підпис SIGHASH_SINGLE: потрібно зберегти пару входу й виходу за відповідним індексом. Конструктор має перевірити конкретні підписи; увімкнений прапорець сам по собі не робить інакше некоректну зміну безпечною. [BIP 370 — PSBT Version 2]
Для nLockTime вибирають тип вимоги, сумісний з усіма входами, та його найбільше значення. Якщо можливі обидва типи, перевага надається висоті блока; несумісний вхід додавати не можна. Без вимог входів використовують глобальне резервне значення або нуль. Новий вхід не повинен змінювати nLockTime, якщо підписи вже існують. [BIP 370 — PSBT Version 2]
Підписувач оновлює прапорці відповідно до SIGHASH. Без SIGHASH_ANYONECANPAY він забороняє зміни входів; без SIGHASH_NONE — зміни виходів, а за SIGHASH_SINGLE позначає потрібне парування. Після фіналізації екстрактор складає мережеву транзакцію з полів. Надсилання та прийняття мережею є наступними кроками, а не властивостями переданої оболонки. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0 і v2 не є безпосередньо взаємозамінними. Перетворення у v0 потребує складання непідписаної транзакції та дотримання правил полів цієї версії. BIP 371 окремо визначає дані Taproot для обох версій. Підтримка PSBT або Taproot сама не доводить, що гаманець уміє імпортувати, підписувати й експортувати PSBT v2. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
На надійному пристрої порівняй одержувачів, суми, власний вихід решти й комісію з початковим наміром. Перевір дані UTXO, скрипти та використаний SIGHASH; метадані виведення ключів самі не доводять належності виходу. Пробний прохід через конкретний координатор і пристрій перевіряє сумісність, а не безпеку всіх майбутніх транзакцій. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
Для повної картини прочитайте також PSBT, Hardware Wallet, Multisig, Taproot.