morpho
Installation
SKILL.md
Morpho Blue
Morpho Blue is a permissionless, immutable lending primitive on Ethereum. Unlike Aave or Compound, Morpho Blue has no governance, no upgradeability, and no admin keys. Anyone can create an isolated lending market by specifying a loan token, collateral token, oracle, interest rate model, and liquidation LTV. A single singleton contract holds all markets. MetaMorpho vaults sit on top, providing curated, multi-market lending strategies with ERC-4626 interfaces.
What You Probably Got Wrong
LLMs confuse Morpho Optimizer (V1) with Morpho Blue. They also hallucinate Aave-style pooled risk. These corrections are non-negotiable.
- This is NOT Morpho Optimizer (V1) -- Morpho Optimizer was a peer-to-peer matching layer on top of Aave/Compound. Morpho Blue is a standalone, independent lending protocol with its own singleton contract. Different addresses, different interfaces, different architecture. If you see
MorphoAaveV2orMorphoCompound, you are writing V1 code. Stop. - Market ID =
keccak256(abi.encode(loanToken, collateralToken, oracle, irm, lltv))-- The market is identified by a bytes32 hash of its five parameters. Not a numeric index. Not an address. If you are passing a uint256 market index, you are wrong. - One singleton contract for ALL markets -- Every market lives inside the same
Morphocontract at0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb. There are no per-market contracts to deploy or interact with. - LLTV is NOT the same as LTV -- LLTV (Liquidation Loan-To-Value) is the threshold at which a position becomes liquidatable. It is NOT the maximum amount you can borrow. You can borrow up to LLTV, but doing so means instant liquidation risk. Always borrow well below LLTV.
- MetaMorpho vaults are a separate layer -- Morpho Blue markets are the primitive. MetaMorpho vaults are ERC-4626 wrappers that allocate deposits across multiple Morpho Blue markets. Supplying to a vault is NOT the same as supplying directly to a market. Different contracts, different interfaces.
- Shares, not balances -- Morpho Blue tracks positions using shares internally (like ERC-4626).
supply()andborrow()accept either anassetsamount OR asharesamount, but not both simultaneously. One must be zero. The conversion between shares and assets changes as interest accrues. - Oracle price uses 36-decimal scaling -- Morpho Blue oracles return price with
36 + loanTokenDecimals - collateralTokenDecimalsdecimals of precision. This is NOT 18 decimals. Getting this wrong causes catastrophic mispricing. A WETH/USDC oracle returns price with36 + 6 - 18 = 24decimals. - Markets are immutable once created -- After
createMarket(), the parameters (oracle, IRM, LLTV) can never be changed. There is no governance. If the oracle breaks, the market is permanently affected. liquidate()usesseizedAssetsORrepaidShares, not both -- Pass one and set the other to zero. The contract calculates the counterpart. Passing both nonzero reverts.- Authorization is per-address, not per-market --
setAuthorization(address, bool)grants or revokes permission for an address to act on behalf of msg.sender across ALL markets, not a specific one.