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:

  1. Selecciona lotes existentes de bitcoins (entradas) y los desbloquea.
  2. 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.
Satoshi Nakamoto, satoshi.nakamotoinstitute.org
Ícono de herramienta Separador de Transacciones

Separador de Transacciones

Pegue una transacción bruta (hexadecimal) para dividirla en sus campos individuales.

Ícono de herramienta Constructor de Transacciones

Constructor de Transacciones

Construya los datos brutos de una transacción.

Tipo

Versión

0d
Transacción básica

Entradas (1)

Salidas (1)

Bloqueo

0d
Altura de bloque

Datos brutos de la transacción

0 bytes 0 vbytes
Gif animado que muestra qué hace cada campo en los datos brutos de una transacción legada.
Un gif que Greg hizo en 2015 mostrando qué hace cada campo en los datos brutos de una transacción (legada).

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:

CampoTamañoFormato
Versión4 byteslittle-endian
Marker & Flag (segwit)2 bytes0001
Contador de Entradasvariablecompact size
Entrada(s): txid, vout, tam. scriptsig, scriptsig, sequencevariable
Contador de Salidasvariablecompact size
Salida(s): valor, tam. scriptpubkey, scriptpubkeyvariable
Testigo (segwit)variable
Locktime4 byteslittle-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.

Ícono de herramienta Compact Size

Tamaño compacto

Convierta entre un número y su codificación compact size (el varint usado en Bitcoin).

0d
0 bytes
Prefijo

El primer byte indica qué bytes codifican el entero:

Nota: los bytes que codifican el entero están en little endian.

Ícono de herramienta Little Endian

Little Endian

Convierte un número entre los órdenes de bytes big-endian y little-endian.

0d
0x
0 bytes
0x
0 bytes
Tamaño del campo

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:

TXID

Cree un TXID a partir de los datos de una transacción bruta.

0 bytes

Bytes de la transacción efectivamente usados en el hash (sin marker, flag ni testigo):

Usado internamente dentro de los datos de la transacción bruta

0 bytes

Usado externamente al buscar transacciones en exploradores de bloques

0 bytes

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.
Satoshi Nakamoto, Whitepaper de Bitcoin

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.

Recursos