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.

Steakhouse USDG (Morpho Vault V2)0xBeEff033…09dd
Morpho Blue0x9D53d5E3…1010
Uniswap SwapRouter020xCaf681a6…5cb2
Uniswap QuoterV20x33e885eD…A9E7
Uniswap V3 factory (the stock pools)0x1f7d7550…2EfA
USDG0x5fc5360D…d168

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.

FlowChecksResult
save8pass
grow8pass
trade10pass
borrow14pass

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.

BreakWhat it doesCaught by
swap-to-routerbought shares are sent to the router instead of the wallettrade
slippage-invertedthe slippage floor is set ABOVE the quote, so every trade failstrade
no-min-guarda swap with no minimum output can be builttrade
no-deadlinethe deadline is replaced with "never"trade
withdraw-to-vaultwithdrawn dollars are sent to the vault itselfsave
borrow-in-sharesthe loan amount is passed as SHARES, so a million-fold smaller loan arrivesborrow
repay-by-assets"repay all" repays the share count as dollars and leaves debt behindborrow
ignore-lltvthe max-borrow figure ignores the liquidation LTVborrow
accrual-lateinterest is accrued a minute too farborrow
principal-by-assetsa withdrawal reduces principal by its size, calling the interest in it principalgrow

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.