PSBT v2 es el formato BIP 370 para intercambiar una transacción Bitcoin incompleta y datos para firmarla. Su número identifica la versión del contenedor PSBT, no automáticamente la versión de la transacción ni un nuevo método de validación de la red.
PSBT v0 de BIP 174 contiene una transacción global sin firmar. BIP 370 traslada sus datos de construcción a campos separados. Los participantes pueden añadir entradas y salidas después de crear el contenedor, respetando las reglas. Esto no permite modificar arbitrariamente partes firmadas ni convierte el archivo en un pago. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION debe ser 2 y PSBT_GLOBAL_UNSIGNED_TX debe estar ausente. El campo obligatorio PSBT_GLOBAL_TX_VERSION especifica por separado la versión de la transacción; el mapa global incluye también los recuentos de entradas y salidas. Cambiar solo la versión de un archivo antiguo no crea un PSBT v2 válido. [BIP 370 — PSBT Version 2]
Una entrada debe identificar el TXID anterior y el índice de la salida gastada. Una salida debe contener su importe en satoshi y scriptPubKey; al añadirla se actualiza también el recuento global correspondiente. Una sequence de entrada omitida equivale a 0xffffffff. Estos datos no sustituyen la verificación de UTXO ni de otra información que necesite el dispositivo firmante. [BIP 370 — PSBT Version 2]
En PSBT_GLOBAL_TX_MODIFIABLE, el bit 0 permite cambiar entradas y el bit 1 salidas. El bit 2 advierte de una firma SIGHASH_SINGLE: debe conservarse el emparejamiento de su entrada y salida en el índice correspondiente. El constructor debe examinar las firmas reales; un indicador activado no hace segura una modificación que sería inválida. [BIP 370 — PSBT Version 2]
Para nLockTime se elige un tipo de requisito compatible con todas las entradas y su valor máximo. Si ambos tipos son posibles, se prioriza la altura de bloque; no se añade una entrada incompatible. Sin requisitos de entradas se usa el valor global de reserva, o cero. Una nueva entrada no debe cambiar nLockTime si ya existen firmas. [BIP 370 — PSBT Version 2]
El firmante actualiza los indicadores según SIGHASH. Sin SIGHASH_ANYONECANPAY impide modificar entradas; sin SIGHASH_NONE impide modificar salidas y con SIGHASH_SINGLE señala el emparejamiento necesario. Tras la finalización, el extractor construye la transacción de red a partir de los campos. Difundirla y lograr su aceptación son pasos posteriores, no propiedades del contenedor transferido. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0 y v2 no son directamente intercambiables. Convertir a v0 exige construir la transacción sin firmar y respetar las reglas de campos de esa versión. BIP 371 define por separado los datos Taproot para ambas versiones. Admitir PSBT o Taproot no demuestra por sí solo que una cartera pueda importar, firmar y exportar PSBT v2. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
En un dispositivo fiable compara destinatarios, importes, tu salida de cambio y comisión con la intención original. Verifica los datos UTXO, los scripts y el SIGHASH utilizado; los metadatos de derivación de claves no prueban por sí solos la propiedad de una salida. Una prueba con el coordinador y dispositivo concretos comprueba compatibilidad, no la seguridad de todas las transacciones futuras. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
Para obtener la imagen más completa, lee esta entrada junto con PSBT, Hardware Wallet, Multisig, Taproot.