VOUT
El número de índice de una salida de transacción
Un VOUT es un número de índice para una salida de transacción.
Una transacción puede tener varias salidas, así que cada una recibe un número para poder referenciarla individualmente después.
En programación, empezamos a contar desde cero. Así que la primera salida de una transacción tiene un VOUT de 0.
Uso
¿Para qué sirve el VOUT?
Usas un VOUT en combinación con un TXID para seleccionar una salida que gastar como entrada en una transacción. Primero encuentras la transacción que creó la salida (por su TXID) y luego seleccionas la salida específica por su número VOUT.
Toda salida en la blockchain puede referenciarse por la combinación única TXID:VOUT. A esto se le llama "outpoint". Por ejemplo:
4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b:0– La salida de 50 BTC de la transacción génesis.a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d:0– La salida de 10.000 BTC de la transacción de la pizza.
Ejemplo
Encuentras el VOUT dentro de las entradas de los datos brutos de transacción. Ten en cuenta que, como es un campo de 4 bytes en little-endian, un VOUT de 3 aparece como 03000000 en los datos brutos.
Coinbase
¿Cuál es el VOUT de una transacción coinbase?
La entrada de una transacción coinbase no referencia ninguna salida existente, así que el VOUT simplemente se define con el valor máximo 0xFFFFFFFF (4294967295):
01000000 <- versión
01 <- conteo de entradas
0000000000000000000000000000000000000000000000000000000000000000 <- txid
ffffffff <- vout
07 <- tamaño del scriptsig
04b3936a1a017c <- scriptsig
ffffffff <- sequence
01 <- conteo de salidas
403d522a01000000 <- monto
43 <- tamaño del scriptpubkey
4104563053b8...492ac <- scriptpubkey
00000000 <- locktime
Transacción: 5b75086dafeede555fc8f9a810d8b10df57c46f9f176ccc3dd8d2fa20edd685b
Terminología
¿Por qué se llama VOUT?
El término VOUT es abreviación de vector output (vector de salida). Un "vector" es solo otro nombre para una lista o array de elementos. Satoshi programó Bitcoin en C++, y los arrays de tamaño dinámico en ese lenguaje se llaman "vectors".
std::vector es un contenedor de secuencia que encapsula arrays de tamaño dinámico.
El código original de Satoshi usaba un estilo de programación llamado "notación húngara", en el que los nombres de variables se prefijan con letras que indican el tipo de dato que contienen. La v, en particular, significa "vector". Así que vin y vout significan "in vector" y "out vector", y eran (y son) los nombres de las variables para las entradas y salidas de una transacción.
Por lo tanto, el nombre "vout" se origina en el estilo de programación de Satoshi, y es un término que aún usamos hoy para referirnos a salidas específicas de una transacción. Las entradas también se llaman a veces "vin"s.
Comandos
¿Dónde ves "vin" y "vout"?
Verás los términos "vout" y "vin" con más frecuencia al mirar transacciones en bruto en la línea de comandos de Bitcoin Core:
bitcoin-cli getrawtransaction [txid]
Obtiene los datos brutos de una transacción por su TXID. Añadir 1 (o true) al final muestra los datos en formato JSON:
$ bitcoin-cli getrawtransaction bcf91802a2aaa7de085759488b187fadf87a448f4f24f92cb38bb03285e2d8f9 1
{
"txid": "bcf918...d8f9",
"vin": [
{ "txid": "f94cd7...4493", "vout": 3, "sequence": 4294967295 }
],
"vout": [
{ "value": 0.00028300, "n": 0, "scriptPubKey": { "type": "pubkeyhash" } },
{ "value": 0.00079861, "n": 1, "scriptPubKey": { "type": "pubkeyhash" } }
]
} Fíjate en que el término "vout" también se usa para referirse a la lista entera de salidas de una transacción; pero, en el contexto de seleccionar entradas, el "vout" se refiere al número de índice de una salida. Sería más amigable llamarlos simplemente "entradas" y "salidas" en lugar de "vin"s y "vout"s, pero es más corto así — y acabas acostumbrándote. Bienvenido al mundo de la programación.