¿Cómo hacer que la transacción del bloque de génesis sea gastable?

Leí esta pregunta ¿Por qué no se puede gastar la base de monedas del bloque de génesis? . Dice que debido a alguna peculiaridad ( la transacción de la base de monedas del bloque de génesis no se agrega a la base de datos de transacciones globales ) la transacción de la base de monedas del bloque de génesis no se puede gastar.

¿Cómo agregar esta transacción a la base de datos de transacciones global? ¿Qué cambios son necesarios para que esta transacción sea gastable?

Respuestas (2)

El código fuente de bitcoin tiene un caso especial para excluir la conexión de las transacciones a la vista. Se puede encontrar aquí . Presumiblemente, simplemente eliminaría esta restricción para poder gastar monedas de génesis. También requeriría borrar su directorio de datos y reiniciar su nodo para volver a descargar la cadena de bloques.

Si está trabajando con la red bitcoin real (que sospecho que no es así), no querrá hacer esto. Aunque parece poco probable que Satoshi alguna vez regrese e intente gastar estas monedas, tal acción conduciría a que su nodo se desvíe del resto de la red.

Eliminé el fragmento de código ( github.com/bitcoin/bitcoin/blob/v0.10.2/src/… ) y borré datadir. Luego intenté probarlo en modo regtest bitcoind -regtest -daemon, pero el demonio no se inicia. Imprime que Bitcoin Server se está iniciando, pero cuando lo uso bitcoin-cli -regtest -getbalance, imprime un error: no se pudo conectar al servidor .

Sería trivialmente fácil hacer el cambio. Solo un par de líneas de código para agregar e incluir el bloque de génesis tx en el utxo.

Sin embargo, comprenda que la parte difícil es que crearía una bifurcación dura. A menos que el cambio se convierta en parte de la mayoría de los nodos, violaría las reglas de consenso. Si alguna vez se gastara esa salida, cualquier nodo que ejecute código anterior se dividiría de cualquier nodo que ejecute código más nuevo, ya que algunos nodos verían el nuevo txn como válido y otros como no válido. Esto es cierto para cualquier escenario de bifurcación dura. Por esta razón, es poco probable que alguna vez sucedan bifurcaciones duras por razones menores o triviales.

Sí, crearía una bifurcación dura. Estoy tratando de encontrar en qué parte del código fuente tengo que hacer los cambios. ¿Qué función tengo que modificar o qué función llamar?