1. 방법론 — "개발한 AI가 감사자 모자를 쓴다"
이 프로젝트는 1인 + AI 에이전트 워크플로우로 개발된다. 기능 구현이 한 단락 끝날 때마다 같은 AI가 감사자 역할로 전환해 컨트랙트·클라이언트를 다시 읽고, 발견한 결함을 수정 → 재배포 → 소스 검증 → E2E 재통과까지 한 사이클로 닫는다. 아래는 실제로 발견·수정된 결함의 전체 기록이다 — 발견 못한 척하지 않고, 수정 커밋과 함께 공개한다.
2. 발견 및 수정 내역
| 심각도 | 결함 | 영향 | 조치 |
|---|---|---|---|
| 높음 | ERC-1155 스펙 위반 — supportsInterface가 1155를 주장하는데
balanceOfBatch/safeBatchTransferFrom 부재 |
지갑·인덱서가 쿠폰 토큰 연동 시 오동작 가능 | 배치 함수 복원 후 재배포·검증 |
| 높음 | 던전 settleRun 권한 결함 — 회차 입장자 검증 없음 |
길드원 누구나 타인의 원정 회차를 대신 정산 가능 | 입장자 기록(_runner)·본인 검증 추가 |
| 높음 | 클라이언트 nonce 경합 — 프레즌스 비컨과 사용자 tx(구매·입장·정산)가 같은 지갑에서 병렬 전송 | 사용자 tx가 간헐적으로 소실 (E2E에서 재입장 tx 소실 재현: 8건 중 2건 실패) | 지갑 쓰기 직렬화 큐(queueTx) 도입 → E2E 8/8 재통과 |
| 중간 | 결정론적 문 결과의 오프라인 탐색 가능성 — 시드·회차가 확정되면 숙련 사용자는 무함정 경로를 미리 계산할 수 있다 | 던전 리스크(push-your-luck)가 스크립트 사용자에게 무력화 | 구조적 한계로 판단, 컨트랙트 주석·로드맵에 명시 (메인넷 수준에선 VRF 또는 커밋-리빌 필요) |
| 낮음 | 비컨 좌표 무검증 — 악의적 비컨이 아바타를 월드 밖에 렌더 가능 | 시각적 교란 (자금 영향 없음) | 수신 시 월드 반경·속도 클램프 |
| 회귀 | 자체 도입한 JSON-RPC 배칭이 GIWA 공개 RPC에서 403 거부됨 (실측) | 배치에 묶인 모든 읽기가 동반 실패 | 배칭 롤백 + 금지 주석, 레이트리밋은 폴링 백오프로 대응 |
3. 검증 방법
- 서버 미기동 E2E — 게임 서버를 완전히 끄고 두 지갑(A·B) 클라이언트로 노점 개설→동기화→비컨 데드레커닝→에스크로 구매→길드 창설→던전 입장·정산→ 리더보드 동기화 8개 항목 자동 검증 (수정 전 6/8 → 수정 후 8/8)
- 컨트랙트 소스 검증 — 전 컨트랙트 Blockscout standard-input 검증 (solc 0.8.36, optimizer off)
- 스모크 — 칭호 자격→클레임→장착, 에스크로 confirm/dispute/refund 경로를 온체인 실거래로 확인
4. 알려진 한계 (미해결 공개)
- 던전 결과의 오프라인 탐색 가능성 (2절) — 테스트넷 실험 범위로 수용
- 공개 RPC 직접 폴링 — 동시 접속자가 늘면 레이트리밋에 막힌다. 계획: 읽기 캐시/인덱서 + 캐시 다운 시 RPC 폴백 (기술 문서 TODO 참고)
openStalls()/allGuilds()전체 순회 뷰 — 수천 개 규모가 되면 페이지네이션 필요- 노점 상품 교체 프런트러닝 — 구매 tx 확정 직전에 판매자가 같은 가격의 다른 상품으로 교체 가능 (가격은 강제되므로 금전 피해는 없음)
정직한 고지: 이 문서는 개발에 사용된 AI가 수행한 자체 감사 기록이며,
독립적인 외부 보안 감사를 대체하지 않는다. 메인넷 배포 전에는 외부 감사가 필요하다.
다만 "AI가 개발하고 AI가 감사하며 그 기록을 전부 공개한다"는 워크플로우 자체가
이 프로젝트의 개발 방법론이다.