크라우니 스테이킹·밸리데이터 1차 (빌드큐 P2-1)
개요
크라우니체인(chain.crowny.org:9729) 기반 스테이킹·밸리데이터 서비스 1차 출시분. 순수 한선씨 엔진+API 서버+페이지. 포트
:9975 (free 9960-9999 범위에서 확보, gateway.yaml 미등록 상태 — 결선은 runbook 참조).
무엇을 했는지
스테이킹 엔진 (libs/스테이킹엔진.한선): append-only 이벤트 로그(토르노드.한선 포맷 계승) 기반.
스테이크 선언(주소·양[맘]·기간[일, 1~3650]) → until = now + days×86400 잠금
언스테이크: 만기 도래분(Σ만기 stake − Σ기인출)만 인출, 만기 전 거절
밸리데이터 등록: 활성 스테이크 ≥ 10,000맘 임계, 중복 거절
보상: 연 5%(500bp) 일할 = floor(양×경과일/7300), 몫곱 패턴(내림나눗셈 헬퍼로 자연반올림 보정, 1e8 초과 곱 회피). 발생 구간 = 스테이크 시각~min(now, 잠금해제)
슬래싱: 1차 규칙 정의만(다운타임 에폭당 10bp, 누적 상한 500bp, 에폭=86400s, enforced:0)
API 서버 (스테이킹서버.한선, :9975): 라이브 체인 서버(9729, /tmp 바이너리 7서버 군) 수정 대신 독립 서버로 — 라이브 리스크 0.
GET /api/health · GET /api/staking/status[?addr=] · GET /api/staking/rewards?addr= · POST /api/stake · POST /api/unstake · POST /api/validator/register
%XX UTF-8 멀티바이트 URL디코드 자작(글자변환 빌트인) → 한글 주소 쿼리 지원
페이지 1장: GET / — 현황(총스테이크·연이율·밸리데이터 표)+선언 폼. crowny.org 본체 토큰(--bg:#FAF9F7 --text:#1A1A1A --gold:#C9A961 --border:#E5E2DD, Pretendard).
RPN 부본: libs/스테이킹엔진.rpn.한선 (high2rpn.sh)관련 파일
/Users/ef/crowny-staking/libs/스테이킹엔진.한선 — 엔진 (순수 함수, 서버 기동문 없음)
/Users/ef/crowny-staking/libs/스테이킹엔진.rpn.한선 — RPN 부본
/Users/ef/crowny-staking/스테이킹서버.한선 — API 서버+페이지 (:9975)
/Users/ef/crowny-staking/테스트_엔진.한선 — 시나리오 테스트 21항목
/Users/ef/crowny-staking/시작.sh — 컴파일+재기동 스크립트
/Users/ef/crowny-data/staking/stakes.dat — 이벤트 로그(append-only, 출시 시 초기화. 테스트분은 stakes.dat.test-20260703 보관)
검증 결과
- 엔진 테스트 21/21 통과 (테스트_엔진.한선): 내림나눗셈(7,2)=3 · 보상일할(73000,365)=3650[손계산 73000×5%] · (10000,100)=136[10000×500×100/3650000=136.98→내림] · (1e8,3650)=5e7 무붕괴 · 임계 미달/충족/중복 등록 · 만기 전 거절 · 만기분 인출 · 이중 인출 거절 · 100일 경과 보상 136
- API 시나리오 (curl, 라이브): 스테이크 12000맘/30일 선언→ok · amt=0 거절 · 상태 조회 total 12000 · 밸리데이터 등록 ok(12000≥10000) · 한글주소 %인코딩 status?addr= 정상 · 만기 전 언스테이크 거절 · 주입 만기 레코드 7300맘 언스테이크 ok · 보상 99=floor(7300×99일/7300) 손계산 일치 · 페이지 4811B 200
결선 runbook (수동 — gateway.yaml은 이 세션에서 미수정)
bash~/.claude/scripts/crowny-ports.sh check 9975 # 여전히 빈 포트인지
~/.claude/scripts/crowny-ports.sh set staking.crowny.org 9975 # gateway.yaml SSOT 등록
# 게이트웨이 리로드는 게이트웨이 담당 절차로
서버 기동:
/Users/ef/crowny-staking/시작.sh (현재 인스턴스 pid는 lsof -iTCP:9975로 확인)
잔여 이슈 (2차)
- 슬래싱 집행(다운타임 감지기 연동) — 현재 정의만
- 보상 청구/복리(engine에 청구 이벤트 추가) 및 뱅크서버(:9733) 잔고 연동(스테이크 시 실잔고 차감)
- 이벤트 로그 스캔이 매 요청 전체 읽기 — 읽기() 64KB·줄목록 1023 상한 도달 전 스냅샷+압축 필요
- VM 함정 재확인분: 맵있나() 부재 시 -1(3진 거짓) — ==0 비교 금지 (엔진에서 실제로 밟고 수정)
크라우니코드: lookup HIT 5 / MISS 2 / learn 2
결선 완료 (2026-07-04)
- staking.crowny.org → :9975 게이트웨이 결선(gw add, 핫리로드) + 전용 LE cert + stunnel lineage(staking, 3곳+PRIORITY) SIGHUP. 공개 HTTPS 200. A레코드=사용자 등록 완료.