A debt has no transfer
A position on Morpho belongs to an address and there is no function that hands it to another one. The only way a debt appears at a new address is if that address borrows.
You bought a hardware wallet. Or you think a seed phrase was photographed. Moving tokens is tedious — one transfer each — and moving a loan is not possible in the obvious way at all: collateral does not come out from under a debt, and a debt cannot be handed to another address. Flit moves the whole wallet in one transaction, loan included, without selling anything.
None of these is a Flit rule. Each is how Morpho Blue actually behaves, and together they mean a borrower with no spare cash cannot change wallets at all.
A position on Morpho belongs to an address and there is no function that hands it to another one. The only way a debt appears at a new address is if that address borrows.
Morpho checks the position's health at the end of every withdrawal. While a dollar is still owed, the shares behind it do not move — so you cannot take them to the new wallet first.
Dollars you would have to find first — and if you had them spare you would not have borrowed. Selling the collateral to raise them is exactly the thing you did not want to do.
Morpho Blue lends its own balance of any token for the length of a single transaction, free, on the condition that it comes back before the call ends. Flit borrows exactly your debt, repays your old position by shares so it is exact at the moment it runs, pulls the collateral out, pledges it for the new wallet, and borrows the same debt again in the new wallet's name — which the new wallet permits with a signature, and takes back with a second signature in the same transaction. Then the flash loan goes home. Your loose tokens cross under signed permits in the same call, and your ether rides along with it.
Read live from your wallet at one block: 103 tokens and every one of the 227 Morpho markets, whether or not anyone has ever used them.
| What | How it crosses | Signatures |
|---|---|---|
| Tokenized stock, dollars, wrapped ether, vault shares | transferred straight from the old wallet to the new one, under a signed permit | one each |
| Collateral with no debt against it | unpledged into the adapter and pledged again for the new wallet | none of its own |
| Collateral with a loan against it | a flash loan repays the debt, the collateral crosses, and the same debt is borrowed again in the new wallet's name | two from the new wallet |
| A lending deposit | the new wallet's deposit is made first, then the old one is withdrawn — so a market that is almost fully lent out can still be left | none of its own |
| Ether | sent with the transaction, keeping back enough to pay for it | none |
A v3 or v4 position is an NFT, and moving one inside a bundle would mean signing a permit that names Bundler3 — a public contract — as its spender. If the bundle then reverted, that permit would sit in the open until it expired. Flit counts your positions, says so on the page, and leaves them to you.
Flit moves the tokens it can name from the chain: the stocks, the dollar, wrapped ether and the shares of vaults built by Morpho's own factory. A token nobody has heard of is not in that list, and Flit will not pretend to have seen it. Send those yourself.
Flit charges nothing and takes nothing. The whole cost is the gas of one transaction, measured on a fork of this chain by actually sending it — not estimated.
399,748 gas at the chain's current price. Four transfers done the ordinary way cost about $0.03 and take four confirmations.
499,918 gas: a flash loan, a repayment, a withdrawal, a pledge, a borrow and two authorisations, in one call.
1,099,853 gas for four tokens, a loan, bare collateral, a lending deposit and the ether — the book the suite moves in the fork test.
The other way round — selling everything, moving dollars, buying it all back — costs the round trip through the pools. Measured on 11 stocks at the block below, a $25,000 book pays a median of 0.93% to leave and come back, and the worst of them pays 3.1%. That is 1,375 times the gas Flit spends, and it is the smaller half of the argument: the loan would have been closed and re-opened at whatever rate the market offered by then.
Every address that has ever held a Morpho position on this chain, read at one block and run through Flit's own planner as if it were moving to a fresh wallet. This is the result, refusals and all.
of 1,323 addresses that ever did. 519 of them owe money against collateral.
planned end to end with no refusal, including 499 of the wallets that owe money.
9 because the loan is at its limit, 7 because the market they borrowed from is lent out, 6 because the flash loan would be bigger than Morpho holds, 2 because the price feed is not answering, 1 because a deposit cannot be withdrawn right now.
The commonest refusal is not ours either: a Morpho market that is lent out to the last dollar cannot lend the new wallet the money to re-open the loan, and cannot let a depositor withdraw. Flit says which market and how much is free, before you sign anything.
Moving a loan needs the new wallet to let Morpho's Bundler3 borrow in its name for the length of one call. Bundler3 is a public contract, so that permission is dangerous while it stands — and this is how Flit handles it.
Anyone at all can call Bundler3. While your new wallet authorises it, anyone can make it borrow against that wallet's collateral and keep the money. We proved that in the suite, by doing it: a stranger borrowed $50.00 against an exposed wallet through Bundler3, in one ordinary transaction.
You sign two Morpho authorisations on consecutive nonces — one to grant, one to revoke — and both are inside the transaction, either side of the borrow. When the block ends, the permission is gone. The suite asserts that afterwards, every time.
If the transaction reverts, its calldata is public and the grant signature could be replayed by anyone until it expires — 20 minutes after you signed. The revocation you already signed remains valid on the next nonce, so it can be sent straight after; the app checks both wallets' authorisations after any failure and offers to send it. A new wallet with nothing in it is not worth borrowing against, which is why Flit refuses a destination that already has Bundler3 authorised rather than treating it as a convenience. This is the sharpest edge in the design, and it is here rather than in a footnote.
Flit is not audited, and nothing on this page should be read as saying it is. What follows is what was run, and what it found.
Each one executed by an eth_call with no to on Robinhood Chain itself — real creation code on the real evaluator, costing nothing and leaving nothing behind. Every refusal has a control proving the same call goes through when the guard is not in the way.
node tools/props.mjs --propsThe model recompiled with one defect at a time, each named for the property that must notice. Six survived the first sweep; those were six holes in the properties, and the properties that close them are in the count above.
node tools/props.mjs --sabotageThe page's own modules planning moves and building their calldata, executed against a model of Morpho that refuses the way Morpho refuses. Includes a 120-draw fuzz over random books, with random time passing and strangers trading in between: 66 moved, 21 refused — and every refusal forced through afterwards, to check the chain refuses it too.
node tools/test-plan.mjsOne bug at a time in the planner or the transaction builder, each of which must be caught by the check named for it. Two are declared unobservable, with the measurement that says so.
node tools/sabotage.mjsBooks built on a fork of this chain with the owner's own calls, then moved: the loan repaid and re-opened, the collateral re-pledged, the tokens across, the permissions revoked. Every guard has a control, and every revert is classified by its selector rather than counted as a pass.
node tools/test-move.mjsEvery token Flit lists, asked on the live chain whether it accepts a permit signed with the domain the scanner found — executed, not inferred from a matching hash. Three controls must be refused, and are.
node tools/test-permits.mjsThe real page in a real browser against a fork: connect, read the book, name a destination, sign every signature, send, and check both wallets afterwards.
node tools/e2e.mjsEvery one of these is a command in the repository, and every sweep carries a control that must fail. A validator that stopped validating looks exactly like a clean build.
If somebody else already has your key, they can send transactions too — including ahead of yours. Flit is for a wallet you still control and want to leave behind, not for a race against a thief.
Uniswap liquidity positions, NFTs, tokens outside the directory and anything on another chain stay where they are. The app counts what it found and says so.
Re-opening the loan means borrowing from the same market again. If that market has been lent out to the last dollar since you borrowed, nobody can do it — Flit says which market, and how much it has.
No, because there isn't one. Flit deploys nothing. The transaction your wallet signs is one call to Morpho's own Bundler3, which was live on this chain before Flit existed. What Flit contributes is the plan: which calls, in which order, for how much.
No. Not a share, not a dollar. The collateral is unpledged and pledged again; the loan is repaid and re-opened at the same size; the tokens are transferred. No pool is touched and no price is paid.
No. It signs, and the old wallet sends and pays. Flit also sends the old wallet's ether across, keeping back enough to cover the transaction itself.
You cannot: the new wallet has to sign before anything is built, and a signature cannot be produced for an address you do not control. That is the whole reason the proof signature exists.
Gas, and nothing else. A wallet of four stocks costs about $0.06; one with a loan in it about $0.08. Flit takes nothing and has no fee to take.
Yes. Every holding and every position has a switch. What Flit will not do is move collateral out from under a debt it is leaving behind, because that is a position anyone may then liquidate — the chain refuses it too.
Nothing: it is the same market, with the same rate curve, and the new wallet's debt is the old one to within a rounding unit. What you lose is the position's history, which Morpho does not keep anyway.
No. Flit has not been audited and nothing here should be read as saying it is. What has been done is on this page, with the command to reproduce each of it, and the contracts Flit calls are Morpho's own.
Connecting a wallet reads everything it holds and plans the move. Nothing is sent until you sign, Flit holds nothing, and the new wallet needs no ether of its own.