요청: cycle-v2.1-잔여작업-거래원장-CSRF
- 날짜: 2026-05-27 19:02:21
- 작업 경로: /Users/ef/crowny-cycle
요청 본문
잔여작업 계속. (cycle v2.1: 사용자별 거래 원장 통합 + CSRF 토큰 + 추가 검증)
관련 산출
(클로드가 작업 결과를 이어 기록)
산출
v2.1 — 사용자별 거래 원장 + CSRF 토큰
1) 사용자별 거래 원장 (가치원장 패턴 inline)
- 글로벌 append-only 배열: 거래아이디/유형/금액/설명/해시/시각 + 마지막해시 매핑
사용자마지막해시(id)역방향 스캔 — 사용자별 해시 체인 분리거래기록(id, 유형, 금액, 설명)— 해시_SHA256 체인 + WAL 영속 (data/거래.dat)사용자유형합계(id, 유형)/사용자순가치(id)/사용자거래수(id)- 등록 자동 거래: 테더/바이낸스 등록 시 [순환] 거래 자동 기록 (메타 트레일)
2) /tx-form + /api/tx-record + /api/tx-list
/tx-form?token=→ 폼 (유형 select + 금액 + 설명) + nonce 자동 발급POST /api/tx-record→ 토큰 + nonce 검증 → 거래 기록 → HTML 완료 페이지GET /api/tx-list?token=→ 사용자 거래 JSON 배열 + net + count/wallet에 거래 원장 카드 추가 (최근 5건 + 순가치 + USDT 변환)
3) CSRF 토큰 (nonce)
- 글로벌 append-only: nonce값/세션/만료 — 600초 유효
nonce생성(세션토큰)→ 해시_SHA256(세션+시간+순번) 32자nonce검증(값, 세션)— 세션 일치 + 미만료 (append-only 한계로 일회용 아님)/tx-form진입 시 자동 발급 → 폼 hidden input/api/tx-record에 nonce 검증 강제
검증 결과
| # | 시나리오 | 결과 |
|---|---|---|
| 1 | 가입+로그인 → 토큰 발급 | ✓ |
| 2 | 테더/바이낸스 등록 → 자동 [순환] 거래 2건 | ✓ |
| 3 | /tx-form → nonce 발급 (32자) | ✓ |
| 4 | POST 거래 3건 (유입/지출/생산) — 각각 새 nonce | ✓ 거래 기록 완료 |
| 5 | 잘못된 nonce 시도 | ✓ CSRF 검증 실패 |
| 6 | /api/tx-list — 5건(자동2+수동3), net=77000 | ✓ |
| 7 | /wallet 거래 원장 카드 + 순가치 77000 + 5건 표시 | ✓ |
관련 파일
/Users/ef/crowny-cycle/사이클서버.한선(1507줄, v2.1)/Users/ef/crowny-cycle/data/거래.dat(WAL 영속)
보안 등급 추이
- v0 D · v1 D · v1.5 D+ · v1.6 C · v2 B · v2.1 B+ (CSRF 추가)
v2.2 잔여
- CSRF nonce 일회용 강제 (현재 append-only 한계로 만료까지 재사용 가능)
- HTTPS (gateway TLS — 별도 세션)
- gateway 매핑 cycle.crowny.org (별도 세션)
- 실 바이낸스 읽기전용 API (외부 키 필요)
- 실 Claude API 결제 자동화 (외부 키 필요)
- value.crowny.org:9879 와 양방향 거래 동기화 (현재는 cycle 자체 원장만)