Offers, ticks, ratifiers, callbacks, settlement paths, and liquidations. What actually happens when you lend or borrow onchain at a fixed rate.
In the previous article, we looked at Morpho Midnight and how it differs from a typical isolated market system. In this article, we'll take a deeper look at how Morpho Midnight works. This article will offer a simple perspective on the technical side of this new protocol. Midnight is not only a lending protocol, but more like a settlement layer for signed intents. If you are going to trade it Midnight, you need to learn the mechanics. They decide how you quote, how your capital sits, and where you earn and where you lose.
Everything below comes from the protocol documentation and whitepaper. We will focus on one question, to follow a single trade from the moment a price is signed to the moment units settle, and see what each part actually does.
A position in a market is a count of units. One debt unit is an obligation to repay one loan token before maturity. One credit unit is a claim on those repaid tokens. Buying units grows your credit, selling grows your debt, and a debt unit can be discharged directly by repaying one loan token. The whole payoff is the discount at which the unit trades, so the implied simple rate over the remaining term is just the inverse of price:
r = 1 / P − 1 (for a traded price P > 0)
Settlement produces fungible credit and debt, not a relationship between the two counterparties. Because markets mature on a fixed calendar date rather than a rolling tenor from origination, positions opened at different times in the same market are fungible. That fungibility is what makes a secondary market and early exits possible at all.
Second, that rate is calculated over the remaining term, not annualized. The same price has different APR depending on how far maturity sits. Take a unit bought at 0.95, a 5.26% return to maturity:
// buy a unit at 0.95, a 5.26% return over the term
maturity in 1 month -> 5.26% / (1/12) = 63.16% APR
maturity in 6 months -> 5.26% / 0.5 = 10.53% APR
maturity in 1 year -> 5.26% / 1 = 5.26% APR
The protocol keeps no order queue, but routers compare offers by price. With no minimum increment, makers would undercut each other by economically meaningless amounts and nobody would post real size. So Midnight enforces a discrete tick grid, and the clever part is how the grid is spaced.
A fixed price increment maps to different rate increments depending on time to maturity, and participants reason in rate. So the grid is defined so that consecutive ticks are a constant relative change in implied return. The unquantized price of tick n, given a target relative increment δ and tick range N, is:
P(n) = 1 / ( 1 + (1 + δ)^(N/2 − n) )
which makes the return of one tick a fixed multiple of the next:
( 1/P(n−1) − 1 ) = (1 + δ) · ( 1/P(n) − 1 )
Each market starts at δ = 0.02, a 2% relative change in implied return per tick, and a tickSpacingSetter role can tighten it to 0.01 or 0.005 as depth grows. The grid is built so tightening is a superset: every previously valid tick stays valid, so outstanding offers remain executable.
WHY THIS MATTERS TO US
Tick granularity is quote resolution. On short tenors it is the difference between pricing a market tightly and being forced into a coarse rate that leaves basis points on the table. The desk that computes ticks correctly and quotes at the right level captures flow the sloppy quoter misses.
Makers sign offers offchain. An offer defines the market, the direction (buy units or sell units), the price, the maximum size, an activation and expiry window, a ratifier, an optional callback, and an optional shared group budget. The offer commits no capital and holds no queue position. It is a promise to trade, waiting for someone to take it.
Two role distinctions matter and they are independent of each other. Maker versus taker is about execution: the maker signs, the taker submits the transaction that settles it. Buyer versus seller is about direction: the buyer receives units and ends with credit (lending), the seller gives up units and ends with debt (borrowing). A maker can post either side. So a borrower can either publish a sell offer and wait, or take someone's buy offer. The economics are identical, the difference is who signs and who submits changes.
Very important piece is that takes can be partial. A single offer can be filled by many takers, each taking a slice, until it's exhausted. This is why an offer is better thought of as available liquidity at a price than as a discrete order.
There is no separate close function. To exit, you trade the other way, and the protocol offsets your existing position before building the opposite one. A buyer closes any debt before accumulating credit, a seller closes any credit before accumulating debt. From one settlement, there are four possible four cases:
After maturity, debt can no longer be increased, so the two paths where a seller would take on new debt are blocked. The other two stay open. It lets people keep unwinding positions after the date even when liquidation isn't worth a liquidator's gas.
When a taker submits an offer, the Midnight contract calls that offer's ratifier, a contract holding the validation logic, to decide whether the offer is usable. The common case is a signature check, does this offer carry a valid signature from the maker's key?
The point of making the ratifier a separate contract is flexibility. Different ratifiers can use different schemes. A passkey signature. A post-quantum scheme. Or custom logic that ratifies an entire basket of offers under one signature, which is the mechanism behind multi-market quoting. The offer format stays fixed. The thing that says "yes, this is valid" is swappable.
This is the piece that matters most to a working book, and it's easy to skip it. An offer can carry a callback that runs at settlement. It lets a maker source the assets to back an offer only at the moment the offer is taken, instead of parking capital in advance.
Read that again with a fund's balance sheet in mind. You can keep capital earning in a Morpho Blue variable-rate market while you quote a fixed-rate offer on Midnight. If nobody takes the offer, your money never stopped working. If someone does, the callback withdraws from Blue and completes the fixed-rate settlement in the same transaction.
It works on the borrow side too. A borrower near maturity can buy back debt in one market and open a position in a later-maturity market atomically, rolling exposure forward in a single transaction instead of unwinding and redeploying by hand.
WHY THIS MATTERS TO US
Callbacks are what make the fixed-versus-floating basis trade practical. Capital sits on Blue at the float, quotes the fixed leg on Midnight, and only moves when it's filled.
Midnight does not keep one onchain list of offers. Offers travel through whatever channel a maker chooses - a shared mempool, an RFQ flow, a direct quote to one counterparty, or something entirely offchain. Different participants see different subsets. There is no single place to look.
So a taker has a genuine search problem, and solving it is a job the protocol pushes outside itself. Four things that pooled protocols bundle together are here kept separate:
Anyone can run a router. Morpho runs one so integrators don't have to build discovery from scratch, and its quote endpoint returns a bundle of takeable offers with the excess needed to absorb offers that get consumed before your transaction lands. The competitive layer that finds best execution is open, which is closer to how a solver market works than how a lending pool works.
Isolated markets fragment liquidity across collateral sets and maturities, but a lender is usually willing to lend across many of them. Callbacks let one pool of liquidity back several offers at once. To keep exposure bounded, offers are assigned to a consumption group that shares a fill budget. Executing any offer in the group decrements the remaining budget for all of them; once it's exhausted, no further offer fills. Exposure is capped by the budget, not by the sum of the signed offer sizes.
The whitepaper's example is the clean mental model: one lender, 10 ETH of budget, three identical offers across markets A, B, and C. A 3 ETH borrow drops the shared budget to 7 for all three. A further 7 ETH borrow takes it to 0, and every offer in the group is now dead, whatever their individual sizes said. To make this cheap at scale, a ratifier can ratify a Merkle root over the whole offer set, so a maker quotes across many markets with one signature and each fill later presents its proof.

A borrower's capacity, maxDebt, is the sum of each posted collateral's value times its own loan-to-value limit. The position is healthy while debt stays at or below maxDebt. Borrowers can add, remove, or swap between the market's accepted collaterals at any time, as long as they don't cross that line. The lender-side consequence, worth repeating: you're exposed to the market's whole accepted collateral set, not just what borrowers happen to hold today.
Liquidation has more structure than the pooled version:
The settlement fee is charged at take time and works as a spread. The maker settles at exactly their quoted price. The taker settles a fee away on the other side, so a lender-taker earns slightly less and a borrower-taker pays slightly more. The protocol keeps the spread. It scales with time to maturity so the annualized cost stays bounded, which means it's nearly free on long tenors and most noticeable on short ones. The maker always makes. The taker always pays.
The continuous fee falls on lenders only, accrues every second on outstanding credit, and is capped at 1% annualized. Two details matter. It's fixed at the rate in force when you open the credit, so later changes to the market rate never touch your existing position. And it doesn't move tokens as it accrues, it sits as a pending amount that nets out of what you receive when you sell or redeem. Your realizable claim is your credit, adjusted for any bad-debt loss, minus that pending fee. From the lender's perspective nothing visibly changes over time. The face value you were always going to receive is what you receive.
Strip it down and Midnight is a small number of moving parts. Signed offers that commit nothing until taken. A fixed price grid that turns into a rate. A settlement step that nets you against your own position first. Callbacks that keep capital working until the instant it's needed. Per-collateral liquidation with immediate loss socialization. One trusted oracle as the only moving variable. It's less a lending pool than a settlement layer for credit, and that's the part worth understanding before you quote a single tick.
Research and commentary from Altitude Digital Assets on the Morpho Midnight protocol. Not investment advice. Mechanics and figures are drawn from Morpho's documentation and whitepaper; illustrative numbers are not guaranteed returns. Sources: docs.morpho.org/learn/concepts/midnight and the Midnight whitepaper.