PSBT

El formato para pasar transacciones para firma

Una PSBT (Partially Signed Bitcoin Transaction — Transacción de Bitcoin Parcialmente Firmada) es un formato de datos para pasar transacciones para firma.

Este formato contiene los datos de una transacción no firmada, junto con los datos extra necesarios para firmar las entradas.

Así que, si exportas una transacción no firmada de tu cartera, probablemente estará en formato PSBT. La mayoría de las carteras modernas soportan exportar y firmar PSBTs (Electrum, Sparrow, Trezor, Coldcard).

Decodificador de PSBT

Decodificador básico para el formato de datos PSBT (BIP 174 / BIP 370).

Datos de la PSBT

0 bytes

Resultado

Propósito

¿Por qué necesitamos PSBTs?

Para firmar una transacción de bitcoin, necesitas algunas informaciones adicionales que no están en la transacción no firmada en sí. Por ejemplo, para crear una firma que desbloquee una entrada P2WPKH, necesitas el ScriptPubKey y el valor de la salida que se está gastando. Esa información está en la transacción anterior que creó la salida (UTXO), pero no en la transacción actual.

Eso no es un problema con una cartera conectada a Internet (cartera "caliente"), porque esa información puede obtenerse de la blockchain. Sin embargo, si usas una cartera offline para firmar (por ejemplo, un dispositivo hardware o cartera "fría"), no tiene una copia actualizada de la blockchain; entonces, aunque tenga la clave privada, no tiene acceso a la información extra necesaria para crear la firma. Por eso el formato PSBT permite pasar todos los datos necesarios para firmar la transacción en una cartera/dispositivo separado.

Beneficios

¿Por qué se creó el formato PSBT?

Una PSBT proporciona un formato estándar para pasar transacciones para firma. Antes de las PSBT, cada cartera implementaba su propio formato, lo que significaba que probablemente no era compatible con otras carteras. Con las PSBT, una transacción no firmada puede ser exportada y firmada por carteras y dispositivos distintos.

Por ejemplo, podrías construir una transacción que gasta una salida multisig (por ejemplo, P2MS) que requiere firmas de 3 personas distintas. Usando el formato PSBT, envías a cada firmante los datos de la transacción no firmada, y cada uno usa la cartera/dispositivo que prefiera. Las PSBT separadas pueden entonces combinarse para crear la transacción final firmada.

Estructura

¿Cómo es una PSBT?

El formato PSBT es una serie de pares clave-valor contenidos en mapas separados.

Cabecera

Una PSBT siempre comienza con bytes de cabecera para identificar los datos como una PSBT: los bytes mágicos 70736274 ('psbt' en ASCII) seguidos de un separador ff de 1 byte.

Ícono de herramienta ASCII

ASCII

Convierte entre bytes (en hexadecimal) y caracteres ASCII.

0 bytes
Bytes
0 caracteres
  • Los bytes hex entre 0x20 y 0x7f contienen los caracteres imprimibles.
  • Cualquier valor 0x1f o inferior es un carácter de control (no se mostrará, o mostrará un carácter extraño).
  • Cualquier valor 0x80 o superior no mostrará nada.

Consulta el estándar de codificación ISO 646 para más detalles.

Mapas

Después de la cabecera, la PSBT contiene tres tipos de mapa (en este orden):

El final de cada mapa se indica con un separador 00 de 1 byte.

Clave-Valor

Dentro de cada mapa hay una serie de pares clave-valor. Cada par tiene: una Clave (tamaño + tipo + datos, todo compact size/bytes) y un Valor (tamaño + datos). Estos pares se repiten hasta el final del mapa.

Uso

¿Cómo se usa una PSBT?

El ciclo de vida de una PSBT (versión 0) involucra distintos roles: el Creador (crea la transacción no firmada), el Actualizador (añade los datos extra necesarios para firmar), el Firmante (añade firmas), el Combinador (une PSBT de varios firmantes), el Finalizador (monta los scripts de desbloqueo finales) y el Extractor (extrae la transacción final firmada, lista para transmitir a la red).

Versión 0 × Versión 2. En la v0, todos los datos de la transacción no firmada viven en una única clave del mapa global (PSBT_GLOBAL_UNSIGNED_TX). La v2 (BIP 370) divide esos datos en claves separadas a lo largo de los tres mapas, lo que facilita añadir y quitar entradas y salidas antes de firmar. Para ello, la v2 introduce un nuevo rol (el Constructor) y ajusta levemente los existentes — pero el proceso general de trabajar con PSBTs sigue siendo el mismo.

Formato

¿Qué formato de datos usan las PSBTs?

Hay dos formatos "oficiales" para PSBTs: un archivo binario y una cadena base64. Así que, al exportar una PSBT de una billetera, normalmente recibes un archivo binario o una cadena base64. Ambos representan los mismos datos subyacentes, y puedes convertir directamente entre ellos:

# binario → base64
base64 -w0 file.psbt

# base64 → binario
echo "base64aqui" | base64 -d > file.psbt

# binario → hex (más fácil de inspeccionar)
xxd -p file.psbt | tr -d '\n' && echo ''

Historia

¿Cuándo surgieron las PSBTs?

La idea original de tener un formato estándar para exportar transacciones no firmadas fue propuesta por Pieter Wuille (que también acuñó el nombre "Partially Signed Bitcoin Transactions"). El formato en sí fue diseñado e implementado por Ava Chow.

La primera versión (PSBTv0) se introdujo en 2017; la segunda (PSBTv2), en 2021. La v2 usa la misma estructura de datos, pero introduce nuevos tipos de clave y modifica algunos roles para permitir añadir entradas y salidas antes de firmar — es decir, es una versión un poco más flexible que la v0.

No existe PSBTv1. La primera versión se llamó v0. Por el momento, Bitcoin Core aún no soporta la PSBTv2, pero ya es soportada por billeteras de terceros como Sparrow y Coldcard.

Resumen

En pocas palabras

Una PSBT es solo una transacción que incluye todos los datos extra necesarios para firmarla. La mayoría de las billeteras modernas entienden el formato PSBT, así que, si estás creando software que exporta/importa transacciones no firmadas, querrás dominar el manejo de PSBTs.

Pueden parecer intimidantes al principio por todos los tipos de clave disponibles, pero no necesitas entenderlos todos para aprovecharlas — solo los que sean relevantes para la necesidad de tu software. Empieza por descubrir cómo decodificar y codificar PSBTs; a partir de ahí, usa solo las claves que necesites para firmar los tipos de entrada que tu billetera deba manejar.

Recursos