Costruzione di radice Merkle etichettata
Costruisci una radice Merkle SHA-256 da una a 64 foglie di massimo 4096 byte con etichette distinte per foglie e genitori.
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()
| Progetto | Prova livelli dispari duplicando l’ultimo nodo e rifiuta il vuoto senza trattare la radice come prova di proprietà. |
|---|---|
| Controlla prima di applicare | Confronta il comportamento effettivo con il risultato atteso. Se una verifica fallisce, indaga la causa prima di altre modifiche. |
| Modelli | Configura un endpoint compatibile con OpenAI o Anthropic usando URL di base e chiave API, se necessaria. Prova la connessione. Il server locale deve essere in esecuzione; gli strumenti remoti possono trasmettere dati separatamente. |
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()
Mantieni stabili le convenzioni sui byte modificando il codice di hashing
LeafVellin è un ambiente di programmazione Windows per discutere modifiche al sorgente con un modello IA collegato. Il codice di hashing richiede una descrizione particolarmente precisa dei byte elaborati: una modifica alla rappresentazione apparentemente innocua può produrre un risultato completamente diverso. Parti dal requisito di interoperabilità e da un caso di prova input-output noto prima di chiedere una ristrutturazione.
L'esempio dell'albero Merkle con prefissi distintivi offre un compito di progetto mirato. Potresti chiedere all'assistente di esaminare l'ordine delle foglie, i prefissi distinti per foglie e nodi interni e la duplicazione di un nodo finale dispari. Fornisci il codice che passa le foglie e quello che usa la radice, così queste convenzioni restano visibili lungo l'intero percorso modificato.
Esamina le modifiche proposte rispetto a casi di prova fissi per una singola foglia, un numero pari e un numero dispari. Esegui i controlli nel progetto e confronta i valori esatti delle radici, non solo la forma dell'output. Se un'altra implementazione deve concordare, usa le sue convenzioni documentate e casi di prova indipendenti; la sola corrispondenza del nome della funzione hash non attesta la compatibilità degli alberi.
La scelta di modelli IA senza filtri è disponibile tramite endpoint supportati compatibili con OpenAI o Anthropic nella misura in cui tali servizi offrono il modello selezionato. Configura le credenziali quando necessarie e controlla strumenti e limiti di contesto. Le restrizioni del fornitore continuano ad applicarsi e la decisione finale su una modifica all'hashing dipende dalla tua revisione e dalle prove.
Domande prima di ristrutturare un albero di byte
Su cosa devono concordare due implementazioni oltre alla funzione hash?
Specifica byte e ordine delle foglie, prefissi, concatenazione dei nodi interni e trattamento dei numeri dispari di nodi. Includi casi di prova esatti per la costruzione scelta. Un nome hash condiviso non implica accordo su queste convenzioni circostanti.
Perché includere un caso di prova con una sola foglia?
Isola la convenzione della foglia dall'elaborazione dei nodi interni e rende più facile rilevare un passaggio aggiuntivo di hashing accidentale. Affiancalo a casi con più foglie in numero pari e dispari, così la revisione copre anche le regole di ramificazione della costruzione.
Le foglie testuali devono essere passate direttamente al codice di hashing?
Definisci la codifica in byte e qualsiasi normalizzazione prima dell'hashing. Includi il confine della conversione nella richiesta se è coinvolto testo. Altrimenti una ristrutturazione può preservare il testo leggibile cambiando però i byte e quindi il valore della radice.
Una radice corrispondente prova l'affidabilità del sistema più ampio?
Dimostra concordanza per la costruzione e gli input verificati, non ogni proprietà del sistema circostante. Esamina come le radici vengono memorizzate, confrontate e usate nell'applicazione e mantieni le affermazioni più ampie sull'integrità entro le prove effettivamente disponibili.
LeafVellin · Aggiornato 2026-10-25