crowny-reward Phase 11: FuncRef u32 + 루프 백점프 와이드 인코딩
날짜: 2026-05-28 담당: Claude Sonnet 4.6
개요
보상서버에 8개 신규 모듈(인증/티옴타_클라/가치동기화/영속압축/멤버검색/만기시뮬/멤버유형/만기정산) 추가 시 발생하던 라우트 timeout의 두 번째 본질 한계를 추적하여 3개 추가 버그를 발견하고 수정 완료. CrownyTVM을 cargo build --release로 재빌드 후 27모듈 통합 서버에서 3개 핵심 라우트 전체 정상 응답 확인.
무엇을 했는가
발견한 버그 3개
- 루프 백점프 Trit9 truncation (핵심 원인)
emit_a(op::JMP, loop_start) 가 loop_start를 Trit9(±9841)로 저장
- 코드가 9841 인스트럭션 초과 시 루프 시작 주소가 음수로 래핑
- 동안(참) 메인 서버루프가 1회만 실행 후 탈출 → 다음 요청 처리 불가
- WAL 복구 루프 디버그로 정확히 i=1에서 탈출 확인
- 수정: emit_jmp_wide() 헬퍼(BASE=9841 와이드 인코딩) 추가, 루프 백점프 4곳 교체- FuncRef(u16) 오버플로
- max_cycles = 100M 서버 고갈
동안(참) 루프가 100M 사이클 소진 후 종료
- 수정: vm.max_cycles = u64::MAX수정된 파일
/Users/ef/Downloads/CrownyTVM/src/compiler/codegen.rs—emit_jmp_wide()추가, 루프 백점프 4곳, FuncRef as u32/Users/ef/Downloads/CrownyTVM/src/vm/trit.rs— FuncRef(u32), Closure { func_ref: u32 }/Users/ef/Downloads/CrownyTVM/src/vm/engine.rs— call_func(u32), MAKE_FUNC/CLOSURE u32, wide_jmp_target/Users/ef/Downloads/CrownyTVM/src/main.rs— max_cycles = u64::MAX, direct_output = true/Users/ef/crowny-reward/보상서버.한선— 8 신규 모듈 가져오기 추가 (Phase 11 주석)
최종 검증 결과
포트 9915, _test_보상서버_9915.han (27모듈 통합):
curl http://localhost:9915/stats
→ {"members":1,"cultures":0,"total_crd":1320,"progress":1,"stage":0}
curl http://localhost:9915/declare
→ ════════ reward.crowny.org — CRP 9 원리 헌장 ════════ ...
curl "http://localhost:9915/work?id=alice&kc=27&v=165"
→ {"id":"alice","earned_crd":1320,"new_grade":"정규","new_total_kc":54,
"create_3x":3960,"member_share":1320,"ecosystem_share":1320,"reserve_share":1320}
3개 핵심 라우트 전체 정상.
관련 파일 경로
- 분석 보고서:
/Users/ef/crowny-reward/.compiler_threshold_analysis.md - 보상서버 소스:
/Users/ef/crowny-reward/보상서버.한선 - 테스트 파일:
/Users/ef/crowny-reward/_test_보상서버_9915.han - CrownyTVM 소스:
/Users/ef/Downloads/CrownyTVM/src/ - 바이너리:
/Users/ef/Downloads/CrownyTVM/target/release/crowny
잔여 이슈
- 포트 9738의 구 crownyc 서버(LaunchAgent 자동 재시작)와 신규 CrownyTVM 서버 간 전환 필요
_test_*.han임시 테스트 파일 정리 (9905~9915 포트 테스트용 — 선택적 삭제 가능)- 상수 풀 인덱스 한계(Trit9 ±9841, 현재 ~620 사용 중) — 50+ 모듈 통합 시 재검토 필요