Mortgage Lifecycle
Every borrowing position in Buttonwood is represented by a Mortgage NFT (ERC-721). This document describes the full lifecycle of a mortgage from creation to resolution.
1. Creation
BNPL Path
- User submits a purchase order with a stablecoin down payment
- The Router wraps stablecoins to USDX and submits the order to the
MortgageQueue - An off-chain fulfillment service purchases HYPE on Hyperliquid's spot DEX
- On-chain settlement mints the Mortgage NFT via
LoanManager - Purchased HYPE is locked in
SubConsol
Compounding Path
- User deposits HYPE and requests additional HYPE on credit
- The protocol executes a flash-loan-equivalent: deposit is used as down payment, borrowed amount finances more HYPE
- All HYPE (deposit + borrowed) is locked in
SubConsol - Position is automatically enrolled in the
ConversionQueue
Order Fulfillment Window
- Orders are queued on-chain with a 5-minute expiration
- Fulfillment takes approximately 60 seconds
- If not filled before expiration, all funds are refunded
- Users cannot cancel during the fill window
2. Active Period
Once created, the mortgage enters its active period:
- Term: Up to 36 monthly periods (30 days each)
- Interest: Simple interest —
totalDebt = principal * (1 + APR * years) - Payment schedule: Monthly payments of
totalDebt / 36in USDX (if payment plan is enabled)
Making Payments
Payments are processed through the LoanManager:
- User pays in any supported stablecoin via the Router
- Router wraps to USDX and forwards the payment
LoanManagerrecords the payment against the mortgage- Payment flows to lenders through the Consol system
Late Payments
- Grace period: 3 days after the due date
- Penalty: A percentage of the monthly payment amount accrues as a penalty
- Penalty payment: Must be paid in addition to the regular monthly payment
3. Resolution
A mortgage can resolve in one of three ways:
Redemption (Full Payoff)
All payments made ──► Mortgage marked "Redeemable"
│
▼
User calls redeem()
│
▼
SubConsol releases HYPE
Mortgage NFT burned
User receives collateral
- All 36 monthly payments are completed (or bullet payment at maturity)
- Mortgage status changes to Redeemable
- User calls
redeem()on the/managepage - SubConsol releases all locked HYPE back to the user
- The Mortgage NFT is burned
Conversion (Auto-conversion)
HYPE price hits trigger ──► ConversionQueue processes position
│
▼
Debt portion of collateral
sent to lenders/protocol
│
▼
Remaining collateral
returned to borrower
│
▼
Mortgage resolved
- HYPE price reaches the Conversion Trigger Price
- The
ConversionQueueautomatically processes the position - A portion of collateral sufficient to cover remaining debt is taken
- The remaining collateral is returned to the borrower
- Any outstanding payment obligations are adjusted
Foreclosure (Default)
Missed 2+ payments ──► Position eligible for foreclosure
│
▼
Keeper/protocol calls foreclose()
│
▼
All collateral seized
Sent to ForfeitedAssetsPool
Mortgage NFT marked "Foreclosed"
- Borrower misses more than 2 payments
- Position becomes eligible for foreclosure
- A keeper or the protocol calls the foreclosure function
- All locked HYPE is seized from SubConsol
- Collateral is sent to the
ForfeitedAssetsPool - The Mortgage NFT is marked as foreclosed (not burned — it remains as a record)
Mortgage States
| State | Description |
|---|---|
| Pending | Order submitted, awaiting fulfillment |
| Active | Mortgage is live, payments being made |
| At Risk | Payments missed, approaching foreclosure threshold |
| Redeemable | Fully paid off, ready for collateral redemption |
| Redeemed | Collateral returned, NFT burned |
| Foreclosed | Collateral seized due to payment default |