What Tarn is
Tarn is a website. It reads Robinhood Chain (id 4663), builds transactions, and hands them to your wallet to sign. It has no smart contracts, no token, no admin and no custody: your USDG, vault shares, stocks and loans sit in your own wallet or in the protocols below, in your name.
Contracts it uses
Each one was already live on the chain. Tarn identifies them by what they answer on chain, not by their names (anyone can deploy something called "UniswapV3Router"), and the build re-checks all of them.
The checks: the router's and quoter's factory() are the factory that holds the stock pools, both deployed by the same account; Morpho's own GeneralAdapter1 reports this Morpho Blue; the vault's asset() is USDG; and every borrow market's ID is recomputed from its parameters.
Save
Deposit calls the vault's ERC-4626 deposit, and you receive its shares. Withdraw calls withdraw; "Max" calls redeem with your whole share balance so nothing is left behind. The rate shown is measured from the vault's own share price: 3.87% a year over the last 7 days and 3.77% over 30. The curator's fee is already inside it.
Grow
Tarn reads the vault's Deposit, Withdraw and Transfer events for your address over the vault's whole life, and replays them in order. A deposit adds its dollars to your principal. A withdrawal, or shares you send away, removes the same fraction of principal as the fraction of shares that left. Shares you receive from someone else count as principal at their value on arrival, never as interest. Your interest is what your shares are worth now, minus that principal.
Growing sends three transactions: withdraw exactly the interest, approve Uniswap's router for exactly that amount (if needed), and buy the stock with a minimum 0.5% under a fresh quote. Nothing on chain stores your principal, so it's a calculation, not a lock. Tarn shows the history it used so you can check it.
Borrow
Borrowing uses Morpho Blue directly. You approve the stock, supplyCollateral, then borrow for yourself. Repaying all of it uses Morpho's share-based repay, so interest that accrues while your transaction is pending is covered too. Tarn only lists a market if its oracle is within 2% of the stock's live pool price and it has at least $1,000 free to lend. The figures shown (your debt, the limit, the liquidation price) use Morpho's own arithmetic, in its own rounding order, including the interest accrued up to the current block.
If the price feed pauses (Robinhood's feeds can stop outside market hours), Morpho can't price your collateral. New borrowing then waits, but repaying always works, and withdrawing collateral works once the loan is repaid. The tests prove this three days into a stale feed.
Trade
Trades go through Uniswap's SwapRouter02 exactInputSingle, wrapped in its deadline-checking multicall, 20 minutes after the chain's current block time. Tarn asks QuoterV2 for every fee tier the stock trades in, uses the best, re-quotes right before you sign, and sets your minimum from that. It refuses to build a trade with no minimum.
How it's tested
Every flow runs end to end with Tarn's own transaction builders (js/tx.js, the same file this site uses) against live Robinhood Chain state, using eth_simulateV1. A test wallet is funded, stocks are bought for it through the real pools, and time is moved forward so Morpho's real interest model runs. Nothing is broadcast. Each check compares against what the contracts themselves report.
Last run: 4/4 flows, 40 checks, at block 70,926,166.
| Flow | Checks | Result |
|---|---|---|
| save | 8 | pass |
| grow | 8 | pass |
| trade | 10 | pass |
| borrow | 14 | pass |
Deliberate bugs
A test that passes has only shown it can pass. So the builders were broken on purpose, one defect at a time, and each break had to make its own flow fail. Result: 10/10.
| Break | What it does | Caught by |
|---|---|---|
swap-to-router | bought shares are sent to the router instead of the wallet | trade |
slippage-inverted | the slippage floor is set ABOVE the quote, so every trade fails | trade |
no-min-guard | a swap with no minimum output can be built | trade |
no-deadline | the deadline is replaced with "never" | trade |
withdraw-to-vault | withdrawn dollars are sent to the vault itself | save |
borrow-in-shares | the loan amount is passed as SHARES, so a million-fold smaller loan arrives | borrow |
repay-by-assets | "repay all" repays the share count as dollars and leaves debt behind | borrow |
ignore-lltv | the max-borrow figure ignores the liquidation LTV | borrow |
accrual-late | interest is accrued a minute too far | borrow |
principal-by-assets | a withdrawal reduces principal by its size, calling the interest in it principal | grow |
Risks
- Protocol risk. Morpho and Uniswap are audited, but not risk-free. Tarn adds no contract of its own.
- Credit risk. Steakhouse USDG lends to borrowers. Bad debt would be a loss to the vault.
- Liquidation. A loan above the market's maximum loan-to-value can be liquidated. Tarn warns you from 85% of the limit.
- Market risk. Stocks fall. Tokenized stocks can be paused by their issuer.
- Liquidity. Withdrawals and borrows need free USDG in the market at that moment.