Off-Ramp Layer
The Off-Ramp Layer enables instant crypto-to-fiat conversion with 3-second settlement via direct banking API integration.
Settlement Flow
Step 1: User initiates off-ramp
POST /offramp/request
{ amount: 1000, currency: "NGN", bank_code: "058", account: "0123456789" }
Step 2: Smart contract escrow
Vault.withdrawToEscrow(shares, destId)
→ USDC locked in escrow contract
Step 3: LP matching
System selects optimal liquidity node:
- Same bank preference (GTBank → GTBank LP for 3s settlement)
- Sufficient fiat balance
- Highest reliability score
Step 4: Fiat transfer (automated)
Paystack API → initiate_transfer({
recipient: resolved_account,
amount: 1_565_000, // NGN equivalent
currency: "NGN"
})
Step 5: Confirmation
Webhook: transfer.success
→ Backend calls Escrow.releaseAfterSettlement()
→ USDC released from escrow to LP node
→ User's bank account credited
Step 6: Failure handling
If transfer fails or times out:
→ Escrow.refundIfFailed()
→ USDC returned to user's wallet
→ No manual intervention neededSettlement Times
| Transfer Type | Expected Time |
|---|---|
| Same-bank (e.g., GTBank → GTBank) | 3 seconds |
| Same-network (NIP — GTBank → Zenith) | 1–2 minutes |
| Cross-bank | up to 5 minutes |
Liquidity Node Model
┌─────────────────────────────────────────┐
│ Liquidity Node │
│ │
│ Operator stakes collateral (USDC) │
│ Maintains fiat balance in bank acct │
│ Connected via banking API │
│ │
│ Revenue: 0.5% per transaction │
│ Penalty: Deprioritized + collateral │
│ slashed for repeated failures │
└─────────────────────────────────────────┘KYC-Lite Requirements
Off-ramp users must complete lightweight identity verification:
- Full name
- BVN (Bank Verification Number) — Nigeria
- NIN (National Identification Number) — Nigeria
- Transaction limits applied based on verification level
Supported Currencies
| Currency | Country | Banking Partner | Status |
|---|---|---|---|
| NGN | Nigeria | Paystack, Moniepoint, Kuda | MVP |
| GHS | Ghana | Paystack | Post-beta |
| KES | Kenya | M-Pesa integration (planned) | Post-beta |