PSBT v2 to format BIP 370 służący do wymiany niedokończonej transakcji Bitcoin i danych potrzebnych do podpisu. Numer oznacza wersję koperty PSBT, nie automatycznie wersję transakcji ani nową metodę weryfikacji sieciowej.
PSBT v0 według BIP 174 zawiera globalną niepodpisaną transakcję. BIP 370 przenosi jej dane konstrukcyjne do oddzielnych pól. Uczestnicy mogą więc zgodnie z regułami dodawać wejścia i wyjścia po utworzeniu koperty. Nie oznacza to dowolnych zmian już podpisanych części ani tego, że sam plik jest płatnością. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION musi wynosić 2, a PSBT_GLOBAL_UNSIGNED_TX musi być nieobecne. Obowiązkowe PSBT_GLOBAL_TX_VERSION określa osobno wersję tworzonej transakcji; mapa globalna zawiera także liczby wejść i wyjść. Samo przepisanie numeru wersji w starym pliku nie tworzy poprawnego PSBT v2. [BIP 370 — PSBT Version 2]
Wejście musi wskazać poprzedni TXID oraz indeks wydawanego wyjścia. Wyjście musi zawierać kwotę w satoshi i scriptPubKey; dodanie aktualizuje też właściwy licznik globalny. Brak sequence wejścia oznacza 0xffffffff. Dane konstrukcyjne nie zastępują weryfikacji UTXO ani innych materiałów potrzebnych urządzeniu podpisującemu. [BIP 370 — PSBT Version 2]
W PSBT_GLOBAL_TX_MODIFIABLE bit 0 dopuszcza zmiany wejść, a bit 1 wyjść. Bit 2 sygnalizuje podpis SIGHASH_SINGLE: trzeba zachować powiązanie wejścia i wyjścia pod odpowiadającym indeksem. Konstruktor musi zbadać konkretne podpisy; samo ustawienie flagi nie zapewnia bezpieczeństwa zmiany, która byłaby nieprawidłowa. [BIP 370 — PSBT Version 2]
Dla nLockTime wybiera się typ wymagania zgodny ze wszystkimi wejściami i jego najwyższą wartość. Gdy możliwe są oba typy, pierwszeństwo ma wysokość bloku; niezgodnego wejścia nie wolno dodać. Bez wymagań wejściowych stosuje się globalną wartość zastępczą albo zero. Nowe wejście nie może zmienić nLockTime, jeżeli istnieją już podpisy. [BIP 370 — PSBT Version 2]
Podpisujący aktualizuje flagi według SIGHASH. Bez SIGHASH_ANYONECANPAY blokuje zmiany wejść; bez SIGHASH_NONE blokuje zmiany wyjść, a przy SIGHASH_SINGLE zaznacza wymagane parowanie. Po finalizacji ekstraktor składa transakcję sieciową z pól. Rozgłoszenie i przyjęcie przez sieć to dalsze kroki, nie właściwości przesłanej koperty. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0 i v2 nie są bezpośrednio wymienne. Konwersja do v0 wymaga zbudowania niepodpisanej transakcji i przestrzegania reguł pól tej wersji. BIP 371 osobno definiuje dane Taproot dla obu wersji. Obsługa PSBT lub Taproot sama nie dowodzi więc, że portfel potrafi importować, podpisywać i eksportować PSBT v2. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
Na zaufanym urządzeniu porównaj odbiorców, kwoty, własne wyjście reszty i opłatę z pierwotnym zamiarem. Sprawdź dane UTXO, skrypty i użyty SIGHASH; same metadane wyprowadzania kluczy nie dowodzą własności wyjścia. Próba z konkretnym koordynatorem i urządzeniem sprawdza zgodność, nie bezpieczeństwo wszystkich przyszłych transakcji. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
Pełniejszy obraz uzyskasz, czytając to hasło razem z PSBT, Hardware Wallet, Multisig, Taproot.