Opbouw van een gemarkeerde Merkle-wortel
Bouw een SHA-256-Merkle-wortel uit één tot 64 bytebladeren van maximaal 4096 bytes met aparte blad- en oudermarkeringen.
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()
| Project | Test oneven niveaus door de laatste knoop te verdubbelen en weiger lege invoer zonder eigendomsbewijs te suggereren. |
|---|---|
| Controleer vóór het toepassen | Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen. |
| Modellen | Stel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen. |
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()
Houd byteconventies stabiel wanneer je hashcode wijzigt
LeafVellin is een programmeerwerkruimte voor Windows om bronwijzigingen met een verbonden AI-model te bespreken. Hashcode vereist een bijzonder nauwkeurige beschrijving van de verwerkte bytes: een onschuldig ogende representatiewijziging kan een totaal ander resultaat opleveren. Begin met de interoperabiliteitseis en een bekend invoer-uitvoertestgeval voordat je om een refactoring vraagt.
Het voorbeeld van een Merkle-boom met tags biedt een gerichte projecttaak. Je kunt de assistent vragen de bladvolgorde, verschillende voorvoegsels voor bladeren en interne knopen en duplicatie van een oneven laatste knoop te onderzoeken. Neem de code mee die bladeren aanlevert en de wortelhash gebruikt, zodat die conventies zichtbaar blijven in het volledige pad dat wordt gewijzigd.
Beoordeel voorgestelde wijzigingen aan de hand van vaste testgevallen voor één blad, een even aantal en een oneven aantal. Voer de controles in je project uit en vergelijk exacte wortelhashes, niet alleen de uitvoervorm. Als een andere implementatie moet overeenkomen, gebruik dan de gedocumenteerde conventies en onafhankelijke testgevallen ervan; alleen dezelfde hashfunctienaam bewijst niet dat bomen compatibel zijn.
Keuze uit ongefilterde AI-modellen is beschikbaar via ondersteunde OpenAI-compatibele of Anthropic-eindpunten voor zover die diensten het door jou gekozen model aanbieden. Configureer waar nodig inloggegevens en controleer tools en contextlimieten. Beperkingen van de aanbieder blijven gelden en de uiteindelijke beslissing over een hashwijziging berust op je beoordeling en bewijs.
Vragen vóór een refactoring van een byteboom
Waarover moeten twee implementaties naast de hashfunctie overeenstemmen?
Specificeer bladbytes en hun volgorde, voorvoegsels, samenvoeging van interne knopen en de behandeling van oneven aantallen knopen. Neem exacte testgevallen voor de gekozen constructie op. Een gedeelde hashnaam betekent geen overeenstemming over die omringende conventies.
Waarom een testgeval met één blad opnemen?
Dat isoleert de bladconventie van de verwerking van interne knopen en maakt een onbedoelde extra hashstap gemakkelijker te ontdekken. Combineer het met testgevallen met meerdere bladeren in even en oneven aantallen, zodat de beoordeling ook de vertakkingsregels van de constructie dekt.
Moeten tekstbladeren direct aan de hashcode worden doorgegeven?
Definieer de bytecodering en eventuele normalisatie vóór het hashen. Neem de conversiegrens in het verzoek op als tekst betrokken is. Anders kan een refactoring leesbare tekst behouden en toch de bytes veranderen, en daarmee de wortelhash.
Bewijst een overeenkomende wortelhash dat het bredere systeem betrouwbaar is?
Die bewijst overeenstemming voor de geteste constructie en invoer, niet elke eigenschap van het omringende systeem. Beoordeel hoe wortelhashes in je toepassing worden opgeslagen, vergeleken en gebruikt en houd bredere integriteitsclaims binnen het daadwerkelijk beschikbare bewijs.
LeafVellin · Bijgewerkt 2026-10-25