← 목록
기타 2026-06-11 4KB 읽기 4분

연합체인 anti-entropy 차분 동기화 (Phase4 P5)

개요

연합 앵커-노드 간 체인 동기화에서 전체 nodes.ndjson 재전송을 제거하고, Consul anti-entropy(Detect → Highlight → Repair → Verify) 방식으로 누락 블록만(delta) 전송한다. 노드가 자기 헤드(마지막 블록해시)를 보내면 앵커는 그 헤드 이후 블록만 골라 전송한다. 헤드가 같으면 전송 0바이트.

라이브 게이트웨이(:8080/:8443/gateway.yaml) 무접촉. 연합 모듈(:9160)만 수정.

무엇을 했는지

신규 라이브러리 (ADDITIVE, 자동실행 없음)

크라우니게이트웨이연합동기화.한선 — 8함수
  • 체인헤드() — head.txt(마지막 블록해시) 반환 (Detect 기준값)
  • 블록목록(since해시) — since 이후 블록만 직렬 반환. since 빈값/영해시→전체.
hash==since 를 만난 다음 줄부터 채택. since 미발견(위조/분기)→안전상 전체 폴백.
  • 차분적용(받은블록들) — Repair: 받은 첫 블록 prev==로컬 헤드면 append-only 머지(+새헤드).
안 이어지면 분기→거부(-1, 체인 무손상). 빈입력→0(이미 동기).
  • 헬퍼: S공백정리 / S값 / S첫줄prev / S끝줄hash / S블록수

신규 검증 진입점

크라우니게이트웨이연합동기화검증.한선 — 비파괴(/tmp 임시체인 5블록), 7케이스 전부 PASS

API 엔드포인트 추가 (:9160)

크라우니게이트웨이연합API.한선
  • 가져오기 "크라우니게이트웨이연합동기화.한선" 추가
  • GET /head{ok,head,blocks} (Detect)
  • GET /sync?since=<해시> — since 이후 블록 ndjson (Highlight). 빈값=전체, head=0바이트, 위조=전체폴백
  • / 자기소개 JSON에 두 엔드포인트 등재

검증 결과

3레이어 트리플체크 (컴파일/실행/구조 전부 ✅ PASS):

  • 동기화.한선: 함수8, 7679큐브, 215KB TOAU
  • 동기화검증.한선: --run ✅ 7/7 PASS
  • 연합API.한선: 함수18, 36047큐브, 1MB TOAU (sync import 후 정상 컴파일)
단위검증 7케이스 (임시체인 5블록):
① 전체 블록목록("")=5 PASS
② 차분 블록목록(h2)=2 PASS  → 전송절감 3블록 60%
③ 동일 블록목록(head)=0 PASS (Detect 전송0)
④ 위조 since=5 PASS (전체 폴백)
⑤ 차분적용(이어지는 2블록)=+2, head=h4 PASS (머지후 5블록)
⑥ 분기거부 차분적용=-1, 체인 무손상 5 PASS
⑦ 빈입력 차분적용=0 무변화 PASS

라이브 :9160 curl (실제 연합체인 4블록, head c3e537...):

GET /head  → {"ok":true,"head":"c3e537...","blocks":4}
GET /sync                  → 4블록(전체)
GET /sync?since=4277b6...  → 2블록(node-busan, node-legacy)  ← 차분
GET /sync?since=c3e537(head)→ 0바이트                         ← Detect 전송0
GET /sync?since=deadbeef... → 4블록(전체 안전 폴백)
테스트 서버 종료 후 실제 체인 무손상 확인(4블록, head 동일).

전송절감: 노드가 1블록 뒤처졌을 때 N블록 체인 → 전체 N 대신 1블록만 전송. 헤드 동일 시 0바이트(메타데이터만). 차분 비율 = (전체-차분)/전체.

관련 파일

  • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이연합동기화.한선 (신규)
  • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이연합동기화검증.한선 (신규)
  • /Users/ef/crowny-gateway/한선게이트웨이/크라우니게이트웨이연합API.한선 (수정: import + /head + /sync)
  • /Users/ef/crowny-gateway/data/federation-chain/nodes.ndjson (읽기만, 무손상)

잔여 이슈 / 인수인계

  • 풀(full) pull 자동화: 노드 쪽에서 GET /head → 로컬 헤드와 비교 →
다르면 GET /sync?since=<로컬헤드>차분적용() 하는 풀 루프(노드 측 진입점)는 미구현. 현재는 앵커가 차분을 제공하는 절반만 구현. 노드 측 pull 클라이언트가 다음 단계.
  • /sync 서명: 현재 /sync 는 읽기전용·공개. 운영 시 노드 인증(계층A 공유키) 게이팅 검토.
  • 대용량 차분 청크: 차분이 STR_MAX(16KB) 초과 시 호출측 청크 전송 필요(현재 라인누적 1응답).
블록 수십개 이상이면 페이지네이션(?since=&limit=) 추가 권장.
  • 분기(fork) 해소: 차분적용 -1(분기) 시 현재는 거부+보고만. fork 자동 해소 정책(최장체인 등) 미정.