Vai al contenuto
buybitcoinsmart

Glossario / Wallet e custodia

PSBT versione 2

Noto anche come PSBTv2.

Che cos'è PSBT versione 2?
PSBT versione 2 è il formato di transazione parzialmente firmata che elimina la transazione non firmata fissa, così un partecipante può ancora aggiungere input e output dopo la creazione del file.

Specificato nel BIP-370.

La versione 0 fissa l'insieme di input e output alla creazione; la versione 2 sposta invece ogni dettaglio in mappe per input e per output. Il BIP-370 è stato assegnato il 14 gennaio 2021 e salta il numero 1, dato che il formato del BIP-174 è la versione 0 ed era chiamato colloquialmente versione 1. Per chi detiene bitcoin, la versione 2 conta solo in una sessione di firma in cui un altro partecipante aggiunge bitcoin a una transazione che hai già avviato.

Come funziona

PSBT versione 2 conserva il contenitore esterno del BIP-174 e riorganizza ciò che sta al suo interno. Due regole definiscono il passaggio: PSBT_GLOBAL_UNSIGNED_TX deve essere assente, e PSBT_GLOBAL_VERSION deve essere presente e impostato a 2.

Ciò che la transazione rimossa portava è ridistribuito su dodici nuovi campi. Cinque sono globali: versione della transazione (0x02), locktime di riserva (0x03), numero di input (0x04), numero di output (0x05) e un byte di flag modificabili (0x06). Cinque stanno su ogni input: il txid precedente di 32 byte (0x0e), l'indice dell'output speso (0x0f), il numero di sequenza (0x10), e due locktime obbligatori, uno basato su timestamp pari o superiore a 500000000 (0x11), uno basato su altezza inferiore a quel valore e superiore a zero (0x12). Gli output ne guadagnano due, l'importo in satoshi come intero con segno di 64 bit in little endian (0x03) e lo script (0x04).

Il byte di flag modificabili fa il lavoro vero. Il bit 0 indica che gli input si possono ancora aggiungere o rimuovere, il bit 1 dice lo stesso per gli output, e il bit 2 registra che qualche firma si è già impegnata con SIGHASH_SINGLE, quindi il suo abbinamento di input e output va preservato. Un firmatario deve stringere quei bit man mano: una firma che non usa SIGHASH_ANYONECANPAY azzera il bit 0, e una che non usa SIGHASH_NONE azzera il bit 1. Il permesso di continuare a modificare scade da solo man mano che arrivano le firme, invece di reggersi sulle buone maniere del successivo detentore.

Il BIP-370 risolve le due questioni che la transazione mancante lasciava aperte. Il locktime diventa il valore più alto su cui gli input concordano, ricadendo sul campo globale, o su 0 quando questo è assente, e un requisito basato su altezza vince ogni parità. L'identità diventa il txid che si ottiene assemblando i campi con ogni numero di sequenza forzato a 0, dato che la sequenza può ancora essere modificata in seguito.

Dove lo vedi

PSBT versione 2 introduce un ruolo per cui il BIP-174 non ha equivalente, il Constructor. Un Creator apre il file con 0 input e 0 output e lo passa avanti; il Constructor li aggiunge, dopo aver controllato i flag modificabili. Un Creator che si aspetta contributi deve anche impostare la versione della transazione ad almeno 2, così che le funzioni legate ad essa, come OP_CHECKSEQUENCEVERIFY, restino disponibili.

La versione 2 riusa la serializzazione del BIP-174, quindi un file appare uguale dall'esterno, e la separazione è voluta: dei 24 vettori di test non validi nel BIP, 13 sono normali file versione 0 respinti per un campo o un numero di versione fuori posto. La conversione va solo in discesa, dato che un file versione 2 può essere ricostruito come file versione 0 a partire dai suoi stessi campi. L'implementazione di riferimento è la pull request 21283 di Bitcoin Core, e l'intestazione del BIP registra lo stato come Deployed.

Delle 41 recensioni di wallet su questo sito, due citano i PSBT, Sparrow (voto 4,7) e BlueWallet (4,2), e nessuna indica una versione. Supponi la versione 0 a meno che il software non dica altro, e prova uno strumento che non conosci con un importo piccolo prima che gestisca il resto.

PSBT versione 2 vs numero di versione della transazione

PSBT versione 2 numera il formato del file, mentre il numero di versione della transazione numera la transazione che viene assemblata al suo interno. Entrambi stanno nella stessa mappa globale, e il BIP-370 dice chiaramente che non sono lo stesso campo. PSBT_GLOBAL_VERSION è 2 in ogni file versione 2; PSBT_GLOBAL_TX_VERSION è un intero con segno di 32 bit per la transazione in costruzione, e il BIP-370 richiede che sia almeno 2 quando il Creator si aspetta contributi, ed è per questo che i due si confondono. Cambia il primo e i parser più vecchi rifiutano il file. Cambia il secondo e cambi quali regole di consenso giudicano la spesa.

Da non confondere con

Domande frequenti

Serve il PSBT versione 2 per usare un wallet hardware?

No. La versione 0, il formato definito dal BIP-174, copre una spesa ordinaria in cui input e output sono fissati prima che inizi qualsiasi firma. La versione 2 si giustifica solo quando un altro partecipante deve aggiungere bitcoin a una transazione che hai già iniziato.

Perché non esiste il PSBT versione 1?

Il numero è stato saltato di proposito. Il formato del BIP-174 è la versione 0, ma era chiamato colloquialmente versione 1 mentre si progettava il BIP-370, così il nuovo formato ha preso il numero 2 invece di lasciare due cose chiamate versione 1.

Un software versione 0 può aprire un file versione 2?

No, allo stato attuale. Il BIP-370 rende i due formati incompatibili di proposito, tramite il campo di versione globale, sebbene un file versione 2 possa essere convertito in uno versione 0 costruendo la transazione non firmata dai suoi campi.

Leggi anche

Fonti

Ultima revisione: 6 settembre 2026.

Termini correlati

Altro in Wallet e custodia

Leggi questa pagina in inglese