Saltar al contenido
buybitcoinsmart

Glosario / Transacciones y comisiones

Outpoint

¿Qué es un outpoint?
Un outpoint es el puntero de 36 bytes que identifica exactamente una salida de transacción al combinar el ID de 32 bytes de la transacción que la creó con el índice de 4 bytes de su posición.

Bitcoin no tiene números de cuenta, así que todo gasto debe indicar con precisión qué moneda está gastando. Escrito para personas, el puntero tiene la forma de un ID de transacción, dos puntos y un número, y sirve como clave primaria de toda la base de datos de UTXO que mantiene cada nodo completo. Si dos transacciones llegan a nombrar el mismo outpoint, solo una de ellas puede ser válida, y esa única regla es lo que impide que una moneda se gaste dos veces.

Cómo funciona

El outpoint va al principio de toda entrada de transacción, y es lo primero que busca un nodo al comprobar si un gasto está permitido.

En la red son dos campos sin separador: 32 bytes de hash de la transacción y después un índice de 4 bytes almacenado en little endian (el byte menos significativo primero). El hash se escribe en orden de bytes interno, que es el inverso del orden que se ve en un explorador de bloques, así que una transacción en bruto en hexadecimal parece hacer referencia a un ID de transacción escrito en orden inverso. Esto confunde a todo el que lee hexadecimal en bruto por primera vez, y es puramente una convención de visualización, no una diferencia en los datos.

Los índices se cuentan desde cero. La primera salida de una transacción es el índice 0, la segunda es el índice 1, y una moneda descrita como terminada en :2 es la tercera salida. El campo ocupa 4 bytes, así que el techo teórico es 4.294.967.295, al que no se acerca ninguna transacción real.

Hay un valor reservado. Una transacción coinbase, la que paga al minero, tiene una sola entrada cuyo outpoint consiste en 32 bytes cero con todos los bits del índice a uno, 0xffffffff. Esa combinación no apunta a nada e indica que esta entrada crea valor en lugar de moverlo.

La unicidad tuvo que exigirse mediante una regla en lugar de darse por supuesta. Dos transacciones coinbase con contenido idéntico producirían ID idénticos y, por tanto, outpoints duplicados, algo que ocurrió dos veces en los primeros años de bitcoin. El BIP30 prohibió ese patrón directamente, y después el BIP34 exigió que toda transacción coinbase incluyera la altura del bloque en su script de desbloqueo, lo que garantizaba contenidos distintos. El BIP34 pasó a ser exigible en el bloque 227.931, en marzo de 2013.

Dónde aparece

El outpoint es el identificador que se maneja siempre que se habla con precisión de una moneda concreta y no de un saldo.

Las pantallas de control de monedas de las billeteras muestran las tenencias como ID de transacción e índice. La interfaz RPC de Bitcoin Core maneja los dos campos como una unidad: la llamada RPC listunspent los devuelve, la llamada gettxout busca un outpoint y la llamada createrawtransaction los espera. Lightning usa el outpoint de la transacción de financiación como nombre permanente de un canal, y por eso los identificadores de canal en el software de nodo parecen un hash seguido de un número pequeño.

También es lo que conviene citar en una disputa. Una dirección puede haber recibido decenas de pagos y una transacción puede tener decenas de salidas, pero un outpoint nombra un único pago de un único monto en un único momento, sin ninguna ambigüedad que discutir. Si un exchange le pide que demuestre un depósito concreto, este es el nivel de precisión que zanja la conversación.

Outpoint frente a índice de salida

El índice de salida es un campo dentro de un outpoint, no un nombre abreviado de este. Por sí solo, un índice no aporta ninguna información, porque decenas de millones de transacciones tienen una salida en el índice 0 y el número no indica de cuál se trata. La confusión viene de las interfaces de los exploradores de bloques, que etiquetan el índice como "vout" y lo muestran en un lugar destacado, así que la gente empieza a llamar vout al puntero entero. Manténgalos separados cuando anote algo: el ID de transacción dice qué transacción, el índice dice qué salida dentro de ella, y solo los dos juntos identifican una moneda.

No confundir con

Preguntas frecuentes

¿Por qué el ID de transacción aparece escrito en orden inverso en una transacción en bruto?

Porque el outpoint guarda el hash en orden de bytes interno, mientras que los exploradores de bloques y las billeteras lo muestran invertido. Ambos se refieren a los mismos 32 bytes, y toda herramienta que maneja transacciones en bruto hace la inversión por usted.

¿Qué significa una moneda escrita como un hash seguido de dos puntos y un número?

Es un outpoint. El hash identifica la transacción que creó la moneda y el número es la posición de esa moneda en la lista de salidas de la transacción, contada desde cero. Juntos nombran una moneda gastable concreta.

Términos relacionados

Más en la sección Transacciones y comisiones

Leer esta página en inglés