¿Existe una forma más eficiente en el espacio para demostrar que una transacción está contenida dentro de un bloque?

Los clientes de SPV, como Electrum, solicitan una prueba criptográfica de que una transacción está contenida en un bloque. Esto se hace incluyendo cada rama de merkle necesaria para obtener un hash que sea igual a la raíz de merkle del bloque. Esto toma log(2, N) * 32 bytes, donde N es el número de transacciones en el bloque.

¿Existe una forma más eficiente en el espacio para probar criptográficamente que una transacción está contenida dentro de un bloque?

En aras del argumento, supongamos que puede cambiar la forma en que se calcula el encabezado del bloque y el árbol Merkle, o reemplazarlo por completo.

Un ejemplo de una posible mejora sería cambiar la función hash que se usa para crear árboles merkle de SHA256d a RIPEMD-160 (u otra función hash de 160 bits, como SHA512/160 ). Esto solo tomaría log(2, N) * 20 bytes.

Pregunta muy interesante. Al principio pensé que todo lo que necesitaba era la raíz de Merkle para verificar si las transacciones estaban contenidas en dicho bloque. Sin embargo, como señala, también necesita toda la rama, que como dice, podría ser un poco grande. En el documento original, Satoshi calculó en la sección "Recuperación de espacio en disco" solo el espacio requerido para los encabezados, pero no para las ramas reales, que son necesarias para que este proceso funcione. También perjudica la descentralización porque aún necesita nodos completos para brindarle las sucursales.

Respuestas (1)

Aparte de acortar el hash utilizado, no hay forma de hacer que la prueba ocupe menos espacio.

En una nota al margen, el hash se puede acortar simplemente usando los primeros n bits. La suma de comprobación de una dirección bitcoin (primeros 4 bytes de sha256 (cuerpo)) se realiza de esta manera. No sé por qué se usa ripe160 en lugar de una forma truncada de sha256 para el cuerpo principal de la dirección.

Esta pregunta se refiere a por qué se utilizó RIPEMD.