Skip to main content

Transacción Cruda | Bitcoin Glossary | Mapping Bitcoin

Transacción Cruda

Desarrollo

Also known as: raw tx, serialized transaction

Transacción Bitcoin en formato hexadecimal que contiene inputs, outputs, firmas y metadata completos, lista para ser difundida a la red peer-to-peer.

Visión general

Una transacción cruda es la representación a nivel de bytes de una transacción Bitcoin, típicamente mostrada como una cadena hexadecimal. Contiene toda la información que un nodo necesita para validar y retransmitir la transacción: la versión, las entradas (haciendo referencia a salidas anteriores que se están gastando), las salidas (definiendo nuevas condiciones de bloqueo), los datos de testigo (para transacciones SegWit) y el tiempo de bloqueo. Trabajar con transacciones crudas da a los desarrolladores control completo sobre la construcción de transacciones.

Estructura de la transacción cruda

Diseño de Transacción Serializada:

┌──────────┬───────────┬───────────┬──────────┬──────────┐
│ Versión  │  Conteo   │  Conteo   │ Testigo  │ Bloqueo  │
│ (4 bytes)│ Entradas  │ Salidas + │ (solo    │ temporal │
│          │ + Entradas│  Salidas  │  SegWit) │ (4 bytes)│
└──────────┴───────────┴───────────┴──────────┴──────────┘

Cada Entrada:                    Cada Salida:
┌─────────────────────┐        ┌──────────────────────┐
│ ID TX Anterior      │        │ Valor (satoshis)     │
│ (32 bytes)          │        │ (8 bytes)            │
├─────────────────────┤        ├──────────────────────┤
│ Índice de Salida    │        │ Longitud del Script  │
│ (4 bytes)           │        │ (varint)             │
├─────────────────────┤        ├──────────────────────┤
│ Longitud ScriptSig  │        │ ScriptPubKey         │
│ + ScriptSig         │        │ (script de bloqueo)  │
├─────────────────────┤        └──────────────────────┘
│ Secuencia           │
│ (4 bytes)           │
└─────────────────────┘

Trabajando con transacciones crudas mediante RPC

La interfaz RPC de Bitcoin Core proporciona comandos para cada etapa del manejo de transacciones crudas:

  1. createrawtransaction — Construir una transacción sin firmar especificando entradas y salidas
  2. decoderawtransaction — Inspeccionar una transacción codificada en hexadecimal en JSON legible por humanos
  3. signrawtransactionwithwallet — Firmar la transacción con las claves de la billetera
  4. sendrawtransaction — Difundir la transacción firmada a la red

Casos de uso

  • Firma sin conexión — Construir transacciones en una máquina en línea, firmar en un dispositivo con espacio de aire y difundir desde la máquina en línea
  • Scripts personalizados — Construir transacciones con scripts de bloqueo no estándar para pruebas o protocolos avanzados
  • Control de comisiones — Establecer manualmente entradas y salidas para una gestión precisa de comisiones
  • Análisis de transacciones — Decodificar e inspeccionar transacciones existentes para depuración o propósitos forenses

PSBT como alternativa

Para la mayoría de los flujos de trabajo de firma de múltiples pasos, los PSBTs (BIP174) ahora se prefieren sobre las transacciones crudas. Los PSBTs llevan metadatos adicionales (información UTXO, rutas de derivación, firmas parciales) que las transacciones hexadecimales crudas no tienen, haciéndolos más seguros y portátiles para flujos de trabajo con billeteras de hardware y multisig.

Concepto erróneo común

Una transacción cruda no es "cruda" en el sentido de estar incompleta o sin procesar. Una transacción cruda completamente firmada es una transacción Bitcoin válida y completa lista para difundir. El término "cruda" simplemente se refiere al formato binario serializado en contraste con una representación JSON legible por humanos.