진행 현황 (2025-12-03)
완료
- Phase 1: 모노레포 골격 구축 (
contracts/, server/), Hardhat·NestJS 기본 세팅
- Contracts:
MijiERC721.sol, MijiERC1155.sol 작성, solhint 통과, Hardhat build 성공, deploy 스크립트 정비, TypeChain v6 업데이트
- Phase 2 (핵심 인프라)
- ConfigModule +
.env 로더, validation(Joi)
- Mongoose DatabaseModule (
DB_URI 연동)
- 전역 AuthGuard(x-api-key) + HttpExceptionFilter
/health 엔드포인트(Mongo ping) → Public() 처리로 인증 없이 접근 가능
- ESLint/Prettier 정리,
pnpm --filter server lint/test 통과
- Phase 3 (진행 중)
- BlockchainModule + SecretsManager 캐싱 + Redis 기반 NonceManager
- Contracts 모듈 Bull 큐 구성 (order + processor) 및 Swagger 문서화
- Metadata API/스키마/DTO 구현, Swagger 데코레이터 적용, 서비스 유닛 테스트 추가
- Dockerfile 멀티 스테이지 빌드, Docker Compose( Redis 포함 )로 로컬 통합 실행 검증
- Redis/Secrets 설정 문서화, README/DEV 문서 최신화
- MintingModule 구축(스키마·DTO·Swagger·Bull Processor·Nonce 연동) 및 이벤트 훅 정의
- JanitorModule Cron으로 minting/deployment stuck 작업 자동 복구
- Mongo 스키마 풀세트(Asset/MintingOrder/WebhookLog) 작성하여 PLAN·SCHEMA 싱크
- Metadata Occupancy 검증(ERC-721 단일 사용/1155 호환성 체크) 및 민팅 상태 조회 API(by-tx/by-token) 추가
- 컨트랙트 배포 시
metadataBaseUri를 받아 ERC-721/1155 Base URI 자동 설정 (기본값: METADATA_BASE_URI)
- E2E 테스트 제거(요청에 따라) 후 lint/유닛 테스트 체계 유지
- Phase 4 (진행 중)
- Webhook 모듈 구현 (Bull 큐 + Processor)로
mint/deployment 성공·실패 이벤트를 외부로 전송 및 WebhookLog 기록
- Redis 재기동 복구 절차 확립(도커 볼륨,
redis:sync-nonce CLI, Janitor onModuleInit) 및 docs/INFO/REDIS_INFO.md 문서화
- 민팅 상태
SENT 추가와 Janitor 재큐 조건 보강(이미 txHash가 있는 주문은 재삽입 금지)
- Metadata GET 엔드포인트에
@Public() 적용해 인증 없이 조회 가능하도록 수정
- Contracts/Minting 서비스 단위 테스트 초안 작성 (
contracts.service.spec.ts, minting.service.spec.ts)
nestjs-pino 기반 구조화 로그 및 @nestjs/throttler 전역 rate limit 적용, 주요 POST API 커스텀 제한 추가
/status 엔드포인트에서 Mongo/Redis/큐 지표 노출
- 레거시 토큰 ID 정규화를 위한
pnpm --filter server migration:normalize-token-ids 스크립트 추가
- Metadata/Webhook/Blockchain 서비스 단위 테스트 확장 및 Hardhat 시뮬레이션 케이스(ERC-721/1155) 추가
- CoinGecko 시세 연동 + Redis 캐싱으로 민팅 수수료(AVAX/USD/KRW) 계산 및
MintingOrder billing 필드 저장
- 컨트랙트 배포 시에도 CoinGecko 시세 기반으로 가스비(AVAX/USD/KRW)를 계산해
DeployedContract에 저장
- TransferModule (Gasless):
- MinimalForwarder 기반 대납 Transfer API (
POST /transfer/execute) 구현 및 Bull 큐 처리
- 테스트용 서명 생성 엔드포인트 (
POST /transfer/signature) 구현
TransferOrder 스키마 구현 및 가스비/시세 기록 (Billing)
transfer.success, transfer.failed Webhook 이벤트 구현
- Silent Failure 감지: Transaction 로그 분석을 통한 내부 호출 실패 감지 로직 적용
- Forwarder Selection: 요청 Body(
forwarderAddress) 우선 -> DB -> 환경변수 순서의 Forwarder 선택 로직 구현
- Corporate Account 지원:
CorporateAccount 스키마 및 X-CORPORATE-ID 헤더 기반 인증 레이어 도입 (AuthGuard 확장)
deployedContracts, mintingOrders, transferOrders에 corporateId 필드 추가 및 조회 시 격리 로직 적용
- Bull Job Payload에
secretKeyId를 포함하여 Processor에서도 기업별 Private Key로 signer 생성
POST /contracts/read, /minting, /transfer 등 주요 API에 x-api-key + X-CORPORATE-ID 듀얼 헤더 요구 및 접근 제어 강화
- Forwarder Management:
Forwarder.sol 작성/빌드/Linting
POST /contracts/forwarder 배포 API 구현
isTrustedForwarder 검증 로직 구현
- Contract Read API:
POST /contracts/read 구현 (가스비 없는 View 함수 호출, ownerOf, isTrustedForwarder 등 조회 용도)
진행 예정
- Bull 큐·배포 플로우 검증: Redis + Bull 환경에서 Contracts/Minting/Webhook end-to-end 시나리오 테스트
- 운영 품질 후속:
/status 데이터를 활용한 대시보드 연동, Secrets/Redis 세부 지표 문서화, 추가 경보 정책 정립
- CI/CD 번들 마무리: GitHub Actions + CodeDeploy 파이프라인 스켈레톤, assets/appspec/scripts 정의 (초기 버전 → 검증 필요)