Compound III vs. Morpho Blue: five lending yield myths debunked
Analyze how compounding mechanics and Morpho fee structures impact actual returns. Using Q3 2026 data, this comparison examines how continuous and settlement fees interact with principal growth to determine true lending yield.
Compounding mechanics and growth
The mathematical reality of compound interest destroys the myth that principal stays stagnant during a lending term. Compound interest adds earned interest back onto the principal sum, causing future interest to calculate on both the original principal and the previously earned interest. This compounding effect causes investments to grow faster over time, much like a snowball gaining size as it rolls downhill. Simple interest calculates only on the principal, but compound interest calculates on both the initial investment and the already-accumulated interest. If you invest $10,000 at a 5% annual rate for 20 years, you reach $26,532.98. This results in a total interest of $16,532.98 and a 165% return on investment. You know how basic interest works, but these protocols change the math. Higher compounding frequencies increase the potential for growth, even if the difference appears minimal at lower interest rates. Regular, consistent deposits also amplify the compounding effect. For instance, adding $100 every month to that same $10,000 investment at 5% over 20 years brings the balance to $67,121. This total includes $33,121 in interest on $34,000 in total deposits. The future value (A) depends on the principal amount (P), the annual interest rate (r), the number of times interest compounds per year (n), and the number of years (t).
Morpho fee structures and automation
Morpho’s architecture integrates fees directly into the market state, which contradicts the idea that fees operate independently of yield. The MarketState tracks the continuousFee as a uint32 and the settlementFeeCbp as a uint16. The take function manages the complex transition of assets and interest. When a taker executes an offer, the contract calculates the buyerPendingFeeIncrease by multiplying the units by the product of the market continuous fee and the time to maturity before dividing the result by the WAD constant. The timeToMaturity calculation uses UtilsLib.zeroFloorSub(offer.market.maturity, block.timestamp). This value then influences the _settlementFee. The contract also updates the buyerPos.debt, buyerPos.pendingFee, and buyerPos.credit accordingly. It also handles sellerPos.pendingFee, sellerPos.credit, and sellerPos.debt to maintain accuracy. The consumed mapping tracks assets for the offer.maker and offer.group to ensure they do not exceed offer.maxAssets or offer.maxUnits. The take function derives buyerPrice and sellerPrice from the offerPrice by adding or subtracting the _settlementFee. This ensures that the buyerAssets and sellerAssets are correctly distributed to the payer and the receiver.
| Feature | Value/Detail |
|---|---|
| Compound 20y ROI (5%) | 165% |
| Compound 20y Total ($100/mo) | $67,121 |
| Morpho Continuous Fee | uint32 |
| Morpho Settlement Fee | uint16 |
| Morpho Max Continuous Fee | MAX_CONTINUOUS_FEE |
Yield optimization realities
The interaction between continuousFee and settlementFee determines the actual yield for any position. The settlementFee calculation relies on the timeToMaturity to determine the correct newSettlementFee. The continuousFee remains capped by a MAX_CONTINUOUS_FEE, which limits certain yield optimizations. The protocol manages buyerAssets and sellerAssets during the take function using SafeTransferLib. The MarketState also tracks consumed assets per maker and group to prevent exceeding maxAssets or maxUnits. Does the interaction between continuousFee and settlementFee create enough friction to offset the compounding benefits of regular deposits? The contract updates the Position for both the buyer and the seller during every transaction. The buyerPos.credit and sellerPos.debt change as the system processes the units. The withdraw function reduces the _position.credit by the units and also reduces the _marketState.withdrawable and _marketState.totalUnits. The repay function increases the marketState[id].withdrawable by the units and reduces the position[id][onBehalf].debt by the same amount. The claimContinuousFee function allows the feeClaimer to withdraw the amount from the continuousFeeCredit and totalUnits of the MarketState after calling touchMarket. The claimSettlementFee function moves the amount to the receiver via SafeTransferLib for all authorized feeClaimer accounts. The contract uses isAuthorized mappings to restrict access to the configurator, feeSetter, and feeClaimer functions.
Join the discussion