크라우니 DEX 2단계 — 에이전트 6,561·유통량 가드·배포 산출물
개요
/Users/ef/crowny-dex 1단계(토크노믹스 서버+웹) 위에 작업지시 §3(에이전트 6,561)·§2(배포)·
유통량 10% 가드를 구현. 전부
DEX서버.한선 단일 파일에 통합(별도 프로세스 대신 같은 프로세스
내 함수 재사용 — TCP클라이언트(
TCP연결)가 실제 VM에는 미구현임을 사전 확인하고 방향 전환).
무엇을 했는지
- 에이전트 6,561 —
DEX서버.한선에 섹션 추가(국가/업종/서비스 배열, 담당계산, 8자리 3진 성격,
에이전트스왑실행→재투자원장, 틱배치+p95측정, 전수검증 함수).
- 담당: agentId 1~1530 → 국가(153×10, 주담당+연계9, 연계는 (idx+role)%153 순환 → 항상 idx+1 간선이
존재해 전 국가 강연결 보장), 1531~6561 → 업종(81) 짝수오프셋 / 서비스(20) 홀수오프셋 순환. 전수 검증
API(
/api/agents/verify)로 6561명 처리·미배정 0명·국가별 정확히 10명·업종 81/81·서비스 20/20 실측.
- 캐릭터: seed=agentId, 8자리 3진수. agentId 3721 →
12002211(작업지시 예시와 정확히 일치).
- 거래차익 100%
reinvest_ledger 귀속: 에이전트 스왑은 산출가치를 자기 잔고에 적립하지 않고
재투자기록()으로 담당명 태깅해 귀속. from 토큰만 차감, 부족분은 "agent_capital_topup"으로 감사
로그에 별도 기록(차익 아님, 순환 운영자본). 감사 결과 에이전트 잔고 누적 없음 확인.
- 스케줄러: 단일 프로세스,
/api/agents/tick {n} 배치 호출(우선순위 큐 대신 라운드로빈 커서 + 밀리초
타이밍으로 p95 측정). 300명 배치 반복 시 p95 1~11ms(목표 <50ms 충족).
- 유통량 10% 상한 가드 —
/api/supply 신규(9인 보급계정 화이트리스트, value_note 필수, 토큰별
유통량 추적 후 상한 초과 시 422). 상한값은 VM 곱셈 버그 회피 위해 리터럴로 고정(아래 함정 참조).
- 배포 산출물 —
deploy/deploy.sh(rsync+systemctl), deploy/crowny-dex.service,
deploy/crowny-dex-agents.service+
.timer(에이전트 틱 5분마다 300명 순환),
deploy/nginx-dex.conf.example.
VPS에는 배포하지 않음(작업지시 명시, 파일만).
- 딥링크 —
web/index.html에 딥링크시도()(crowny://dex/탭 시도→800ms 후 해시 폴백)와
딥링크초기화()(쿼리 tab= → 해시 정규화) 추가. 한선씨 동반본
web/index.한선.
QA 결과표 (작업지시 §5 대조)
| 항목 | 상태 | 근거 |
|---|
| value_note 없는 거래 0건 확정 | 유지(1단계 검증됨) | 스왑/대출/보급 전부 422 재확인 |
| 아래로 스왑 7% 기부 적립 | 유지 | 1단계 QA 유지 |
| CRD 대출 Tier 한도 | 유지 | 1단계 QA 유지 |
| 희년 시뮬레이션 | 유지 | 1단계 QA 유지 |
| 한선/선호 비노출 | 유지 | 1단계 QA 유지 |
| 유통량 10% 상한 가드 | 부분 통과 | 로직·화이트리스트·value_note 게이트는 확인. 단 극단(수십억) 단일 발행 시 정확도가 VM 정밀도 한계로 완전 신뢰 불가(아래 함정) — 실사용 스케일은 안전, 잔여 리스크 인계 |
| 에이전트 6,561 전원 활성 24h 무중단 | 부분 통과 | 담당·캐릭터·재투자 로직은 정상, tick p95<50ms 충족. 단 6561명을 한 번에 처리하면 VM 배열 상한(≈4095)에서 프로세스가 죽는 것을 실측 — 300~500 배치로 운영 설계(systemd 타이머)로 회피, 근본 수정은 미착수 |
| 담당 없는 에이전트 0명 · 153국 10명 충족 · 연계그래프 전원 도달 | 통과 | /api/agents/verify 전수 실측: unmandated 0, country_min=max=10, 81/81, 20/20. 연계그래프는 (idx+role)%153으로 idx→idx+1 간선이 항상 존재해 수학적으로 강연결(153노드 순환) |
| 거래차익 100% reinvest_ledger 귀속, 에이전트 잔고 축적 0 | 통과 | 코드상 to심볼 잔고 미적립 구조 + audit_log 실측(agent_capital_topup만 반복, 누적 없음) |
| LLM/외부 API 호출 0건 | 통과 | grep(openai|anthropic|fetch\(|http.request|curl |gpt-|llm) 매치 없음(자기보고 필드 문자열 제외) |
| 라이트/다크 토큰 스왑만 | 유지(1단계) | 미변경 |
| 빈 포트 자동탐색→port.json→nginx 연동 | 통과(파일) | 1단계 로직 유지 + nginx-dex.conf.example에 프록시 포트 명시. 실 VPS 연동은 미실행 |
새로 발견한 VM 함정 (신규 실측, DEX서버.한선 상단 주석 + 프로젝트 CLAUDE.md에 반영)
% 연산자가 균형(centered) 나머지를 반환: 2%3 == -1, 11%3 == -1(표준 0..2 나머지가 아니라
|r|<=b/2).
내림()도 floor가 아니라 반올림(
내림(2/3)==1). 표준 나머지/floor가 필요하면
내림나눗()/
표준나머지() 보정 헬퍼로만 계산해야 한다.
- 함수 지역 배열 변수 2회째 호출 오염(기존 feedback 재확인): 8자리 3진수 추출 함수에서 실측,
배열을 함수 안에서 새로 만들어 반환하는 패턴을 반복 호출하면 2회째부터 조용히 틀린다. 회피: 배열 없이
스칼라만 반환하는 함수로 재설계.
- 큰 정수 × 소수 곱셈 심각 오염(신규):
23400000000.0 * 0.10 → 15477066(기대 2340000000의 약
1/151). float32 정밀도 손실로 설명되지 않는 규모의 곱셈 자체 결함. 회피: 상한/비율 값을 런타임에
곱하지 않고 소스에 리터럴로 직접 명시.
- VM 배열 성장 상한(≈4095)에서 프로세스 크래시: 전역 배열이 계속 append되며 길이 4095~4096을
넘는 순간 "배열 범위 초과" 런타임 에러가 100회 누적 → VM 자체 종료(단일 프로세스라 서비스 전체 다운).
에이전트 6561명을 한 번에 틱 처리(
n:6561)했을 때 실측. 완화: 배치 300~500 단위로 분할 + 외부
타이머(systemd)로 주기 실행.
관련 파일
/Users/ef/crowny-dex/DEX서버.한선 — 1단계+2단계 통합 서버(에이전트/유통량가드 섹션 추가)
/Users/ef/crowny-dex/data/countries.json, data/businesses.json — 담당 레퍼런스 데이터(SSOT는 서버 내 배열, 이 JSON은 배정 규칙 문서화용)
/Users/ef/crowny-dex/web/index.html, web/index.한선 — 딥링크
/Users/ef/crowny-dex/deploy/ — deploy.sh, systemd 유닛 3종, nginx 예시
/Users/ef/crowny-dex/CLAUDE.md — 2단계 QA·VM 함정 갱신
잔여 이슈 (다음 세션 인계)
- 유통량 가드 극단값 정확도 — VM 곱셈/덧셈 정밀도 근본 원인 미해결(리터럴 캡으로 실사용 범위는 안전).
- VM 배열 상한 근본 수정(로그 회전/압축) 미착수 — 24h+ 연속 운영 전 필수.
- 오더북 매칭엔진 체결 로직 — 3단계로 이월.
- systemd/nginx 파일 미검증 배포(파일만 작성, 작업지시 명시대로 VPS 미적용).