En Poda de ramas en Merkle Tree , Nick ODell escribe: "Se puede podar una hoja (transacción) cuando se han gastado todas sus salidas". Entonces, estaba pensando que si una transacción es una de las últimas en un bloque, un minero puede copiar la transacción en el nuevo bloque que se está extrayendo. De esa manera, el minero (y el resto de la red) ya no necesita ese bloque para la validación, y puede liberarse en el éter.
Nick también escribió que el núcleo de Bitcoin no podará de esa manera de todos modos porque opera "suponiendo que descargues y valides todos los bloques". Estoy explorando las razones de esto para ver si se pueden abordar sin guardar todo.
La idea detrás de descargar toda la cadena de bloques antes de iniciar el modo de poda es que desea asegurarse de que lo que comienza sea válido. La única forma conocida de hacerlo es obtener todo. ¿O es eso? Parece que la ubicuidad de la cadena de bloques en sí coincide con la ubicuidad del conjunto UTXO válido, por lo que si obtiene un conjunto UTXO válido y coincide con lo que dice cualquier otro nodo, está listo para comenzar. Excepto por los ataques de Sybil, ¿verdad? ¿Un ataque tan exitoso de Sybil también permitiría falsificar la propia cadena de bloques?
Una dificultad con mi enfoque de mover una transacción es que cuando un nuevo nodo está descargando la cadena de bloques (sin importar cuánto aún se necesite), querrá verificar cada bloque, y si falta el bloque X, entonces todos los bloques que contienen las entradas que se crearon en el bloque X no se pueden validar, si eso significa validar que las transacciones en él son válidas. Sin embargo, el blockheader en sí aún se puede validar. El encabezado del bloque X no se puede validar porque falta su contenido. Pero el hecho de que el hash del bloque X se requiera en el bloque X+1, ¿no es suficiente para confiar en que el bloque X era válido y que, por lo tanto, también lo son los bloques X+1, X+2, X+3, etc. , hasta e incluyendo cualquier bloque que se esté validando contenga una transacción que use una salida (presumiblemente) creada en el bloque X?
Cuando finalmente aparece una transacción que gasta una salida no gastada de la transacción movida, no será posible validarla porque falta el bloque X. Sin embargo, si el índice que identifica qué bloque contiene qué transacción fue actualizado por el minero que mueve la transacción, entonces esto es fácil de resolver.
¿Esa actualización de índice tendría que abordar también todas las transacciones secundarias inmediatas de las transacciones movidas para que las transacciones existentes previamente válidas aún puedan validarse al encontrar la transacción de origen en el bloque recién extraído? No creo que sea necesario volver a validar las transacciones que están en bloques con encabezados validados, ¿verdad?
Esto parece mucho esfuerzo para absolutamente ningún beneficio.
En el modelo de poda de Bitcoin, descarta TODOS esos bloques viejos de todos modos, y SÓLO mantiene el conjunto utxo. No importa si un utxo está en un bloque antiguo o en un bloque nuevo, todavía lo mantienes en el utxoset. Cualquier bloque que mantenga alrededor es simplemente por conveniencia y para ayudar a otros nodos que solicitan esos bloques.
La respuesta simple es SÍ, pero hay mejores soluciones. Si bien permite que todas las transacciones se representen en bloques más recientes, la presencia de una transacción en un bloque muy antiguo NO es lo que impide el tipo de poda que imaginé. Para hacer que los primeros bloques sean innecesarios para validar el historial de Bitcoin, solo se requiere prueba de que realmente existen UTXO en ellos y que aún no se han gastado. Un conjunto UTXO actual lograría eso, pero debe probarse. Jonas Schnelli sugirió algo muy similar en febrero.
muro
muro