Transacciones antiguas en la cadena de bloques

Después de mucha investigación en la red, todavía puedo averiguar si la siguiente idea es relevante o no:

Sé (o al menos creo que sé) que cada transacción consume todos los bitcoins presentes en las direcciones de entrada. Entonces, si una dirección de bitcoin está en las entradas de una transacción, no tiene que mirar todas las transacciones más antiguas que esta para saber cuántos bitcoins hay para esta dirección. Eso significa que podríamos eliminar todas estas transacciones antiguas de los bloques manteniendo solo los hashes mediante el truco de poda de Merkle. Con el tiempo, los Merkle Trees en cada bloque viejo se volverán cada vez más pequeños para que se pueda ahorrar espacio.

Entiendo que borrará para siempre una parte de las transacciones, pero la cantidad de bitcoins para cada dirección de bitcoin seguirá siendo correcta y tal vez ese sea el precio a pagar para mantener una cadena de bloques manejable.

¿Ya hay algún trabajo en esta dirección? ¿Es esta una idea estúpida?

gracias por su ayuda

Respuestas (1)

Una transacción consume todas las monedas de las salidas de transacciones conectadas. Pero una dirección de bitcoin puede tener múltiples transacciones. Entonces, aunque se consuma una transacción, eso no significa que la dirección no tenga otras monedas.

Su idea general, sin embargo, es correcta. Puede eliminar una transacción una vez que se hayan gastado todas sus salidas (una transacción puede tener más de una salida, por lo que debe realizar un seguimiento de cada salida). Esto ha sido discutido e incluso implementado en clientes bitcoin alternativos. No sé si podría implementarse en el cliente de referencia (bitcoind/bitcoin-qt) o cuándo.

Tengo una implementación en la que he estado trabajando que usa una base de datos SQL. Hasta el momento, ha procesado la cadena de bloques hasta agosto de 2013 y hay 2.000.000 de transacciones con salidas no gastadas. La base de datos en sí tiene alrededor de 1,2 GB en este momento, por lo que es un ahorro significativo en comparación con la cadena de bloques completa (15,1 GB en mi sistema). El inconveniente es que no se puede suministrar la cadena de bloques completa a otros nodos (yo conservo solo los últimos 30 días). Por lo tanto, aún necesitaría nodos completos para proporcionar la cadena de bloques o descargar sitios/torrents para permitir que un nuevo nodo se ponga al día.