Construção de raiz Merkle com etiquetas
Construa uma raiz Merkle SHA-256 de uma a 64 folhas de até 4096 bytes com etiquetas distintas para folhas e pais.
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()
| Projeto | Teste nível ímpar duplicando o último nó e rejeite entrada vazia sem tratar a raiz como prova de propriedade. |
|---|---|
| Revise antes de aplicar | Compare o comportamento real com o resultado esperado. Se uma verificação falhar, investigue a causa antes de fazer outras alterações. |
| Modelos | Configure um endpoint compatível com OpenAI ou Anthropic com a URL base e uma chave API, quando necessária. Teste a conexão. O servidor local precisa estar em execução; ferramentas remotas podem transmitir dados separadamente. |
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()
Mantenha estáveis as convenções de bytes ao alterar código de hash
LeafVellin é um ambiente de programação para Windows para discutir mudanças de código com um modelo de IA conectado. Código de hash exige uma descrição especialmente precisa dos bytes processados: uma mudança de representação aparentemente inofensiva pode produzir um resultado inteiramente diferente. Comece pelo requisito de interoperabilidade e por um caso conhecido de entrada e saída antes de pedir uma refatoração.
O exemplo de árvore de Merkle com marcadores oferece uma tarefa focada de projeto. Você pode pedir ao assistente que examine a ordem das folhas, os prefixos distintos de folhas e nós internos e a duplicação do último nó quando a quantidade é ímpar. Traga o código que fornece as folhas e consome a raiz para que essas convenções permaneçam visíveis ao longo de todo o caminho alterado.
Revise as alterações propostas com casos fixos para uma única folha, uma quantidade par e uma ímpar. Execute as verificações no projeto e compare os valores exatos das raízes, não apenas a forma da saída. Se outra implementação precisar concordar, use suas convenções documentadas e casos independentes; compartilhar apenas o nome da função de hash não comprova compatibilidade entre árvores.
A escolha de modelos de IA sem filtros está disponível por endpoints compatíveis com OpenAI ou da Anthropic que sejam suportados, na medida em que esses serviços ofereçam o modelo selecionado. Configure credenciais quando necessário e verifique ferramentas e limites de contexto. As restrições do provedor continuam valendo, e a decisão final sobre uma mudança no código de hash depende da sua revisão e das evidências.
Perguntas antes de refatorar uma árvore de bytes
Em que duas implementações devem concordar além da função de hash?
Especifique os bytes e a ordem das folhas, os prefixos, a concatenação de nós internos e o tratamento de quantidades ímpares de nós. Inclua casos exatos para a construção escolhida. Um nome de hash compartilhado não implica concordância sobre essas convenções ao redor.
Por que incluir um caso com uma folha?
Ele isola a convenção da folha do processamento de nós internos e facilita detectar uma etapa extra acidental de hash. Combine-o com casos de várias folhas em quantidades pares e ímpares para que a revisão cubra também as regras de ramificação da construção.
Folhas de texto devem ser passadas diretamente ao código de hash?
Defina a codificação em bytes e qualquer normalização antes do hash. Inclua o ponto de conversão na solicitação se houver texto. Caso contrário, uma refatoração pode preservar o texto legível enquanto altera os bytes e, portanto, o valor da raiz.
Uma raiz correspondente prova que o sistema mais amplo é confiável?
Ela estabelece concordância para a construção e as entradas testadas, não todas as propriedades do sistema ao redor. Revise como as raízes são armazenadas, comparadas e usadas na aplicação e mantenha alegações mais amplas de integridade dentro das evidências efetivamente disponíveis.
LeafVellin · Atualizado 2026-10-25