Tvorba označeného kořene Merkle
Vytvořte kořen Merkle SHA-256 z jednoho až 64 bajtových listů do 4096 bajtů s oddělenými značkami listů a rodičů.
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()
| Projekt | Otestujte lichou úroveň zdvojením posledního uzlu a odmítněte prázdný vstup bez tvrzení o důkazu vlastnictví. |
|---|---|
| Před použitím zkontrolujte | Porovnejte skutečné chování s očekávaným výsledkem. Pokud kontrola selže, před dalšími změnami zjistěte příčinu. |
| Modely | Nastavte endpoint kompatibilní s OpenAI nebo Anthropic pomocí základní URL a případného API klíče. Otestujte připojení. Lokální server modelu musí běžet; vzdálené nástroje mohou data odesílat samostatně. |
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ři změnách hašovacího kódu zachovejte bajtové konvence
LeafVellin je programovací prostředí pro Windows k diskusi o změnách zdrojů s připojeným modelem AI. Hašovací kód vyžaduje obzvlášť přesný popis zpracovávaných bajtů: nevinně vypadající změna reprezentace může vytvořit zcela jiný výsledek. Před žádostí o refaktoring začněte požadavkem na interoperabilitu a známým testovacím vstupem a výstupem.
Příklad Merkleova stromu s označenými uzly nabízí cílenou projektovou úlohu. Můžete asistenta požádat o prověření pořadí listů, odlišných prefixů listů a vnitřních uzlů a duplikace lichého posledního uzlu. Dodejte kód dodávající listy i využívající kořen, aby tyto konvence zůstaly viditelné v celé měněné cestě.
Navržené úpravy posuďte podle pevných testovacích příkladů pro jediný list, sudý počet a lichý počet. Spusťte kontroly v projektu a porovnejte přesné hodnoty kořenů, nikoli pouze tvar výstupu. Má-li se shodovat jiná implementace, použijte její dokumentované konvence a nezávislé testy; samotná shoda názvu hašovací funkce nedokládá kompatibilní stromy.
Volba nefiltrovaného modelu AI je dostupná přes podporované koncové body kompatibilní s OpenAI nebo koncové body Anthropic v rozsahu, v jakém tyto služby nabízejí vybraný model. Podle potřeby nastavte přihlašovací údaje a ověřte nástroje a limity kontextu. Omezení poskytovatele nadále platí a konečné rozhodnutí o změně hašování stojí na vašem posouzení a důkazech.
Otázky před refaktoringem bajtového stromu
Na čem se musejí dvě implementace shodnout kromě hašovací funkce?
Určete bajty listů a jejich pořadí, prefixy, zřetězení vnitřních uzlů a zacházení s lichými počty uzlů. Přiložte přesné testy zvolené konstrukce. Společný název hašovací funkce neznamená shodu na těchto okolních konvencích.
Proč zahrnout test s jediným listem?
Odděluje konvenci listu od zpracování vnitřních uzlů a usnadňuje odhalení nechtěného dalšího hašování. Doplňte jej testy se sudým a lichým počtem více listů, aby kontrola pokryla také pravidla větvení konstrukce.
Mají se textové listy předávat přímo hašovacímu kódu?
Před hašováním definujte bajtové kódování a případnou normalizaci. Pokud je ve hře text, zahrňte do zadání hranici převodu. Jinak může refaktoring zachovat čitelný text a přitom změnit bajty, a tedy i hodnotu kořene.
Dokazuje shodný kořen důvěryhodnost širšího systému?
Dokládá shodu pro testovanou konstrukci a vstupy, nikoli všechny vlastnosti okolního systému. Posuďte ukládání, porovnávání a využití kořenů v aplikaci a širší tvrzení o integritě omezte na skutečně dostupné důkazy.
LeafVellin · Aktualizováno 2026-10-25