RWA NAV, 컴플라이언스, Tranche Waterfall
도입
RWA token은 오프체인 자산을 그대로 온체인에 올린 것이 아니다. 보통은 법적 청구권, fund interest, receivable, treasury exposure 같은 권리를 token으로 표현하고, 이전 제한과 투자자 자격을 함께 가진다. 따라서 RWA를 DeFi 담보나 yield asset으로 볼 때는 price보다 claim과 redeemability가 먼저다.
NAV는 자산 평가액을 말하지만 즉시 현금화 가능한 금액은 아니다. redemption queue, valuation lag, transfer restriction, market holiday, custodian status가 함께 작동한다. tranche 구조가 들어가면 senior와 junior가 손실과 수익을 다른 순서로 흡수한다.
학습 목표
- RWA token을 오프체인 자산 그 자체가 아니라 법적 청구권과 이전 제한으로 설명한다.
- NAV oracle, transfer restriction, qualified investor, redemption queue를 제품 상태로 연결한다.
- senior/junior tranche waterfall이 손실과 수익을 어떻게 배분하는지 계산한다.
개념 설명
valuation date and source
jurisdiction and qualification
staleness and proof
senior before junior
| 구성요소 | 의미 | DeFi 연결 위험 |
|---|---|---|
| NAV | 평가 기준 가격 | lag and stale valuation |
| Transfer restriction | 이전 가능 조건 | secondary liquidity 제한 |
| Redemption queue | 상환 요청 대기열 | exit delay |
| Senior tranche | 우선 지급 권리 | 낮은 수익, 낮은 손실 흡수 |
| Junior tranche | 후순위 권리 | 높은 수익, 먼저 손실 흡수 |
코드로 확인하기
export function canTransferRwa({ qualified, jurisdictionAllowed, tokenFrozen }: { qualified: boolean; jurisdictionAllowed: boolean; tokenFrozen: boolean;}) { if (tokenFrozen) return { ok: false, reason: "token-frozen" }; if (!qualified) return { ok: false, reason: "not-qualified" }; if (!jurisdictionAllowed) return { ok: false, reason: "jurisdiction-blocked" }; return { ok: true, reason: "eligible" };}export function trancheWaterfall({ cashflow, seniorPrincipal, juniorPrincipal, loss }: { cashflow: number; seniorPrincipal: number; juniorPrincipal: number; loss: number;}) { const juniorLoss = Math.min(juniorPrincipal, loss); const seniorLoss = Math.max(0, loss - juniorLoss); const seniorPayout = Math.max(0, Math.min(cashflow, seniorPrincipal - seniorLoss)); const juniorPayout = Math.max(0, cashflow - seniorPayout - seniorLoss); return { seniorLoss, juniorLoss, seniorPayout, juniorPayout };}첫 함수는 ERC-3643 계열 permissioned transfer 사고방식을 단순화한다. 두 번째 함수는 junior가 먼저 손실을 흡수한다는 tranche 구조의 핵심을 보여준다.
강의 포인트
| 관점 | 확인할 질문 | 증거로 남길 것 |
|---|---|---|
| Legal claim | token holder가 무엇을 청구할 수 있는가 | offering and claim docs |
| NAV | 평가가 언제 업데이트됐는가 | valuation timestamp |
| Transfer | 누가 받을 수 있는가 | identity and jurisdiction |
| Waterfall | 손실과 수익이 어떤 순서로 배분되는가 | tranche rule |
실무 예시
백엔드[OPS] RWA vault share를 DeFi portfolio에 표시한다. 단순히 NAV x share balance를 보여주면 부족하다. 사용자는 transfer 가능한지, 상환 요청이 가능한지, NAV가 언제 업데이트됐는지, junior tranche가 손실을 얼마나 흡수했는지 알아야 한다.
RWA를 lending 담보로 받으면 더 엄격해야 한다. token이 1달러 NAV를 갖더라도 오늘 liquidator가 팔 수 없다면 liquidation 담보로 부적합할 수 있다. NAV와 executable price는 다르다.
흔한 오해와 실패 시나리오
| 오해 | 실패 시나리오 | 교정 방식 |
|---|---|---|
| RWA token은 자산 그 자체다 | 법적 청구권과 이전 제한을 놓친다 | claim과 restriction을 분리한다 |
| NAV는 현금 가치다 | redemption delay와 liquidity gate가 있다 | redeemability를 표시한다 |
| permissioned token은 DeFi와 안 맞는다 | 특정 시장에서는 규제 준수를 위해 필요하다 | transfer hook과 eligibility를 모델링한다 |
| senior는 무위험이다 | 큰 손실에서는 senior도 손실을 본다 | waterfall stress를 계산한다 |
실습 과제
- Transfer eligibility 함수 작성하기: investor status, jurisdiction, token restriction을 받아 transfer 가능 여부와 거절 사유를 반환한다.
- Tranche waterfall 계산하기: pool cashflow, senior principal, junior principal, loss amount를 받아 tranche별 payout을 계산한다.
완료 기준
- RWA vault의 NAV, redeemability, transfer eligibility를 분리한 상태표를 만들었다.
- tranche waterfall에서 senior와 junior 손실 흡수 순서를 계산했다.
근거 자료
- 07 RWA
- ERC-3643 Documentation
- Centrifuge Protocol Overview