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
.
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.
luca mateis