¿Los nodos completos almacenan el árbol Merkle completo o lo regeneran al crear una prueba Merkle?

Entiendo para qué sirve la raíz de merkle. Y entiendo que los bloques no almacenan el árbol merkle.

Pregunta 1) ¿Hay algún lugar donde se almacenen los árboles merkle completos? No me refiero a los hashes de raíz de Merkle, ya que sé que están en los encabezados de los bloques.

Pregunta 2) Digamos que un nodo completo comienza a demostrarle a un nodo ligero que una transacción específica está en el Bloque J. ¿Cómo envía el nodo completo la rama merkle al nodo ligero? ¿Recorre las transacciones nuevamente para obtener los hashes y luego envía los hashes de las transacciones del nodo interior, o los nodos completos ya tienen el árbol merkle completo (árbol completo y cada hash interno) almacenado en alguna parte?

Respuestas (1)

Bitcoin Core, en su implementación BIP37, calculará las pruebas de Merkle sobre la marcha. No almacena los árboles Merkle de los bloques en ningún lugar (solo se almacena su raíz).

Gracias pieter Quiero agregar algo. Las raíces Merkle se utilizan para reducir las operaciones de n a logn. Parece que para el nodo completo, el recuento de operaciones sigue siendo n. se reduce a iniciar sesión para los nodos ligeros, ya que el nodo completo solo envía una ruta de árbol merkle en lugar de todo el árbol merkle. ¿Estás de acuerdo con todo lo que acabo de decir?
¿Algún comentario sobre mi última respuesta? Gracias de antemano.
@Nika Eso es correcto, aunque en realidad es la única opción. BIP37 usa filtros Bloom para seleccionar qué transacciones son interesantes, que no es algo que podamos crear un índice para una búsqueda rápida. Como resultado, el nodo que responde debe pasar por todo el bloque de todos modos para determinar incluso qué transacciones son interesantes para el cliente. Construir el árbol de Merkle y responder con las rutas de transacciones coincidentes es un costo menor en comparación con eso.