Salida (Output)

Un paquete de bitcoins creado en una transacción

Una salida (output) es un paquete de bitcoins creado en una transacción.

Puedes crear varias salidas en una transacción, donde cada salida contiene un valor de bitcoin y una traba. Una transacción futura puede entonces gastar esas salidas (como entradas), desbloqueándolas, y crear nuevas salidas con nuevas trabas. Así que las salidas son los bloques de construcción para enviar y gastar dinero en bitcoin.

Una transacción solo puede gastar salidas no gastadas anteriormente, y una vez que una salida fue gastada, no puede gastarse de nuevo.

Cajas de Seguridad

Es más fácil pensar en una salida como una caja de seguridad. Cuando haces una transacción, estás seleccionando una caja existente, abriéndola y moviendo su contenido a nuevas cajas. Las trabas que colocas en estas cajas impiden que otra persona las abra (salvo la persona a la que quieres "enviar" los bitcoins). Puedes pensar en la blockchain como una gran bóveda llena de cajas de seguridad, o, como las llamamos en Bitcoin, salidas.

Cambio

Al gastar una salida, necesitas consumir el valor entero de esa salida; no puedes abrir una salida y gastar solo parte de los bitcoins, dejando el resto bloqueado en la salida original. Así que, si la salida contiene más bitcoins de los que quieres enviar, necesitas crear una salida de cambio para enviarte el resto de vuelta. La mayoría de las transacciones usan una salida de cambio (normalmente la última salida de la transacción).

Cualquier cantidad de bitcoins que no quede bloqueada en salidas se clasifica como la tarifa de transacción y la recoge un minero. Así que, si olvidas agregar una salida de cambio, perderás algunos bitcoins.

Estructura

¿Qué hace una salida de transacción?

Una salida en una transacción bruta es solo un valor (un entero) junto con un script de bloqueo. La estructura se repite para cada salida:

CampoTamañoFormato
Valor8 byteslittle-endian
Tamaño del ScriptPubKeyvariablecompact size
ScriptPubKeyvariablebytes

Valor

El campo valor tiene 8 bytes y puede contener valores entre 0 y 18446744073709551615. Está en little-endian (los bytes aparecen "al revés" en los datos brutos) y se mide en satoshis (1 satoshi = 0,00000001 BTC).

Ícono de herramienta Conversor de Unidades

Conversor de Unidades

Convierte entre las unidades comunes de bitcoin.

un bitcoin entero
una milésima de un bitcoin
una millonésima de un bitcoin
una cienmillonésima de un bitcoin

El total de las salidas de una transacción no puede exceder el total de las entradas.

Tamaño del ScriptPubKey

Contiene el tamaño del script de bloqueo que viene a continuación. Es un campo compact size, así que normalmente tiene 1 byte, pero puede expandirse para scripts grandes.

Í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.

ScriptPubKey

El campo ScriptPubKey contiene la traba que quieres colocar en la salida. Hay varios tipos de trabas, pero la más común es bloquear la salida a la clave pública de alguien (es decir, a su dirección); estos tipos de traba se llaman P2PKH y P2WPKH.

Técnicamente es posible que el campo ScriptPubKey esté vacío. Sin embargo, eso significaría que no hay traba en la salida, así que cualquiera podría gastarla.

Ejemplos

¿Cómo son las salidas de una transacción?

1 Salida

La forma más simple: una transacción con una única salida, que envía todo el valor (menos la tarifa) a un único destino. La estructura es solo monto + tamaño del scriptpubkey + scriptpubkey.

2 Salidas

El caso más común: una salida para el pago y otra para el cambio de vuelta al remitente. La estructura de salida simplemente se repite dos veces en los datos brutos.

3 Salidas

Puedes tener tantas salidas como quieras. Una transacción con 3 salidas (por ejemplo, dos pagos + un cambio) solo concatena la estructura de salida tres veces.

Monto Cero

Es posible definir el valor de una salida como 0 satoshis. Mira, por ejemplo, la transacción 3ef405a8...d225, que tiene una salida con valor cero.

ScriptPubKey Vacío

La transacción 87d8ed6a...253c tiene una salida con el ScriptPubKey vacío. Normalmente esa salida sería gastable por cualquiera (ya que no hay traba), pero el valor es cero, así que no hay valor en gastarla. En la práctica, esa transacción donó todos los satoshis de las entradas (100000 + 100000 sats) al minero como tarifa.

Resumen

¿Por qué usamos salidas?

Aunque sería posible manejar las monedas individualmente, sería poco práctico hacer una transacción separada por cada centavo en una transferencia. Para permitir que el valor se divida y combine, las transacciones contienen múltiples entradas y salidas. Normalmente habrá una única entrada de una transacción anterior mayor, o múltiples entradas combinando montos menores, y como máximo dos salidas: una para el pago y otra devolviendo el cambio, si lo hay, al remitente.
Satoshi Nakamoto, Whitepaper de Bitcoin

Así que, al final, las salidas son solo pequeños paquetes digitales de bitcoin, bloqueados a una condición de gasto, que pueden dividirse y recombinarse a lo largo de nuevas transacciones.