¿Cuán explícitamente se puede podar la cadena de bloques?

¿Cómo se puede podar la cadena de bloques?

Si la cadena de bloques es a prueba de manipulaciones, por lo que no se puede cambiar, ¿cómo se pueden eliminar los datos?

Por favor, sea lo más explícito posible.

Respuestas (3)

La cadena de bloques en sí no se puede podar.

Cada bloque se verifica mediante el hash de todos sus datos y un nonce aleatorio para encontrar un hash que tenga una cierta cantidad de ceros a la izquierda. Si incluso eliminara un solo bit de datos de un bloque, el hash resultante cambiaría. Como lo más probable es que el nuevo hash no cumpliera con el requisito de dificultad, la prueba de trabajo se habría destruido. Tendrías que crear un nuevo bloque para tomar su lugar. Entonces, sin embargo, también tendría que recrear todos los bloques subsiguientes, ya que el hash del padre (piense en ello como una huella digital) está incluido en su bloque de hijos, es decir, si cambia el padre, toda la cadena de bloques que sucede a partir de él también se vuelve inválida.

Lo que puede pasar es que se poda la base de datos de transacciones verificadas que almacenan los clientes de Bitcoin-Qt. Hasta ahora, después de verificar cada bloque, los clientes completos conservan cada transacción que haya ocurrido localmente. En cambio, solo puede mantener las transacciones en su base de datos cuyas salidas aún no se han gastado.

¡Gracias Murch! Entonces, ¿es eso lo que sucede con los clientes ligeros que solo les envían los saldos, no toda la base de datos de transacciones/blockchain? ¡Muchas gracias de antemano!
Es similar, pero no igual. En el cliente eliminado, aún verificaría todos los bloques, pero no conservaría todos los datos. AFAIK, los clientes ligeros en realidad no verifican los bloques por sí mismos.

Un bloque tiene dos partes: un encabezado corto (metadatos) y una carga útil (posiblemente grande) que contiene las transacciones reales. El encabezado contiene todos los datos necesarios para validar el PoW y la cadena de encabezados desde el encabezado del bloque de génesis. Además, cada encabezado contiene un valor de autenticación de su carga útil. Las billeteras SPV se sincronizan muy rápido porque validan solo los encabezados y no la carga útil.

Si un bloque contiene transacciones cuyas salidas no se han gastado, los nodos deben almacenar ese bloque para demostrar a otro nodo de arranque que el conjunto UTXO contiene cierto elemento. Por otro lado, si se han gastado todas las salidas generadas en un bloque (por ejemplo, X), entonces un nodo puede descartar el bloque X y decirle a otro nodo de arranque "se han gastado todos los UTXO del bloque X, solo valide el encabezado y continúe". .

Este es un enfoque conservador. Si bien no se puede engañar a un nodo de arranque para que acepte UTXO no válidos, tampoco podemos demostrarle a ese nodo que "se han gastado todos los UTXO del bloque X" sin mostrar la carga útil real.

Ahora la pregunta puede ser: ¿Cómo obtienen y mantienen los nodos SPV un conjunto UTXO no manipulado? Vea esta respuesta para más detalles.

Los nodos SPV no mantienen un conjunto UTXO en absoluto. Eso es imposible sin ver los bloques completos. Solo mantienen una cadena de encabezados.
@PieterWuille Mantienen un conjunto UTXO con resultados que son relevantes para ellos. Eso es lo que discute la respuesta vinculada; cómo un nodo obtiene bloques relevantes para él.
Ok, sí, no lo considero parte del nodo, sino parte de la billetera conectada a él (una billetera conectada a un nodo completo también tiene su propio conjunto de UTXO en ese sentido), pero estoy de acuerdo.

Han pasado algunos años, pero pensé en agregar esto, ya que no parece que se hable mucho de eso.

Primero, es importante tener en cuenta que los encabezados de bloque son sacrosantos; son esenciales para verificar la cadena de bloques.

Sin embargo, gran parte de la carga útil ya no es relevante, ya que los resultados que generaron ya se gastaron.

Sería bueno que pudieran eliminarse de la base de datos, ¿no? Sin embargo, el problema con eso es verificar la integridad del bloque. Si perdemos algunas transacciones, ¿cómo podemos verificar que el hash de carga útil del encabezado sea correcto?

Para resolver este problema, el documento original de Bitcoin propone una solución basada en Merkle Tree.

Este árbol se construye tomando una serie, procesando cada par de elementos y luego repitiendo el proceso para esa nueva serie.

Como dice el documento original, esto puede permitirnos eliminar transacciones antiguas y aún ser capaces de verificar las sobrantes:

Artículo de BLockchain sobre la recuperación de espacio en disco

Esta respuesta no me parece útil. La poda para reducir el espacio total del disco del nodo ha estado disponible durante años, sin embargo, la propuesta de poda en cadena como se describe en el Whitepaper no es factible y, por lo tanto, nunca se implementó.