Flying Tulip Lend: a margin account, a stablecoin and a put
Flying Tulip runs lending as one cross-margin account per user, charges maintenance margin on debt as well as collateral, liquidates at a health factor of 1.25 and pays suppliers a second yield in FT out of idle cash it puts to work. We read the deployed contracts on Ethereum, Sonic and BNB Chain, walk through how ftUSD is minted, staked and rate-limited, and compare the design with Aave V4 and Morpho.
Flying Tulip is Andre Cronje's protocol after Sonic. It raised money in a public sale that let buyers hand their FT back for the full amount they paid, and it plans a whole exchange on top: spot AMM, order book, futures, lending, insurance and a stablecoin. Two of those are live as lending infrastructure today, FT Lend and the ftUSD stablecoin, plus a leveraged-spot product called Trade that runs on the lending engine.
The book is small. On 22 October 2026 Flying Tulip's own API reports $18.40M supplied and $4.72M borrowed on Ethereum, $4.84M and $2.41M on Sonic, and $46k and $10k on BNB Chain: about $23.3M supplied and $7.1M borrowed in total. In August it was $14.0M and $1.5M, so the borrow side has grown close to fivefold in ten weeks.
What makes it worth reading is the design. Most lending protocols are a variation on Aave or on Morpho. FT Lend borrows its risk model from a centralised exchange's margin account, routes suppliers' idle cash into yield strategies and pays them a second yield for it, and opens leverage through signed orders filled by anyone. We integrated it at 1delta, so the numbers here come from the deployed contracts rather than the docs, and in a few places the two disagree.
The account is the market
Aave V3 keeps one pool per asset and a list of collateral factors. Morpho Blue keeps one market per collateral and loan pair. FT Lend keeps one account per user per chain that holds every deposit and every debt together, and it prices risk with a maintenance margin per asset, the way a futures exchange does.
The formula, read from the PositionsManager and its lens:
equity = max(collateralUSD − debtUSD + enginePnL, 0)
maint = Σ (valueUSD × mmBps) over every collateral AND every debt asset
HF = equity / maint
Two thresholds sit on the ConfigRegistry, the same on every chain:
| gate | value | meaning |
|---|---|---|
marginHfSafeBps | 15000 | a borrow or withdrawal must leave HF ≥ 1.50 |
marginHfTargetBps | 12500 | liquidation opens below HF 1.25 |
A health factor of 1.25 is the liquidation line here. Any tool that treats HF < 1 as the trigger will report a FT Lend position as safe for its last stretch before liquidation.
The maintenance rates on Ethereum today are 150 bps for USDC, USDT and ftUSD, 1700 for WETH, 2100 for wstETH and 2200 for WBTC. Because the margin is charged on the debt leg too, the loan-to-value you get depends on the pair. Solving the formula for the largest debt that keeps HF at the gate gives:
maxLTV(collateral i, debt j) = (1 − 1.50·mm_i) / (1 + 1.50·mm_j)
liqLTV(collateral i, debt j) = (1 − 1.25·mm_i) / (1 + 1.25·mm_j)
| collateral → debt | max LTV | liquidation LTV |
|---|---|---|
| USDC → USDT | 95.6% | 96.3% |
| WETH → USDC | 72.9% | 77.3% |
| WBTC → USDC | 65.5% | 71.2% |
| USDC → WETH | 77.9% | 80.9% |
| WETH → WBTC | 56.0% | 61.2% |
The 95.6% stable-against-stable figure is the highest we serve on any lender. It is also the reason ftUSD loops exist: ftUSD carries the same 150 bps margin as USDC.
The cross-margin model has a third input that is zero today. enginePnL is unrealised profit and loss from registered "engines", and when Flying Tulip's futures product ships, a user's perp PnL will feed the same equity that backs their loans. A health factor computed from collateral and debt alone will then be wrong, so integrators should read the protocol's own accountValues rather than rebuild it.
The docs describe something else. They promise an adaptive LTV that falls from 80% to 50% as volatility rises, computed from Flying Tulip's own spot liquidity, with soft, time-sliced liquidations and an LTV frozen at the moment you open. None of that is on-chain. Flying Tulip's roadmap lists it as a later milestone called Dynamic Lend. What runs today is the static margin table above.
Idle cash earns, and suppliers get paid twice
In an Aave or Morpho pool, cash nobody has borrowed earns nothing. Supply yield is borrow interest divided across suppliers, minus a reserve factor.
FT Lend does two things differently. First, there is no reserve factor: the in-kind supply rate is exactly borrowAPR × utilization. We checked this against Flying Tulip's own front end on six Sonic assets and it matched to four decimals (USDC at 94.26% utilization and 10.76% borrow paid 10.14%).
Second, the PositionsManager itself holds no tokens. Every deposit sits in a per-asset ftYieldWrapper that places the idle cash in external strategies. The strategy yield goes to Flying Tulip's treasury and comes back to suppliers as FT, settled in epochs of about eight hours and weighted by how much each supplier held and for how long. The epochs are on-chain (PositionsManager.epochs(asset, id) records the FT paid out and the supply-time it was paid against), so the rate can be measured rather than taken from a page.
The effect shows in the quotes. On Ethereum, Flying Tulip's API prices USDC at 3.70% to supply and 2.95% to borrow, USDT at 3.65% and 2.88%. A pool lender cannot pay suppliers more than its borrowers pay. This one can, because most of the supply rate is the FT stream. Measured over the last seven days of settled epochs and with FT at its market price, the stream alone came to 3.59% on Ethereum USDC and 10.22% on Sonic USDC.
That second leg is paid in a volatile token at the treasury's pace. FT trades at about $0.138; the protocol's own oracle carries it at $0.0936. Valued at the oracle price the same emission is a third smaller. The protocol's oracle does not price FT for lending at all: FT is listed with collateral: false and a margin of zero, so it never counts toward equity.
ftUSD
ftUSD is Flying Tulip's dollar. A user buys it 1:1 with USDC or USDT (on Ethereum also USDe, USDG and crvUSD) through the MintAndRedeem contract and sells it back the same way, paying 0.07% each way. The stablecoins go into the ftUSD yield wrapper, which the docs describe as stablecoin lending on Aave and Spark plus delta-neutral carry: for example supplying USDC to Aave, borrowing ETH, staking it as stETH and looping, inside position caps and rebalancing bands. CDP-style minting, a peg keeper and perp-funding carry are on the roadmap.
Plain ftUSD earns nothing. Yield goes to stakers, through two receipts:
| receipt | paid in | how |
|---|---|---|
| sftUSD | FT | rewards claimed separately, no compounding |
| ssftUSD | ftUSD | ERC-4626 vault, rewards vest into the share price |
The path from strategy to staker runs through the treasury. Net strategy yield and protocol fees land there and are passed on "via buyback-and-distribute at treasury discretion". The staking rate is a payout Flying Tulip chooses each period, backed by what the strategies earn, and there is no formula on-chain that ties the two together.
On Ethereum on 22 October:
| value | |
|---|---|
| ftUSD supply | 4.80M |
| staked as sftUSD | 2.41M, 6.31% APY |
| ssftUSD vault | 612k ftUSD, 7.43% APY |
| ssftUSD share price | 1.006811 ftUSD |
Sonic has 720k ftUSD with 553k staked at 9.66%, and BNB Chain $1.4k.
ssftUSD is the cleaner of the two. It is a standard ERC-4626 (StableEpochRewardsVault, verified on Sourcify) with 18-decimal shares over 6-decimal ftUSD. Flying Tulip funds a tranche of ftUSD every 8–16 hours and each tranche vests into the share price over 8 hours, so the price only goes up between tranches and never jumps. Its realized rate off archival convertToAssets was about 7.4% over the 20 days to 21 October, close to the 7.61% the API quoted then. Most of the vault's size arrived on 20 October, when a Morpho Blue market listing ssftUSD as collateral against USDC at 86% LLTV went live; before that the vault held about $13k.
The circuit breaker
Outflows from ftUSD pass a rate limiter, Circuit Breaker v2:
- the main buffer allows up to 5% of TVL out per 24 hours and refills linearly;
- an elastic buffer grows with fresh deposits and decays over 30 minutes, so a deposit cannot be used to drain the main buffer in the same block;
- TVL for the calculation is floored at
minTVLForMint= 500,000 ftUSD, which keeps a minimum 25,000 ftUSD of daily room when supply is small; - anything over capacity is queued for a settlement delay (6 hours today, configurable from 5 minutes to 7 days) and paid by anyone who calls
executeQueuedafter it; - deposits are never limited, and if the breaker itself malfunctions, it lets transactions through.
For ssftUSD the breaker shows up differently. The vault redeems synchronously out of the yield wrapper, and if the breaker would hold the payout, the redemption reverts instead of joining the queue. A holder who needs to exit during a run either waits for capacity or sells on the ftUSD/USDC pool.
FT and the perpetual put
FT is where the second supply yield comes from, so its design matters for lenders. The public sale priced FT at 10 FT per dollar, $0.10, from a fixed supply of 10 billion. Each sale position is an ftPUT NFT that lets its holder hand back the FT and receive the exact asset and amount they paid, for as long as they hold the position. The raised money sits in low-risk positions (Aave stablecoin supply, stETH, jupSOL, sUSDe), and its yield funds development first and buys back and burns FT with the remainder. A holder who withdraws FT from the put gives up the exit for good, and the backing that portion reserved funds more buybacks.
FT bought on the market carries no put. With FT at $0.138, sale buyers hold a put whose strike sits below the market, and FT Lend's suppliers are paid in a token whose floor applies to someone else.
Leverage through signed orders
FT Lend has Aave-style credit delegation (approveBorrow), but the only functions that spend it are reserved for registered engines, and only Flying Tulip's Safe can register one. An outside contract such as our composer therefore cannot borrow or withdraw for a user, and the plain one-shots (deposit-and-borrow, repay-and-withdraw) take two transactions.
Leverage runs through the LeverageRfqEngine. The user signs a LeveragedOrder (or pre-signs it on-chain), and anyone can fill it: the engine borrows exactly the signed amount on the user's account, the filler swaps it, and the engine checks that at least the signed amount of collateral arrived and the health factor holds. The swap target is not allowlisted. Borrowing against an account needs two things from its owner, the borrow allowance and a signed order for the exact fill, so a third party holding a resting order can only execute it at the user's bounds.
Flying Tulip's own Trade product, live on Sonic since August, is this path with their filler bot on the other side and KyberSwap doing the swap. We fill the same orders on Ethereum with a Morpho flash loan inside our composer, and the user grants nothing to any 1delta contract: both grants go to Flying Tulip's engine, sized to the one order and used up by the fill.
Compared with Aave V4 and Morpho
Aave V4 and Morpho Blue are the two designs every new lender gets measured against. Aave V4 pools liquidity in a Hub and puts risk in Spokes, each spoke a market with its own collateral rules and oracle; a user's borrow rate adds a premium that depends on the quality of their collateral, and risk parameters are versioned so that existing positions keep the configuration they opened under until refreshed. Morpho Blue is an immutable core of isolated markets, each fixed at creation to one loan token, one collateral, one oracle, one rate model and one liquidation LTV, with vaults on top that allocate deposits across markets.
| Flying Tulip Lend | Aave V4 | Morpho Blue | |
|---|---|---|---|
| unit of risk | one cross-margin account per user | user position on a spoke | one isolated market per pair |
| liquidity | one pool per asset per chain | shared hub, drawn by spokes | per market, pooled by vaults |
| risk parameter | maintenance margin on collateral and debt | collateral factor per reserve, plus a per-user risk premium on the rate | liquidation LTV per market |
| stable-vs-stable max LTV | 95.6% (pair-dependent) | per spoke | set by the market's LLTV (e.g. ssftUSD/USDC at 86%) |
| liquidation trigger | HF < 1.25 | HF < 1 | LTV > LLTV |
| supply yield | borrow × util (no reserve factor) + FT from idle-cash strategies | borrow interest less reserve factor | borrow interest; vault fee on top |
| idle cash | deployed to external strategies | sits in the hub | sits in the market |
| acting for a user | engine-gated, admin-registered | governance-whitelisted position managers, opted into per user | any address the user authorises |
| leverage | signed orders, open fill, unrestricted swap target | through position managers | flash loans plus a bundler or callbacks |
| upgrades | UUPS proxies, 3-of-5 Safe, no timelock | Aave governance with timelocks | core immutable |
| public audit of the lending code | none found | multiple | multiple, plus formal verification |
The table puts three differences in view.
Where idle money goes. Aave V4 and Morpho leave unborrowed cash where it was supplied, so a withdrawal never depends on anything but borrowers. FT Lend sends it to strategies, which raises the supply rate and adds a dependency: a supplier's exit now also depends on the yield wrapper getting its cash back from Aave and the other venues it uses.
How collateral is weighed. Morpho prices risk per pair and Aave V4 per spoke, so one bad collateral stays inside its market or spoke. FT Lend nets everything in one account. That gives the best stable-against-stable terms in DeFi and lets a hedge offset its own debt, and it puts every asset a user holds, and soon every futures position, behind the same liquidation line.
Who can change the rules. Morpho Blue's core cannot change. Aave V4 changes through on-chain governance with delays. FT Lend's parameters, oracle and implementation change through one Safe in one transaction. Since August the PositionsManager implementation has been replaced twice (0xe0D676a6… → 0xfB2D54Ac… → 0x89b6f917…), and the minimum account equity on Ethereum has gone from $250 to $0 while Sonic stayed at $10. None of these changes were announced.
Before you put money in
- Governance. Every core contract is a proxy behind a 3-of-5 Safe with no timelock. The
ConfigRegistryimplementation, which holds the margins, caps, pauses and both health-factor gates, is still not verified on Sourcify. - Audits. The public Sherlock contest covered the ftPUT and token contracts. We have not found a published audit of the lending stack, and the docs' audits page returns 404.
- Liquidations are permissioned. The
RfqEngineliquidates through permissioned liquidators, so the liquidation market is whoever Flying Tulip allows. - The FT leg. Supply yield on Ethereum is mostly FT at the treasury's pace and the market's price.
- Exits under stress. ftUSD outflows are capped at 5% of TVL a day before queuing, and ssftUSD redemptions revert while the breaker holds.
- Futures. When
enginePnLgoes live, lending health will move with perp PnL.
What 1delta supports
Flying Tulip is integrated as the FLYING_TULIP lender on Ethereum, Sonic and BNB Chain:
- Data: every listed asset with in-kind supply and borrow rates, caps, pauses and per-pair LTVs derived from the live margins, all from Flying Tulip's lens with no API dependency. User positions carry the protocol's own equity, maintenance and health factor. The FT emission is being added as a separate reward stream valued at FT's market price, so the published supply rate stops being a floor.
- Actions: deposit, withdraw, borrow and repay as direct transactions, including native ETH in and out, and deposit-and-borrow and repay-and-withdraw as two-step flows.
- Loops: open and close on Ethereum through Flying Tulip's leverage engine. BNB Chain runs a newer engine we have not proven yet, so loops there are refused.
- Earn: ssftUSD as a savings vault, and the ssftUSD/USDC Morpho market through our Morpho integration.
Every Flying Tulip row carries a term sheet that states the 1.25 liquidation line, the 1.50 open gate and that the quoted rate excludes the FT emission. For the other side of the comparison, see how Fluid shares one liquidity layer across its markets and how we aggregate lending across all of them.
Sources: on-chain reads of the Flying Tulip PositionsManager (0xbe4050a7…), LendingLens (0x36821680…), ConfigRegistry (0xA8777c3D…), ftUSD (0xF7D85EC4…) and ssftUSD (0x23212884…) on Ethereum and Sonic, 22 October 2026; Flying Tulip API (/ftusd/overview, /mm/lend); Flying Tulip docs (Capital Allocation, Circuit Breaker v2, Glossary).