¿Se permite que las transacciones de Bitcoin no tengan salidas (es decir, todas las entradas se convierten en tarifas de transacción)?

Estoy interesado en el posible uso de la cadena de bloques de Bitcoin (u otra altcoin) como un libro mayor distribuido generalizado, lo que significa que es útil para rastrear información distinta de las transacciones de monedas propiamente dichas. Un requisito previo para eso parecería ser la capacidad de pagar transacciones cuyo propósito principal no sea mover Bitcoins de una dirección a otra. Entonces, ¿pueden las transacciones de Bitcoin no enumerar salidas, dejando así todas las entradas como una recompensa de tarifa de transacción para el minero?

Respuestas (1)

No. Si crea uno, Bitcoin Core no lo transmitirá ni extraerá. Si entra en un bloque, será rechazado. Del código fuente de Bitcoin Core ( tx_verify.cpp:164):

if (tx.vout.empty())
    return state.DoS(10, false, REJECT_INVALID, "bad-txns-vout-empty");

Sin embargo, puedes crear un vout con 0 satoshis. Esa no es una transacción "estándar", por lo que el software no la extraerá de forma predeterminada. Sin embargo, si entra en un bloque, es válido.

Hay otra forma de hacerlo. Usando el OP_RETURNcódigo de operación. OP_RETURNen una salida de transacción obliga a cualquiera que haga referencia a esa salida a no gastarla (el script regresa y la transacción no es válida). Aunque la salida existe, es demostrablemente indiscutible .

Sin embargo, si un minero personalizado pone una tarifa de transacción TX del 100% en un bloque, sería aceptado y se construirían nuevos bloques encima.
@makerofthings7 Eso no es correcto. Es una regla de red estricta que las transacciones tengan al menos una entrada y al menos una salida. Poner una transacción sin salidas en un bloque invalidaría ese bloque. Sin embargo, en referencia a los consejos anteriores, puede tener salidas con 0 satoshi. La red tampoco transmitirá tales transacciones, pero son válidas dentro de los bloques.
Acabo tx_verify.cppde buscar una regla que rechace cualquier voutvalor de 0, pero no pude encontrar ninguna. ¿Alguien puede señalar dónde Bitcoin Core rechazaría tal transacción?