┌──────────────────────────────────────────────────────────┐
│ MakxYieldVault (ERC-20) │
│ │
│ DEPOSITORS: │
│ ├── deposit() → METH shares │
│ ├── requestWithdrawal(shares) → start cooldown │
│ ├── cancelWithdrawal() │
│ └── redeem() → ETH (after cooldown) │
│ │
│ LENDING (only YieldPad): │
│ ├── borrow(amount) → send ETH to YieldPad │
│ └── repay() → receive ETH back from YieldPad │
│ │
│ ASSETS: │
│ ├── idle ETH balance │
│ └── totalBondedETH (accounting, lent to YieldPad) │
└──────────────────────────┬───────────────────────────────┘
│ borrow / repay / collectInterest
┌──────────────────────────▼───────────────────────────────┐
│ MakxYieldPad │
│ │
│ FACTORY: │
│ └── createToken(name, symbol, duration, devBuyETH, │
│ hookFeeBps) → mint → full LP → devBuy │
│ │
│ RENTAL: │
│ ├── depositRent(launchId) │
│ ├── repayBond(launchId) │
│ ├── liquidate(launchId) │
│ ├── claimFees(launchId) — hook fees to creator │
│ ├── collectLPFees(launchId) — LP fees to creator │
│ └── setHookFee(launchId, bps) │
│ │
│ INTEREST: │
│ ├── _accrueInterest() — internal, per-second accrual │
│ └── collectInterest() — push interest to vault │
│ │
│ STATE (per launch): │
│ ├── token, creator, bondAmount, lpTokenId │
│ ├── feePerSecond, prepaidUntil, hookFeeBps │
│ ├── launchFeeBalance, status (Active/Liquidated/Repaid) │
│ └── poolId, launchBlock, launchTimestamp │
└──────────────────────────┬───────────────────────────────┘
│ getPoolConfig / recordHookFee
┌──────────────────────────▼───────────────────────────────┐
│ MakxYieldPadHook (V4 Hook) │
│ │
│ ├── beforeSwap — hook fee on ETH→token (input side) │
│ └── afterSwap — hook fee on token→ETH (output side) │
│ │
│ NO funds. NO rental state. Swap-level fee logic only. │
│ Required address suffix: 0xCC │
└──────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ Uniswap V4 │ │ Token Contracts │
│ Pool Manager │ │ (MakxToken- │
│ + Position │ │ Cloneable, │
│ Manager │ │ 1B supply, │
└─────────────────┘ │ No Mint) │
└──────────────────┘