¿Por qué no se considera ya la poda en este momento?

Entiendo que Bitcoin se escala en varios significados ( Escalabilidad ), y la poda es un concepto importante ( Pregunta SE ). También entiendo que una "Verificación de pago simplificada" (SPV) necesita confiar mucho en el par del que obtiene la cadena de bloques.

Una poda muy conservadora (por ejemplo, transacciones de más de seis meses y gastadas) no haría mucho daño, especialmente cuando sería solo una opción de configuración para bitcoin-qt. De esa forma, el valor predeterminado es el nodo completo, pero es fácil tener un "nodo pequeño".

Pero no lo veo venir de todos modos pronto. ¿Hay una razón? ¿Es tan importante tener nodos llenos en el momento que los desarrolladores digan "o vas a por todo o nada"? ¿O es el esfuerzo de desarrollo el cuello de botella? En mi humilde opinión, una gran red de nodos que no sean SPV es más importante que una pequeña red de nodos completos.

Editar: Pongámoslo más concreto: ¿Existe un problema de seguridad importante de no tener el historial completo de transacciones del mundo hasta el bloque de génesis?

Respuestas (2)

Se está considerando la poda, de hecho, se tuvo en cuenta al diseñar el formato de base de datos 0.8. Los resultados de transacciones no utilizados (que es el único dato esencial necesario para la validación) ya se guardan en una base de datos separada, por lo que técnicamente es perfectamente posible eliminar bloques antiguos. Es probable que requiera algunos pequeños cambios para asegurarse de que el código no se rompa cuando se soliciten datos de bloque que ya no existen, pero esto es fácil.

La razón por la que no se implementa es por el efecto en la red como un todo. Si una gran cantidad de nodos comienza a eliminar los datos de bloques antiguos, será más difícil para los nuevos nodos que se inician encontrar los datos históricos para verificar. Esto no es un problema como tal; espero que queden suficientes copias para que no sea un verdadero problema, pero necesitamos un mecanismo de descubrimiento para que los nodos no necesiten probar arbitrariamente a los pares hasta que lleguen a uno que tenga los bloques que necesitan. . De hecho, hay una discusión sobre este derecho en la lista de correo de desarrollo de bitcoin.

EDITAR: La poda se implementó en Bitcoin Core 0.11 y es completamente funcional desde 0.12.

¡Entonces el problema actual a resolver está en el nivel de la red! Los nodos tienen nodos de búsqueda, ¡con cierta información! DHT suena muy prometedor para mí para resolver esto.
Pregunta adicional: imagina que realmente perderíamos los datos históricos. ¿Detendría Bitcoin? O sería un, hum, "consenso sobre los activos, aunque no sabemos cómo llegamos aquí".
Presumiblemente, los nodos que ofrecen un historial completo serían más costosos de mantener que los nodos que han sido podados. ¿Cuál es el incentivo para que alguien ejecute nodos con el historial completo?
¿Cuál es el incentivo para hacer que el nodo completo de cualquiera sea accesible para otros?

AFAIK, todas las salidas de transacciones se eliminan de la base de datos cuando se gastan. Sin embargo, no de la base de datos de bloques, pero simplemente no tiene mucho sentido eliminarlo de la base de datos de bloques, ya que solo empeoraría el rendimiento del nodo.

Y no puede purgar las salidas no gastadas, ahora importa la antigüedad que tengan, por razones bastante obvias.

Creo que podrías estar malinterpretando la pregunta. Tiene sentido eliminar algunas/todas las transacciones de la copia de la cadena de bloques del cliente ( es decir, "base de datos de bloques"), ya que ahorraría mucho espacio en disco para los clientes. El protocolo permite específicamente estos clientes parcialmente depurados (clientes SPV), por eso el protocolo utiliza una raíz Merkle de las transacciones y no una simple lista de transacciones. Pero SPV no es parte del cliente estándar en este momento y esta pregunta es realmente sobre por qué eso no parece ser una prioridad.
Bueno, teniendo en cuenta que toda la cadena de bloques ahora tiene apenas 8 GB, obviamente tenemos una comprensión diferente de lo que es mucho espacio en disco . Además, si elimina transacciones de su base de datos, ya no podrá servir bloques, por lo que no podrá actuar como un nodo real.
Que 8 GB no sea mucho espacio en bloque para las computadoras de escritorio y portátiles actuales podría no ser una mala respuesta. (Estoy un poco de acuerdo con eso. Aunque realmente es la descarga y la verificación lo que parece causar la mayoría de los problemas, no el espacio en disco en sí). La pregunta era bastante específica sobre la propia cadena de bloques y los clientes de SPV. (Además, alguien que usa una computadora portátil con un solo SSD de 128 GB podría no estar de acuerdo con su evaluación de que 8 GB no es mucho).
Oh, pensé que los clientes de SPV solo están interesados ​​​​en los encabezados y sus transacciones, a diferencia de un nodo de poda que tiene todas las transacciones no gastadas.
@Gigi: sí, cuando tiras una transacción vieja gastada, el mundo se olvidaría de ellos cuando realmente todos los nodos se comportan así. Pero, ¿qué se considera "incapaz de actuar como un nodo"?
Al menos según tengo entendido, SPV solo significa que el cliente puede solicitar los detalles de la transacción "a pedido" en lugar de descargarlos y verificarlos por adelantado. Un cliente SPV podría conservar sus propias transacciones, pero realmente podría conservar cualquier subconjunto.
@Borph, por "incapaz de actuar como un nodo" quise decir que la característica principal de un nodo de bitcoin es servir bloques para la red P2P: bloques completos, y todos ellos, comenzando desde el n. ° 1. Entiendo que, en teoría, solo puede servir bloques parciales (saltando así la transacción gastada), pero el problema es que el protocolo actual no lo admite. Y si desea cambiar el protocolo y luego asegurarse de que todos los nodos estén actualizados, antes de comenzar a atenderlos solo en bloques parciales... bueno, eso seguramente llevará un tiempo; junio de 2025 sería mi estimación aproximada :)