Construirea rădăcinii Merkle etichetate
Construiește o rădăcină Merkle SHA-256 din una până la 64 de frunze binare de cel mult 4096 de octeți cu etichete diferite pentru frunze și părinți.
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()
| Proiect | Testează nivelul impar duplicând ultimul nod și respinge intrarea goală fără a considera rădăcina dovadă de proprietate. |
|---|---|
| Verifică înainte de aplicare | Compară comportamentul real cu rezultatul așteptat. Dacă o verificare eșuează, cercetează cauza înainte de alte modificări. |
| Modele | Configurează un endpoint compatibil OpenAI sau Anthropic cu URL-ul de bază și cheia API, dacă este necesară. Testează conexiunea. Serverul local trebuie să ruleze; instrumentele externe pot transmite date separat. |
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()
Păstrează convențiile octeților stabile când modifici codul hash
LeafVellin este un spațiu de programare Windows pentru discutarea modificărilor sursei cu un model IA conectat. Codul hash necesită o descriere deosebit de precisă a octeților procesați: o schimbare de reprezentare aparent inofensivă poate produce un rezultat complet diferit. Începe cu cerința de interoperabilitate și un caz de test cunoscut intrare-ieșire înainte de a solicita o refactorizare.
Exemplul arborelui Merkle cu etichete oferă o sarcină de proiect precisă. Ai putea cere asistentului să examineze ordinea frunzelor, prefixele distincte pentru frunze și noduri interne și duplicarea ultimului nod impar. Adu codul care furnizează frunzele și consumă rădăcina, astfel încât convențiile să rămână vizibile pe întregul traseu modificat.
Analizează modificările propuse față de teste fixe pentru o singură frunză, un număr par și un număr impar. Rulează verificările în proiect și compară valorile exacte ale rădăcinilor, nu doar forma ieșirii. Dacă altă implementare trebuie să coincidă, folosește convențiile ei documentate și teste independente; simpla coincidență a numelui funcției hash nu stabilește compatibilitatea arborilor.
Alegerea modelelor IA nefiltrate este disponibilă prin endpointuri compatibile OpenAI sau Anthropic acceptate în măsura în care serviciile oferă modelul selectat. Configurează acreditări când sunt necesare și verifică instrumentele și limitele contextului. Restricțiile furnizorului continuă să se aplice, iar decizia finală privind modificarea codului hash se bazează pe analiza și dovezile tale.
Întrebări înainte de refactorizarea unui arbore de octeți
Asupra căror aspecte trebuie să coincidă două implementări în afară de funcția hash?
Precizează octeții frunzelor și ordinea lor, prefixele, concatenarea nodurilor interne și tratarea numărului impar de noduri. Include teste exacte pentru construcția aleasă. Un nume hash comun nu implică un acord asupra acestor convenții din jur.
De ce să includ un test cu o singură frunză?
Izolează convenția frunzei de procesarea nodurilor interne și face mai ușor de detectat o etapă hash suplimentară accidentală. Asociază-l cu teste cu număr par și impar de frunze, astfel încât analiza să acopere și regulile de ramificare ale construcției.
Frunzele text trebuie trimise direct în codul hash?
Definește codificarea în octeți și orice normalizare înainte de calculul hash. Include delimitarea conversiei în solicitare dacă este implicat text. Altfel, o refactorizare poate păstra textul lizibil schimbând octeții și, prin urmare, valoarea rădăcinii.
O rădăcină identică dovedește că sistemul mai larg este de încredere?
Stabilește acordul pentru construcția și intrările testate, nu toate proprietățile sistemului din jur. Analizează cum sunt stocate, comparate și utilizate rădăcinile în aplicație și menține afirmațiile mai largi privind integritatea în limitele dovezilor disponibile efectiv.
LeafVellin · Actualizat 2026-10-25