Glosario / Billeteras y custodia
PSBT versión 2
También se conoce como PSBTv2.
- ¿Qué es PSBT versión 2?
- PSBT versión 2 es el formato de transacción parcialmente firmada que elimina la transacción sin firmar fija, de modo que un participante todavía puede añadir entradas y salidas después de que se haya creado el archivo.
Se especifica en el BIP-370.
La versión 0 fija el conjunto de entradas y salidas en el momento de la creación; la versión 2, en cambio, traslada cada detalle a mapas por entrada y por salida. El BIP-370 se asignó el 14 de enero de 2021 y omite el número 1, ya que el formato del BIP-174 es la versión 0 y se llamaba coloquialmente versión 1. Para un tenedor, la versión 2 solo importa en una sesión de firma donde otro participante añade monedas a una transacción que usted ya inició.
Cómo funciona
PSBT versión 2 conserva el contenedor externo del BIP-174 y reorganiza lo que hay dentro de él. Dos reglas definen el cambio: PSBT_GLOBAL_UNSIGNED_TX debe estar ausente, y PSBT_GLOBAL_VERSION debe estar presente y fijado en 2.
Lo que la transacción eliminada solía transportar se redistribuye en doce campos nuevos. Cinco son globales: la versión de la transacción (0x02), el locktime de reserva (0x03), el conteo de entradas (0x04), el conteo de salidas (0x05) y un byte de indicadores modificables (0x06). Cinco están en cada entrada: el txid previo de 32 bytes (0x0e), el índice de la salida gastada (0x0f), el número de secuencia (0x10), y dos locktimes obligatorios, uno basado en marca de tiempo, igual o superior a 500000000 (0x11), y otro basado en altura, por debajo de ese valor y por encima de cero (0x12). Las salidas ganan dos, el monto en satoshis como un entero de 64 bits con signo en formato little endian (0x03) y el script (0x04).
El byte de indicadores modificables es el que hace el trabajo real. El bit 0 indica que todavía se pueden añadir o eliminar entradas, el bit 1 indica lo mismo para las salidas, y el bit 2 registra que alguna firma ya confirmó con SIGHASH_SINGLE, por lo que su emparejamiento de entrada y salida debe conservarse. Un firmante debe restringir esos bits a medida que avanza: una firma que no usa SIGHASH_ANYONECANPAY borra el bit 0, y una que no usa SIGHASH_NONE borra el bit 1. El permiso para seguir editando expira por sí solo a medida que llegan las firmas, en lugar de depender de los buenos modales del siguiente tenedor.
El BIP-370 resuelve las dos preguntas que la transacción faltante dejó abiertas. El locktime se convierte en el valor más alto en el que coinciden las entradas, recurriendo al campo global, o a 0 cuando este está ausente, y un requisito basado en altura gana cualquier empate. La identidad se convierte en el txid que se obtiene ensamblando los campos con cada número de secuencia forzado a 0, ya que la secuencia todavía se puede editar más adelante.
Dónde aparece
PSBT versión 2 introduce un rol para el que el BIP-174 no tiene equivalente, el Constructor. Un Creador abre el archivo con 0 entradas y 0 salidas y lo pasa; el Constructor las añade, después de comprobar los indicadores modificables. Un Creador que espera contribuciones también debe fijar la versión de la transacción en al menos 2, para que las funciones condicionadas a ella, como OP_CHECKSEQUENCEVERIFY, sigan disponibles.
La versión 2 reutiliza la serialización del BIP-174, así que un archivo se ve igual desde afuera, y la separación es deliberada: de los 24 vectores de prueba inválidos del BIP, 13 son archivos de versión 0 comunes, rechazados por un campo fuera de lugar o un número de versión. La conversión es cuesta abajo, ya que un archivo de versión 2 se puede reconstruir como uno de versión 0 a partir de sus propios campos. La implementación de referencia es el pull request 21283 de Bitcoin Core, y el encabezado del BIP registra el estado como Deployed.
De las 41 reseñas de billeteras de este sitio, dos mencionan PSBT, Sparrow (calificada con 4,7) y BlueWallet (4,2), y ninguna indica una versión. Suponga la versión 0 a menos que el software indique lo contrario, y pruebe una herramienta desconocida con un monto pequeño antes de que esta maneje el resto.
PSBT versión 2 frente a número de versión de la transacción
PSBT versión 2 numera el formato del archivo, mientras que el número de versión de la transacción numera la transacción que se está ensamblando dentro de él. Ambos viven en el mismo mapa global, y el BIP-370 dice claramente que no son el mismo campo. PSBT_GLOBAL_VERSION es 2 en todo archivo de versión 2; PSBT_GLOBAL_TX_VERSION es un entero con signo de 32 bits para la transacción que se está construyendo, y el BIP-370 exige que sea al menos 2 cuando el Creador espera contribuciones, razón por la cual los dos se confunden. Cambie el primero y los analizadores más antiguos rechazan el archivo. Cambie el segundo y cambiará cuáles son las reglas de consenso con las que se juzga el gasto.