# min_rate_at_target is given as apr but morpho blue uses it as apy

Metamorpho's MIN_RATE_AT_TARGET constant is set as a non-compounding APR, but Morpho Blue compounds interest, so the intended 0.1% lower bound is unreachable.

- Payout: Contest reward
- Severity: medium
- Program: Morpho Metamorpho
- Credited: Christoph Michel
- Disclosed: 2024-02-23
- Write-up quality: 6/10
- Original: https://cdn.cantina.xyz/reports/cantina_competition_morpho_metamorpho_dec2023.pdf#3.1.8
- Library page: https://bugbountylibrary.com/r/cantina%3Amorpho_metamorpho_dec2023%3A3.1.8
- Tags: domain:web3 kind:contest platform:cantina sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic vuln:precision-loss

**Target:** Solidity constants library (ConstantsLib.sol) feeding Morpho Blue rate bounds
**Root cause:** MIN_RATE_AT_TARGET is specified as a 0.1% APR (non-compounding), but Morpho Blue compounds interest via e^(nx)-1, so the constant must be set as an APY; 0.001 ether/365 days yields ~0.10005% APY instead of the intended 0.1% bound.
**Steps:**
1. Read ConstantsLib.sol#L12: MIN_RATE_AT_TARGET = 0.001 ether / 365 days
2. Note Morpho Blue compounds interest (Morpho.sol#L477) using e^(nx)-1
3. Solve e^(nx)-1 = 0.001 for nx => 0.0009995
4. Compare: current constant gives APY e^0.001-1 = 0.0010005 (0.10005%), so the 0.1% lower bound is never reached
**How found:** Code reading of the rate constant against Morpho Blue's compounding interest formula; recognized APR vs APY unit mismatch and solved the continuous-compounding equation to quantify the deviation.
**Insight:** When a protocol delegates rate math to a compounding lender like Morpho Blue, constants expressed as APR must be converted to APY (e^(nx)-1); check every rate bound for this unit mismatch.
