태그 있는 Merkle 루트 구성
각각 최대 4096바이트인 바이트 리프 1~64개에서 리프와 부모에 서로 다른 태그를 사용해 SHA-256 Merkle 루트를 만듭니다.
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()
| 프로젝트 | 홀수 레벨에서 마지막 노드를 복제하는 동작을 시험하고 루트를 소유권 증명으로 여기지 않으면서 빈 입력을 거부합니다. |
|---|---|
| 적용하기 전에 검토하세요 | 실제 동작을 예상 결과와 비교하세요. 검사가 실패하면 다음 변경을 하기 전에 원인을 조사하세요. |
| 모델 | 기본 URL과 필요한 API 키로 OpenAI 호환 또는 Anthropic 엔드포인트를 설정하고 연결을 테스트하세요. 로컬 모델 서버는 실행 중이어야 합니다. 원격 도구는 데이터를 별도로 전송할 수 있습니다. |
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은 연결된 AI 모델과 소스 변경을 논의하는 Windows 코딩 작업 공간입니다. 해싱 코드에서는 처리하는 바이트를 특히 정밀하게 설명해야 합니다. 무해해 보이는 표현 변경도 완전히 다른 결과를 만들 수 있습니다. 리팩터링을 요청하기 전에 상호운용성 요구와 알려진 입출력 테스트 사례에서 시작하세요.
태그가 붙은 머클 트리 예제는 집중할 수 있는 프로젝트 작업입니다. 도우미에게 잎 순서, 잎과 내부 노드의 서로 다른 접두부, 마지막 노드가 홀수 개일 때의 복제를 살펴보도록 요청할 수 있습니다. 변경하는 전체 경로에서 이 규약이 드러나도록 잎을 제공하고 루트를 소비하는 코드를 가져오세요.
단일 잎, 짝수 개, 홀수 개에 대한 고정 테스트 사례와 제안된 수정을 대조하세요. 프로젝트에서 검사를 실행하고 출력 형태만이 아니라 정확한 루트 값을 비교하세요. 다른 구현과 일치해야 한다면 해당 구현의 문서화된 규약과 독립적 테스트 사례를 사용하세요. 해시 함수 이름이 같다는 것만으로 트리 호환성이 입증되지는 않습니다.
지원되는 OpenAI 호환 또는 Anthropic 엔드포인트가 선택한 모델을 제공하는 범위 내에서 필터 없는 AI 모델을 선택할 수 있습니다. 필요한 인증 정보를 설정하고 도구와 컨텍스트 한도를 확인하세요. 공급자 제한은 계속 적용되며 해싱 변경의 최종 결정은 자신의 검토와 증거에 달려 있습니다.
바이트 트리 리팩터링 전 질문
두 구현은 해시 함수 외에 무엇에 합의해야 하나요?
잎 바이트와 순서, 접두부, 내부 노드 연결 방식, 홀수 노드 개수 처리를 지정하세요. 선택한 구성의 정확한 테스트 사례를 포함하세요. 해시 이름이 같다고 주변 규약까지 일치하는 것은 아닙니다.
잎 하나인 테스트 사례를 포함하는 이유는 무엇인가요?
잎 규약을 내부 노드 처리에서 분리하여 의도치 않은 추가 해싱 단계를 쉽게 찾을 수 있습니다. 짝수·홀수의 여러 잎 사례와 함께 사용해 구성의 분기 규칙도 검토하세요.
텍스트 잎을 해싱 코드에 직접 전달해야 하나요?
해싱 전에 바이트 인코딩과 정규화를 정의하세요. 텍스트가 관련된다면 요청에 변환 경계를 포함하세요. 그렇지 않으면 리팩터링이 읽을 수 있는 텍스트를 보존하면서 바이트를 바꿔 루트 값까지 바꿀 수 있습니다.
루트가 일치하면 더 큰 시스템도 신뢰할 수 있나요?
테스트한 구성과 입력의 일치를 입증할 뿐 주변 시스템의 모든 속성을 보장하지는 않습니다. 애플리케이션이 루트를 저장, 비교, 사용하는 방식을 검토하고 더 넓은 무결성 주장을 실제 증거 범위 안에 두세요.
LeafVellin · 업데이트 2026-10-25