제품 타임라인
개발 단계와 상태다. 2026년 6월에 갱신했다(v3.0 모델 반영).
플랫폼 코어
완료
- 핵심 스마트 컨트랙트(4개. v3-11이 PlatformEscrow를 흡수해 6개에서 줄었다)
- SIWE 인증 + JWT
- SumSub KYC 연동 + SBT 민팅
- 풀 생성과 관리(어드민)
- 투자(atomic 입금 + LP 민팅. 별도 에스크로 없음, v3-03 / v3-11)
- 투자자 포트폴리오 화면
- 상환 요청 플로우(어드민 단일 승인 + PENDING_RESERVE, v3-04. pool_type은 v3-01에서 제거)
- 펀드 관리(funds, fund_members)
- 알림 시스템(V1, 이메일 + 인앱. v3-103에서
notification_events/notifications/notification_deliveries기반으로 재구축했고 SES 반송·불만 이벤트를 실시간으로 받는다) - RBAC(Admin / Operator / Fund Manager)
- NAV 오라클을 PlatformPool에 통합 🟠 PD1(결정됨)
진행 중
- NAV 갱신 플로우(어드민 패널)
- 24시간 타임락 강제
- 포트폴리오 NAV 표시(투자자 UI)
- 상각 UX(어조와 투명성)
- 어드민 패널 V2 정리
- 수익 분배 플로우(claim 기반, MANUAL_CLAIM만)
- 풀 lifecycle 자동 전이(스케줄러)
만기 후 상환: 구현됐고 수동 배포와 마이그레이션 둘을 기다린다
코드에는 있지만 라이브가 아니다. 마이그레이션 0189와 0190이 dev에 적용되지 않았고 API도 수동 deploy:dev:api다. 프론트엔드와 백엔드 쪽은 컨트랙트 변경이 필요 없고, 아래의 컨트랙트 항목 하나는 이미 구현돼 온체인에 있으며 새 팩토리에서 풀이 만들어지기만 기다린다.
- 위저드가
FIXED_MATURITY+ 회차를 만들 수 있게 하고, 계획 컬럼redemption_term_epochs·epoch_date_basis·epoch_roll_day추가(0189) 🔨 v3-132 - 배포가 시계 예산 안에서 모든 주기의 펀딩일을 쓰고,
redemption_epochs.funding_date가 실제로 기록된 것을 남긴다(0190). 인덱서 수정 포함 🔨 v3-133 - 펀딩일 리마인더를
epoch_cycle_mode가 아니라 쓰이지 않은 주기를 조건으로 발동. ⚠️ 코드 이음매 하나가 아직 발동을 막고 있다 🔨 v3-135 - 주기별 확정(
epoch_id)과 펀딩일 순서 가드를 엔드포인트에 추가(컨트랙트가 아니다) 🔨 v3-139 - role 부여가 서명자를 따라가고, 부트스트랩 PAUSER를 회수하기 전에 인계한다 🔴 v3-138
- ✅ 수익 발생이 요청이 아니라 정산에서 끝난다(컨트랙트). 마지막 MVP 항목이자 이 상품에서 엔진이 엉뚱한 사람에게 지급하던 유일한 지점이었다. 2026-08-20 반영, 2026-08-21 온체인. 신규 풀만 해당되고 아직 새 팩토리로 만든 풀이 없다 🔧 v3-131
계획됨
두 항목은 완료돼서가 아니라 다른 이유로 이 목록에서 빠졌다. "이메일 알림 시스템"은 위 완료 항목과 중복이었다. "Reserve fund mechanics"(BD4)는 대기 중이 아니라 해소됐다. R8이 reserve는 상환 유동성이고 손실을 절대 흡수하지 않는다고 정리했으므로 더 만들 메커니즘이 없다.
updateNAV의reserveConsumed는 항상 0이고 컨트랙트가 그 외의 값을 거부한다. first-loss는 Junior 트랜치이거나 운용사의 equity 버퍼다.
미정
- 세컨더리 마켓 · LP 전송 🟡 BD5
- 애널리틱스 대시보드
- 모바일 앱
참고: 다중 스테이블코인(USDC/USDT/DAI, USD 기반)은 풀별로 지원된다(풀당 하나를 권장한다). 04-pool-models 참조. KYC/KYB 게이팅은 운영 중이다(풀별, v3-10).
Joob 풀 연동 (R21)
Joob(Grab JV)의 eNote Finance 펀드 연동이다. 하이브리드 모델로, Joob API(펀드 재무)와 온체인(투자자 포지션용 RPS 토큰)을 함께 쓴다.
참고: Notion — Joob Pool Integration To Do | API 스펙 문서
ℹ️ 이 절의 일부는 3월 스펙 기준이다. 현재 정본은 Grab Joob API — Aset Integration과 2차 요청이다. 2026-06-16 리뷰에서 정리된 것: ①
total_rni는 총액으로 확정됐다. 코드yield-distributions.post.create.ts가 총액을 입력받아net_yield_fee_config(admin/perf fee)로 net을 계산한다(NULL이면 net=gross). 연동 문서 7번은 낡았다. 확인이 남은 한 줄은 rni가 이미 Joob 쪽 LOF/WHT를 뺀 값인지다(Aset 수수료 계층과는 별개다). ② DPD는 구간별(30/60/90) 구현이 최종이다. Joob에 대해 그렇고(아래에서 정정됨. ⚠️ 마스터 라우트는 2026-08-19에 대체됐다. 30/60만 제공하고 구간 90은/risk/nonperforming으로 대체됐다. Guest API 표면 참조) 분모(active_loan_count/미상환)만 2차 요청 대상이다. (Aset 쪽 반입과 데이터 모델은 Joob이 아닌 규제 체계를 위해 관할이 정의하는 동적 구간으로 일반화하는 중이다. v3-59)
완료 (1단계, 스펙)
- Joob API 스펙 작성과 통화 완료(엔드포인트 3개: Fund Summary, Fund History, DPD Risk)
- RPS 토큰 컨트랙트 확인:
0x3f9c...1403(Kaia) - DB 스키마:
pools에operating_currency,fx_rate컬럼 추가(schema.sql L322-323) - 어드민 API 타입:
operatingCurrency,fxRate매핑 정의(admin-web/shared/api/pools.ts) total_rni가 총액임을 확인(mgmt/perf fee 미적용,net interest = interest - LOF - WHT)- 투자자 데이터: Joob이 제공하지 않아 온체인
balanceOf와 Transfer 이벤트 인덱싱으로 대체 - DPD: 구간별(30/60/90) 구현(Joob
/risk/dpd/{bucket}을 구간마다 호출). 3월의 "구간 불필요" 계획에서 바뀌었다. ⚠️ 2026-08-19 기준 펀드 라우트에만 해당된다. 마스터 라우트는 구간 90을 뺐고(dpd-exclude-90) 집계를 월별로 키잉한다. Guest API 표면 참조.active_loan_count와 미상환 분모는 미포함이라 2차 요청 대상
⚠️ 아래 단계 날짜는 3월 계획 기준이고 이미 지났다
2~4단계는 2026년 4~5월로 잡혀 있었다. 제목을 현재 상태로 읽지 말 것. 2026-08-06 점검에서 코드로 확인할 수 있었던 줄은 아래에 ✅나 ⛔로 표시했고, 나머지는 여기서 재검증하지 않았다. 실제 현황은 이 페이지가 아니라 위에 링크한 Notion 정본에 있다.
2단계: DB와 백엔드 (예정 4/1)
- ✅
pools.post.create.ts가operating_currency,fx_rate를 받는다 - ✅
pools.patch.update.ts에 두 필드가 배선됐다 - Joob 풀 수동 생성과
lp_token_address= RPS 컨트랙트: 재검증 안 함 - ShardLab/Hashed 입금과
portfolio_positions수동 생성: 재검증 안 함 - 투자 가능 상태 로직: 비투자자는 CLOSED, 투자자는 ACTIVE(
lifecycle_status와 노출): 재검증 안 함 - 계약에 맞춘 풀 값 확정(락업, 패널티, 최소 투자금): 상업 조건이고 코드가 아님
3단계: UI (예정 4/15)
- 어드민
pool-form.tsx에operating_currency,fx_rate입력 필드 - 풀 상세
pool.$id.tsx에 Fund Statistics 카드(FX 배너폐기됨. v3-24, USD 전용이고 투자자 대상 FX 고지 없음) - 포트폴리오
portfolio.tsx에 수익률 % 표시와 CLOSED 풀 버튼 숨김 풀 카드의 운영 통화 태그(폐기됨.operating_currency는 백엔드 전용, v3-24)- 어드민: Joob 풀 전용 관리(수수료 추적, DPD 리스크 모니터)
- Net Yield 계산 로직: 연 1% admin fee(분기 지급) + 20% perf fee(15% hurdle 초과분, 만기에)
4단계: API 연동 (예정 5월 초)
- ✅ 예약된 fund-data 동기화가 있다(
fund-data.scheduler.sync) →external_pool_data_snapshots - ✅ TVL 스냅샷 크론이 있다(
pools.scheduler.tvl-snapshot) →pool_tvl_history - ✅ 온체인 LP
Transfer인덱싱이 있다(onchain-indexer.scheduler) →portfolio_positions - 투자자 포지션: 온체인
balanceOf와 Fund Summary 하이브리드: 재검증 안 함
다음 사이클
- 풀 스마트 컨트랙트 설계와 배포
- API 동기화에서 온체인으로 전환
- IRR 계산(현금흐름 기반, Aset 자체 계산)
- 회수율(NPL 0%라 아직 필요 없음)
- eNote v2 갱신 이후의 대출별 상세 데이터(4월 이후)