¿Mover una transacción de un bloque antiguo a uno nuevo permitiría una mayor poda?

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?

Esta publicación es intrincada y se basa en suposiciones que primero deben abordarse por separado, por ejemplo, si es necesario analizar la cadena de bloques completa y la dependencia de un conjunto UTXO proporcionado por otros usuarios. Además, una transacción copiada hace que el bloque de inclusión no sea válido según las reglas actuales. Finalmente, la información de UTXO es suficiente para validar una entrada, por lo que no necesita "bloquear X". Es por eso que la poda como se implementa funciona, y la poda como se describe nunca tuvo un seguimiento. En el resultado, no encuentro la pregunta ya que es útil y sugiero que debería ser reelaborada y condensada.
Me gustaría agradecerle por responder a mi sugerencia haciendo más preguntas e investigando los puntos. Con tanta frecuencia me han insultado o atacado por tales comentarios que lo que puede parecer natural es una agradable sorpresa.

Respuestas (2)

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 mayor parte de los bitcoiners que contribuirán a la red casi siempre será mucho mayor que el número que tiene todos los datos que necesitan para ayudar a los recién llegados. Esos recién llegados se enfrentan a descargas cada vez mayores para empezar. La poda no soluciona eso. La poda solo solucionó el problema de almacenamiento persistente, que es relativamente insignificante para el costo inicial. Mi objetivo es hacer que la participación sea más fácil de comenzar.
Una solución mucho más simple: envíe una prueba del utxoset en el encabezado del bloque cada N bloques, y los nodos harán que ese utxoset esté disponible para su descarga. La cadena se puede verificar solo en los encabezados de bloque, y el utxoset se puede verificar en función del compromiso en el encabezado.
Si el bloque 414000 es el primero con ese compromiso de UTXO, supongo que en el bloque 414550 es seguro descargar menos que toda la cadena de bloques. El recién llegado determina si el conjunto de UTXO que descarga (de la fuente 1) es correcto o no al esperar N bloques para asegurarse de que el próximo compromiso (que obtiene de la Fuente 2) incluye los cambios realizados en esos N bloques. Si falla esa verificación, comienzan de nuevo, pero no pueden decir cuál de las dos fuentes es el problema. Supongo que eso se solucionó fácilmente usando múltiples fuentes.
Por lo tanto, los encabezados se descargarían de múltiples fuentes para verificarlos, y después de N bloques, el recién llegado puede verificar que las transacciones en ellos produzcan el nuevo compromiso UTXO correcto. Estoy tratando de identificar formas de explotar la falta de validación de todos los bloques antes de los últimos 550 porque me gusta la idea, pero me preocupa que esté renunciando a demasiada validación independiente.

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.