EFcard 라이선스 결제 시스템 완성 + 기존 라이선스 버그 수정.
db.licenses = {} + saveDb() (no-op) → 라이선스가 메모리에만 존재, 서버 재시작 시 소실licenses SQLite 테이블 + saveLicense() / getLicense() 함수{wallet_id, purpose, ts})인데 INTEGER 컬럼에 직접 삽입 시도 → RangeErrortypeof v === 'object' ? JSON.stringify(v) : v 로 안전 처리사기검사() — velocity(5분/1시간), spike(10배), scatter 탐지승급판정() — T0→T1→T2 자동 승급 조건 판정일일한도() / 일일한도체크() — Tier별 한도라이선스서명() / 라이선스검증() — HMAC 서명 생성/검증라이선스가격() — SKU별 맘 단위 가격사기탐지_velocity_spike라이선스_서명_검증tier_승급_판정카드 발급 → EF-BUYER-01 ✅
담보 50000맘 부여 ✅
CROWNYC-DEV 구매 (300맘, 담보 사용) ✅
라이선스 SQLite 영속 ✅
토큰 HMAC 검증 → valid=True sku=CROWNYC-DEV ✅
/Users/ef/crowny-card/server.js — licenses 테이블 + saveLicense + nonce 마이그레이션 수정/Users/ef/crowny-card/src/결제로직.한선 — 사기탐지/Tier/라이선스 한선씨 동반/Users/ef/crowny-card/CLAUDE.md — 로드맵 Phase 1~5 갱신