Transacción
Los datos que desbloquean y bloquean lotes de bitcoins
Una transacción de bitcoin no es más que un conjunto de datos que desbloquea y bloquea lotes de bitcoins.
Más precisamente, una transacción:
- Selecciona lotes existentes de bitcoins (entradas) y los desbloquea.
- Crea nuevos lotes de bitcoins (salidas) y les coloca nuevas trabas.
Puedes tener varias entradas y salidas en una sola transacción. Así que puedes pensar en una transacción como parte de una cadena de salidas: una transacción crea una salida, y una transacción futura selecciona esa salida (como entrada) y la desbloquea para crear nuevas salidas.
Una moneda digital contiene la clave pública de su dueño. Para transferirla, el dueño firma la moneda junto con la clave pública del siguiente dueño. Cualquiera puede verificar las firmas para confirmar el cambio de propiedad.
Separador de Transacciones
Constructor de Transacciones
Estructura
¿Cómo es una transacción bruta de bitcoin?
Una transacción bruta está formada por campos, cada uno con bytes de datos. Todas las transacciones tienen la misma estructura básica, así que, para decodificarlas, solo necesitas saber el tamaño de cada campo y el formato de los datos:
| Campo | Tamaño | Formato |
|---|---|---|
| Versión | 4 bytes | little-endian |
| Marker & Flag (segwit) | 2 bytes | 0001 |
| Contador de Entradas | variable | compact size |
| Entrada(s): txid, vout, tam. scriptsig, scriptsig, sequence | variable | — |
| Contador de Salidas | variable | compact size |
| Salida(s): valor, tam. scriptpubkey, scriptpubkey | variable | — |
| Testigo (segwit) | variable | — |
| Locktime | 4 bytes | little-endian |
Versión
Los primeros 4 bytes indican el número de versión de la transacción (en little-endian), lo que permite actualizar la estructura de las transacciones en el futuro. Actualmente es 01000000 o 02000000.
Marker & Flag (Opcional)
En las transacciones segwit, hay dos bytes extra después de la versión: el marker (00) y el flag (01). El marker 00 indicaría cero entradas en una transacción legada, lo cual señala a los nodos que esta es una transacción segwit con un campo de testigo al final.
Compact Size
Little Endian
Ejemplos
¿Cómo es una transacción bruta?
1. Transacción Legada Básica
01000000 <- versión
01 <- contador de entradas
...txid... ...vout... ...scriptsig... ffffffff
02 <- contador de salidas
...valor... ...scriptpubkey... (× 2)
00000000 <- locktime
2. Transacción SegWit Básica
Igual a la legada, pero con el marker & flag (0001) después de la versión y un campo de testigo antes del locktime.
3. Transacción con Entradas Legadas y SegWit
Una misma transacción puede mezclar los dos tipos de entrada. En ese caso, tiene el marker & flag de una transacción segwit, pero, en la sección de testigo, la entrada legada tiene un campo de testigo vacío (00 elementos) — pues se desbloquea mediante el ScriptSig — mientras que la entrada segwit trae sus elementos de testigo. Recuerda: cada entrada debe tener su propio campo de testigo.
TXID, wTXID, Tamaño y Tarifa
A partir de los datos de la transacción, puedes derivar:
- El TXID — HASH256 de los datos (sin marker/flag/witness), invertido.
- El wTXID — HASH256 de todos los datos (incluyendo testigo), invertido.
- El tamaño — en bytes, unidades de peso y bytes virtuales.
- La tarifa — la suma de las entradas menos la suma de las salidas.
Resumen
En pocas palabras
Definimos una moneda electrónica como una cadena de firmas digitales. Cada dueño transfiere la moneda al siguiente firmando digitalmente un hash de la transacción anterior y la clave pública del siguiente dueño, y añadiendo esto al final de la moneda. Un beneficiario puede verificar las firmas para verificar la cadena de propiedad.
Pero, al final, una transacción de bitcoin es solo un montón de bytes. Si los decodificas, descubrirás que solo desbloquean lotes de bitcoins y los bloquean en nuevos lotes. Eso es todo.
Las transacciones brutas pueden parecer ilegibles a primera vista, pero, si averiguas el tamaño de cada campo y cómo están formateados, cualquiera puede decodificarlas para ver qué hacen. Y, si puedes decodificar una transacción, puedes decodificar cualquier transacción de la blockchain.