Побудова кореня Merkle з мітками
Побудуйте корінь Merkle SHA-256 із 1–64 байтових листків до 4096 байтів з окремими мітками листків і батьків.
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()
| Проєкт | Перевірте непарний рівень дублюванням останнього вузла й відхиліть порожній ввід без трактування кореня як доказу власності. |
|---|---|
| Перевірте перед застосуванням | Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами. |
| Моделі | Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані. |
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()
Зберігайте байтові домовленості під час зміни коду хешування
LeafVellin — робоче середовище програмування для Windows для обговорення змін коду з підключеною моделлю ШІ. Код хешування потребує особливо точного опису оброблюваних байтів: нешкідлива на вигляд зміна подання може дати зовсім інший результат. Почніть із вимоги сумісності й відомого прикладу входу та виходу до запиту рефакторингу.
Приклад дерева Меркла з тегами пропонує конкретне завдання проєкту. Можна попросити помічника дослідити порядок листків, різні префікси листків і внутрішніх вузлів та дублювання непарного останнього вузла. Надайте код, що постачає листки й споживає корінь, щоб ці домовленості залишалися видимими на всьому змінюваному шляху.
Перевірте запропоновані зміни на фіксованих прикладах для одного листка, парної й непарної кількості. Запустіть перевірки у проєкті й порівняйте точні значення коренів, а не лише форму результату. Якщо потрібен збіг з іншою реалізацією, використайте її задокументовані домовленості й незалежні приклади; самого збігу назви хеш-функції недостатньо для сумісних дерев.
Вибір моделі ШІ без фільтрів доступний через підтримувані кінцеві точки, сумісні з OpenAI, або Anthropic настільки, наскільки ці сервіси пропонують вибрану модель. Налаштуйте облікові дані за потреби й перевірте інструменти та межі контексту. Обмеження провайдера залишаються чинними, а остаточне рішення щодо зміни хешування спирається на вашу перевірку й докази.
Питання перед рефакторингом байтового дерева
Що мають узгоджувати дві реалізації крім хеш-функції?
Визначте байти й порядок листків, префікси, конкатенацію внутрішніх вузлів і обробку непарної кількості вузлів. Додайте точні приклади вибраної конструкції. Спільна назва хешу не означає узгодженості навколишніх домовленостей.
Навіщо додавати приклад одного листка?
Він ізолює домовленість листка від обробки внутрішніх вузлів і полегшує виявлення випадкового зайвого хешування. Поєднайте його з прикладами парної та непарної кількості листків, щоб перевірити й правила розгалуження конструкції.
Чи слід передавати текстові листки безпосередньо в код хешування?
Визначте кодування байтів і нормалізацію до хешування. Якщо залучений текст, додайте межу перетворення до запиту. Інакше рефакторинг може зберегти читабельний текст, але змінити байти й відповідно значення кореня.
Чи доводить збіг кореня надійність усієї системи?
Він установлює збіг для перевіреної конструкції та даних, а не всі властивості навколишньої системи. Перевірте зберігання, порівняння й використання коренів у програмі та обмежуйте ширші твердження про цілісність фактично доступними доказами.
LeafVellin · Оновлено 2026-10-25