블록체인서버 한선씨 구현 [13a]
개요
순수 한선씨로 블록체인 라이브러리(
libs/블록체인.한선)와 HTTP 서버 앱(
apps/블록체인서버.한선)을 구현했다.
SHA256 해시체인 + 머클루트 + 4개 HTTP 라우트 + 자체 검증 포함.
무엇을 했는지
libs/블록체인.한선 (신규)
블록해시계산(인덱스, 타임스탬프, 데이터, 이전해시) — SHA256으로 블록 해시 생성
블록생성(인덱스, 타임스탬프, 데이터, 이전해시) — 맵 반환 { 인덱스/타임스탬프/데이터/이전해시/해시 }
블록체인초기화() — 제네시스 블록 포함 체인 맵 반환
블록추가(체인, 데이터) — 마지막 해시를 이전해시로 연결
체인검증(체인) — 해시연결 + 재계산 무결성 검증. 1=유효/-1=무효
머클루트(체인) — 이진쌍 SHA256 축약
블록직렬화(블) / 체인직렬화(체인) — ASCII 키 JSON 출력
apps/블록체인서버.한선 (신규)
- 환경변수 PORT 있으면 HTTP 서버, 없으면 자체 검증 실행
GET /chain — 전체 체인 JSON
POST /add — 블록 추가 (요청 본문 = 데이터)
GET /verify — 무결성 검증 결과 {"valid":1,"status":"valid","blocks":N}
GET /merkle — 머클루트 {"merkle":"..."}
libs/네트워크.한선의 HTTP헤더읽기 / HTTP분할전송 사용 (부분수신·큰HTML 손상 방지)
검증 결과
[1] 제네시스 블록 생성 완료
[2] 블록 3개 추가 완료 (총 4개)
[3] 체인 검증: 참 (정상)
[4] 머클루트: 0ade3620dca6cbb71ee4b5a8dd20dbd7b072cd70519ec98eca0388ecee3d882b
[5] 체인 직렬화: 4개 블록 JSON 배열
[6] 변조 감지: 참 (변조 탐지 성공)
HTTP 서버 스모크테스트:
GET /chain → 200 OK, JSON 배열
POST /add → 201 Created, 새 블록 JSON
GET /verify → {"valid":1,"status":"valid","blocks":2}
GET /merkle → {"merkle":"55412ae7d8f55beb0da77c5735d0968d535cfee428acbe60ebbdbc14c4d5925d"}
관련 파일
/Users/ef/CrownyOS/crownyc/libs/블록체인.한선
/Users/ef/CrownyOS/crownyc/apps/블록체인서버.한선
- 의존:
libs/네트워크.한선 libs/문자열.한선 (가져오기 체인)
실행 방법
bashcd /Users/ef/CrownyOS/crownyc
# 자체 검증
./hanseonc_high apps/블록체인서버.한선 > /tmp/bc.toau 2>/dev/null
./crownyc run /tmp/bc.toau
# HTTP 서버
PORT=9729 ./crownyc run /tmp/bc.toau
잔여 이슈
- 타임스탬프는 현재 블록 인덱스로 대체 (VM
유닉스시각() 날짜 라이브러리 의존)
- POW/난이도 조정 미구현 (요구사항 외)
- 체인 영속화(쓰기/읽기) 미구현 — 서버 재시작 시 체인 초기화