Skip to content

Research notes

Morpho Borrow Rate vs Supply Rate

Reconcile Morpho Blue borrower interest and supplier claims, then check why utilization, fee shares and APY timestamps can produce different percentages.

Ivory ceramic channel pours lime liquid into a broad basin beside a small cup holding one droplet.
Illustration for research notes; examples in this article are educational.

In Morpho Blue, the borrow rate prices outstanding debt, while the supply rate spreads borrower interest across all supplied loan assets after the market fee. Utilization and the fee scale the per-second rate before APY compounding. A valid comparison also needs the same market, timestamp and rate convention: an interval-average rate and an end-of-interval rate can differ.

This article covers Morpho's variable-rate Blue markets. Vault V1/V2 allocations and fees, the older Optimizer, and fixed-rate Midnight markets require separate accounting. The worked example follows Blue reference commit 8e26ca6a8dbc5089edcd67fb576248810fd2870a; it does not identify the code or settings of a particular deployed market.

How Morpho borrow and supply rates differ

A borrower pays interest on borrowed loan assets. That interest supports claims held by everyone supplying the loan asset, including the portion of supply currently unborrowed. A market fee, when configured, also allocates part of that interest to the protocol's fee recipient.

Start with these distinct inputs:

InputMeaningUnit or boundary
Borrow rateRate returned by the market's IRMPer second, scaled by 10^18
UtilizationTotal borrow assets divided by total supply assetsLoan-asset accounting amounts
Market feePortion of borrower interest allocated as feesFraction scaled by 10^18
Supply rateBorrow rate multiplied by utilization and one minus feePer second before annualization
APYEffective annual percentage under a stated conventionA transformed rate snapshot

Morpho's IRM contract reference specifies this supply-rate relationship. The denominator is total supplied loan assets. Collateral value does not belong in it. At full utilization and zero fee, the native rates coincide under the same convention. With no borrowing, the formula gives zero supply interest. The broader utilization and borrow-APR guide explains why dividing debt by idle cash answers a different question.

Identify the market before collecting those inputs. Blue's market parameters include the loan token, collateral token, oracle, IRM and liquidation LTV. Two markets can share a token pair while using different dependencies. The market-ID comparison shows how to preserve that identity. Blue is IRM agnostic, so an explanation of AdaptiveCurveIRM should not become a rule for every possible approved model.

Apply utilization before compounding into APY

The following annualization is hypothetical. Let the annualized per-second borrow rate be approximately 12%, utilization be 80%, and the market fee be 10%. These are invented inputs, not a current yield or fee quote.

Use a 365-day year containing 31,536,000 seconds. For an unscaled per-second rate r, the displayed continuous-compounding convention is borrow APY equal to exp(r × yearSeconds) minus one. The corresponding supply calculation first forms r × utilization × (1 − fee), then applies the exponential.

Here the multiplier is 0.80 × 0.90 = 0.72. The annualized supply rate before compounding is therefore approximately 8.64%.

CalculationIllustrative result
Annualized borrow rate before compounding12.000000%
Borrow APY12.749685%
Annualized supply rate before compounding8.640000%
Supply APY9.024234%
Incorrect shortcut: borrow APY × 0.729.179773%

The shortcut overstates supply APY by about 0.15554 percentage points. It distributes an already compounded borrower percentage as though compounding were linear. Applying the multiplier to the rate first gives the documented convention. The official APY explanation makes that distinction explicit.

The 10% fee also does not explain the entire difference between the two APYs. Idle supplied capital accounts for part of the spread. Nor does a 10% fee mean that suppliers lose 10% of principal each year. It describes a share of accrued borrower interest in this scenario.

These APYs standardize a snapshot. Extending them across a year assumes that the selected rate, utilization and fee convention stay fixed. Blue's actual asset totals are updated through discrete accrual operations with integer arithmetic, so the exponential display formula is insufficient for reproducing an individual transaction.

Reconcile one day of Blue interest accrual

Consider a fictional six-decimal loan token U. At time t0, the market has 1,000,000 U supplied and 800,000 U borrowed. Its opening supply shares are 10^18 and borrow shares are 8 × 10^17, consistent with supplying and borrowing from initially empty accounting states. Assume adequate collateral and no other restrictions.

An accrual occurs at t0 plus 86,400 seconds. Stipulate that its IRM returns 3,805,175,038 as the WAD-scaled average rate per second for this interval, where WAD equals 10^18. Dividing by 10^18 and multiplying by the year gives approximately 12%. This input isolates Blue's downstream calculation; it is not a reconstruction of a live AdaptiveCurveIRM state.

Hold the fee at 10%. Exclude deposits, withdrawals, repayments, additional borrowing, liquidations, bad debt, rewards and price changes during the day.

Blue's pinned MathLib approximates exp(r × elapsed) minus one with three nonzero Taylor terms. The second term floors the first term squared divided by 2 × WAD. The third floors the second times the first divided by 3 × WAD. For these inputs, the WAD-scaled terms are:

TermExact integer
Rate integer × elapsed seconds328,767,123,283,200
Second term, rounded down54,043,910,675
Third term, rounded down5,922,620
Sum used as the interest factor328,821,173,116,495

Multiply 800,000,000,000 raw borrow units by that factor, divide by 10^18, and round down. Interest is 263,056,938 raw units, or 263.056938 U. Applying 10% and rounding down gives a fee amount of 26.305693 U.

The pinned Blue accrual function adds the same full interest amount to borrow assets and supply assets. It allocates the fee by creating supply shares for the fee recipient.

Market accountingAt t0After one-day accrual
Total supply assets, U1,000,000.0000001,000,263.056938
Total borrow assets, U800,000.000000800,263.056938
Supply assets minus borrow assets, U200,000.000000200,000.000000
Utilization80.000000%80.005260%

Interest increased the accounting claims without creating additional idle loan tokens. It also slightly increased utilization because the same increment is proportionally larger relative to borrowing. The withdrawal-liquidity comparison develops the separate exit test; a growing supply claim alone cannot establish how much can be withdrawn.

Follow the fee shares into a supplier's claim

The fee recipient receives 26,299,466,568,547 new supply shares in this example. To reproduce that integer, multiply the raw fee amount by the opening supply shares plus 1,000,000. Divide by post-accrual supply assets minus the raw fee amount plus one, then round down.

Those additions come from the pinned SharesMathLib: 1 virtual asset and 1,000,000 virtual shares. They operate on raw integers. One virtual asset here means one base unit of U, or 0.000001 U.

Suppose supplier A owns 10% of the opening supply shares, or 10^17 shares, and borrower Q owns 10% of the opening borrow shares. A is not the fee recipient. Neither position changes its shares during accrual. A's asset claim uses total supply assets plus one divided by total supply shares plus 1,000,000, multiplied by A's shares and rounded down. Q's debt conversion uses the corresponding borrow totals and rounds up, matching the balance helper's conversions.

PositionOpening amount, UAmount after accrual, UChange, U
Supplier A100,000.000000100,023.67512423.675124
Borrower Q80,000.00000080,026.30569426.305694

A's shares now represent a smaller fraction of total supply shares because of the fee issuance. The fee is already reflected in A's converted claim; subtracting it again would double-count it. Q's debt still reflects gross borrower interest.

Converting all opening supplier shares together produces 1,000,236.751244 U. The new fee shares convert to 26.305692 U. Their sum is two base units below total supply assets in this fixture because of virtual-share accounting and downward conversions. This is a checked outcome for these inputs, not a universal rounding bound.

The Aave scaled-balance ledger illustrates another implementation's distinction between stored units and converted balances. Its indexes and rounding rules cannot replace Blue's share conversions.

Match the rate's clock to the balance's clock

Blue's stored market totals extend only through lastUpdate. Reading the market later does not itself write new interest. Accrual measures elapsed seconds; a second accrual at the same timestamp returns without adding interest. If a fee is changed, the pinned implementation first accrues the preceding interval under the old fee.

For AdaptiveCurveIRM, current Morpho documentation distinguishes the interval-average rate returned by borrowRateView from the rate at the observation timestamp. The model projects its target rate forward between interactions; a view call calculates that movement without persisting it.

The current documented SDK convention uses the end-of-interval rate for ordinary borrow/supply APY methods and the interval average for its average methods. GraphQL market APYs use the interval average, while its totals are accrued to the state timestamp. Consequently, inserting those accrued totals into a calculation intended for the stored starting state can create a mismatch. Preserve the method and its inputs alongside the percentage, following the official APY convention table.

Validate a comparison before using it

Capture one reproducible observation:

RecordValidation
Chain, Blue contract and market IDResolve all five market parameters
Block number and timestampUse the same observation for every state read
Stored totals and lastUpdateSeparate stored state from an accrued projection
IRM and rate conventionIdentify interval average, endpoint or a historical average
Fee and annualizationKeep WAD scaling and the year length explicit
Position shares and conversionsApply virtual constants and correct rounding
Rewards and wrapper feesReconcile separately from native market interest

First reproduce the native market rates. Then reconstruct the interval's interest and position claims, including confirmed cash flows. The LTV and liquidation-threshold guide explains why growing debt also belongs in a collateral-risk calculation, even when prices stand still.

For a discrepancy, check market identity, units, timestamps and averaging convention before accepting a tolerance. For the next interval, update the rate and balances again. A useful comparison retains enough evidence to explain both the quoted percentage and the actual change in debt or supply claim.

Keep the context with the example.

Each worked example is illustrative, with its sources and assumptions in the article. Read our editorial standards for authorship, verification and corrections.