Entrada (Input)
Una salida anterior siendo gastada en una transacción
Una entrada (input) es una salida que se está gastando en una transacción. Es básicamente una referencia a una salida no gastada anterior, junto con el código de desbloqueo que desbloquea la salida para que pueda gastarse.
Puedes tener varias entradas en una transacción. Eso es porque a veces necesitas consumir varias salidas (como entradas) para poder crear el valor total que quieres enviar.
La mayoría de las transacciones tienden a tener 1 o 2 entradas, pero puedes tener miles. Sin embargo, cuantas más entradas, mayor es la transacción (en bytes), lo que la hace más cara, ya que las transacciones se seleccionan para minería en función de la tarifa por espacio que ocupan. Así que quieres seleccionar estratégicamente el menor número de entradas que te permita crear el valor total.
Estructura
¿Qué hace una entrada de transacción?
La sección de entrada de las transacciones brutas tiene la siguiente estructura (repetida para cada entrada):
| Campo | Tamaño | Formato |
|---|---|---|
| TXID | 32 bytes | orden natural |
| VOUT | 4 bytes | little-endian |
| Tamaño del ScriptSig | variable | compact size |
| ScriptSig | variable | bytes |
| Sequence | 4 bytes | little-endian |
Como puedes ver, cada entrada referencia una salida anterior por su TXID y VOUT, y luego proporciona el código de desbloqueo por medio del campo ScriptSig.
Para scripts de bloqueo SegWit (por ejemplo, P2WPKH, P2WSH), el código de desbloqueo se mueve del ScriptSig al campo de testigo (witness).
Ejemplos
¿Cómo es una entrada de transacción?
1. Una Entrada
Una transacción básica con una entrada (campos separados):
02000000 <- versión
01 <- contador de entradas
9945a5a440f2d3712ff095cb1efefada1cc52e139defedb92a313daed49d5678 <- txid
01000000 <- vout
6a <- tamaño del scriptsig
473044022031b6a6b7...eee971dc <- scriptsig
ffffffff <- sequence
01 <- contador de salidas
a702000000000000 <- valor
17 <- tamaño del scriptpubkey
a9148ce773d254dc5df886b95848880e0b40f105643287 <- scriptpubkey
00000000 <- locktime
Little-Endian. El campo de valor en las transacciones brutas está en little-endian. Convirtiendo a702000000000000 a big-endian, obtenemos 00000000000002a7, que en decimal es 679 sats.
Valores de las entradas. Las entradas en los datos brutos no contienen el valor de la salida que se está gastando. Para descubrir el valor, necesitas volver a la transacción que creó la salida.
2. Dos Entradas
Esta transacción tiene dos entradas (cada una referencia una salida anterior distinta):
02000000 <- versión
02 <- contador de entradas
e925fec58184fe99a4789993b62963b0813851793350b1aec99f3e75466225a5 <- txid (entrada 1)
19000000 <- vout
6a <- tamaño del scriptsig
473044022046e23b8f...724b9f <- scriptsig
ffffffff <- sequence
ca45253a9f908429e09986454e83dfaab6ea30502356078477c81f57967a5964 <- txid (entrada 2)
1f000000 <- vout
6b <- tamaño del scriptsig
483045022100f39a8b1f...724b9f <- scriptsig
ffffffff <- sequence
...
3. Transacción de la Pizza (131 entradas)
Esta es la famosa transacción de la pizza, que tiene 131 entradas. Reúne muchas entradas más pequeñas para crear una única salida grande de 10.000 BTC. Fíjate en que selecciona salidas de varias transacciones diferentes — lo cual es perfectamente normal; mientras puedas desbloquear la salida para gastarla, no importa de qué transacción provenga.
Este tipo de transacción suele ocurrir cuando has recibido varios pagos pequeños y quieres enviar una cantidad grande de una sola vez. Es normal, pero significa que tu transacción será más grande (en bytes) y, por tanto, más cara.
Coinbase
¿Qué es una entrada coinbase?
Una coinbase es un tipo especial de entrada que se encuentra en las transacciones coinbase. La entrada de una transacción coinbase no necesita referenciar ninguna salida anterior, ya que la coinbase solo sirve para cobrar la recompensa del bloque. Por eso, el TXID es todo ceros, el VOUT es el valor máximo, y el minero es libre de poner cualquier dato dentro del ScriptSig. Por ejemplo, esta es la transacción coinbase del bloque 56.214:
01000000 <- versión
01 <- contador de entradas
0000000000000000000000000000000000000000000000000000000000000000 <- txid
ffffffff <- vout
07 <- tamaño del scriptsig
0453ec131c0108 <- scriptsig
ffffffff <- sequence
...
Selección de Monedas
¿Puedes elegir las entradas de tu transacción?
Si usas una billetera de bitcoin para hacer una transacción, una buena billetera te permite seleccionar tus propias entradas. Un buen ejemplo de billetera que permite esto es Electrum: te muestra las salidas que tienes disponibles para gastar, y eliges cuáles quieres usar como entradas en tu próxima transacción.
El beneficio de esto es que puedes elegir qué monedas quedarán asociadas a la dirección de destino, lo cual puede ser bueno para la privacidad. Sin embargo, muchas billeteras orientadas a principiantes no tienen esta función: seleccionan automáticamente la combinación más eficiente de entradas por ti, sin cargarte con la complejidad de elegirlas. Esto es perfectamente normal, pero, si quieres más control, busca una billetera que ofrezca la selección manual de monedas (coin control).