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:
createrawtransaction— Construir una transacción sin firmar especificando entradas y salidasdecoderawtransaction— Inspeccionar una transacción codificada en hexadecimal en JSON legible por humanossignrawtransactionwithwallet— Firmar la transacción con las claves de la billeterasendrawtransaction— 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.