Construcción de raíz Merkle etiquetada
Construye una raíz Merkle SHA-256 con entre una y 64 hojas binarias de hasta 4096 bytes y etiquetas distintas para hojas y padres.
import hashlib
def merkle_root(leaves):
if type(leaves) is not list or not 1 <= len(leaves) <= 64 or any(type(x) is not bytes or len(x) > 4096 for x in leaves):
raise ValueError("merkle.leaves")
level = [hashlib.sha256(b"\x00"+x).digest() for x in leaves]
while len(level) > 1:
if len(level) % 2:
level.append(level[-1])
level = [hashlib.sha256(b"\x01"+level[i]+level[i+1]).digest() for i in range(0, len(level), 2)]
return level[0].hex()
| Proyecto | Prueba niveles impares duplicando el último nodo y rechaza entrada vacía sin interpretar la raíz como prueba de propiedad. |
|---|---|
| Revisa antes de aplicar | Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios. |
| Modelos | Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado. |
import hashlib
def merkle_root(leaves):
if type(leaves) is not list or not 1 <= len(leaves) <= 64 or any(type(x) is not bytes or len(x) > 4096 for x in leaves):
raise ValueError("merkle.leaves")
level = [hashlib.sha256(b"\x00"+x).digest() for x in leaves]
while len(level) > 1:
if len(level) % 2:
level.append(level[-1])
level = [hashlib.sha256(b"\x01"+level[i]+level[i+1]).digest() for i in range(0, len(level), 2)]
return level[0].hex()
Mantén estables las convenciones de bytes al cambiar código de hash
LeafVellin es un espacio de programación para Windows donde analizar cambios de código con un modelo de IA conectado. El código de hash necesita una descripción especialmente precisa de los bytes procesados: un cambio de representación aparentemente inocuo puede producir un resultado completamente distinto. Empieza por el requisito de interoperabilidad y un caso conocido de entrada y salida antes de solicitar una refactorización.
El ejemplo de árbol de Merkle con etiquetas ofrece una tarea concreta del proyecto. Puedes pedir al asistente que examine el orden de las hojas, los prefijos distintos para hojas y nodos internos, y la duplicación de un último nodo impar. Aporta el código que proporciona las hojas y consume la raíz para que esas convenciones sigan visibles a lo largo de todo el recorrido modificado.
Revisa los cambios propuestos con casos fijos para una sola hoja, una cantidad par y una impar. Ejecuta las comprobaciones en tu proyecto y compara valores exactos de raíz, no solo la forma de salida. Si otra implementación debe coincidir, usa sus convenciones documentadas y casos independientes; coincidir en el nombre de la función hash no basta para establecer árboles compatibles.
La elección de modelos de IA sin filtros está disponible mediante endpoints compatibles con OpenAI o de Anthropic admitidos en la medida en que esos servicios ofrezcan el modelo que seleccionas. Configura credenciales cuando sean necesarias y comprueba las herramientas y los límites de contexto. Siguen aplicándose las restricciones del proveedor, y la decisión final sobre un cambio de hash depende de tu revisión y de la evidencia.
Preguntas antes de refactorizar un árbol de bytes
¿En qué deben coincidir dos implementaciones además de la función hash?
Especifica los bytes y el orden de las hojas, los prefijos, la concatenación de nodos internos y el tratamiento de cantidades impares de nodos. Incluye casos exactos para la construcción elegida. Un nombre de hash compartido no implica acuerdo sobre esas convenciones circundantes.
¿Por qué incluir un caso de una sola hoja?
Aísla la convención de las hojas del procesamiento de nodos internos y facilita detectar una aplicación adicional accidental del hash. Combínalo con casos de varias hojas, pares e impares, para que la revisión cubra también las reglas de ramificación de la construcción.
¿Deben pasarse hojas de texto directamente al código de hash?
Define la codificación de bytes y cualquier normalización antes de aplicar el hash. Incluye el punto de conversión en la solicitud si interviene texto. De lo contrario, una refactorización puede conservar el texto legible y cambiar los bytes y, por tanto, el valor de la raíz.
¿Una raíz coincidente demuestra que el sistema más amplio es fiable?
Establece acuerdo para la construcción y las entradas probadas, no todas las propiedades del sistema circundante. Revisa cómo se almacenan, comparan y utilizan las raíces en tu aplicación, y limita las afirmaciones de integridad más amplias a la evidencia realmente disponible.
LeafVellin · Actualizado 2026-10-25