Hold your stocks.Earn stocks.
Perch is the yield and structured products layer for Robinhood Chain Stock Tokens. Deposit NVDA, AAPL, TSLA or any S&P major — we loop the position on Morpho and auto-compound the yield straight back into the underlying. One click, self-custodial, no mystery strategies.
Connect once. Everything works.
Perch is self-custodial — you never send us tokens, you interact with contracts you can read on the block explorer. If the Connect button isn't reacting, MetaMask is probably not installed, locked, or blocked from opening a popup on this page. The card on the right walks you through it.
- 1Install MetaMaskAny injected wallet works — Rabby and Trust are auto-detected too. If none is present, the Connect button in the nav turns into an install link.
- 2Add Robinhood Chain (chain 4663)One click will pop MetaMask asking to add the network. If MetaMask already has it, this is a no-op.
Yield and structured products for the Robinhood Chain.
Robinhood Chain launched the first mass-market on-chain stock market: 100+ tokenized US equities, Chainlink oracles, deep Uniswap V3 liquidity, and Morpho Blue for lending. Every position a Robinhood account holds is a real, transferable ERC-20 with a live Chainlink price feed and Ethereum-level settlement.
Perch is the yield layer for those tokens. Deposit an NVDA position, the vault supplies it as collateral on Morpho, borrows USDG, deploys the borrow into a curated stable vault, and streams the yield back into your position. The share you hold appreciates in NVDA terms — you wake up with more NVDA than you started with.
Then we compose. Basket indexes wrap the vault shares so you get diversified, yield-bearing exposure in one token. Leveraged products loop the same primitive up to ~4× for directional traders. A single FeeRouter aggregates every fee and streams it toward the treasury, the dev fund, and the $VAULT buyback (which lives on Pons, out of scope for this repo).
Deposit → loop → auto-compound.
Everything is a boring ERC-4626 vault under the hood. The strategy behind it does the loop; you see the share price tick up.
You deposit a Stock Token. The vault wraps it into non-rebasing wStock and forwards it to the strategy.
wStock goes to Morpho Blue as collateral. USDG is borrowed at a conservative target LTV.
Borrowed USDG earns in a curated stable vault. Harvests sweep the interest back to more collateral.
Numbers from contract and pool reads.
The stock you hold on-chain should earn like the stock you hold on Robinhood — but with your keys, your custody, and a public ledger under it.
Three composable primitives.
Each vault is a plain OpenZeppelin ERC-4626 that delegates capital to a pluggable strategy. Deposits pull the Stock Token, wrap to wStock, supply as Morpho collateral, borrow USDG at a target LTV, deposit into a curated stable vault. Withdrawals unwind pro-rata. Timelocked strategy migrations, guardian-triggered pause, per-vault TVL caps, and a high-water-mark performance fee round it out.
Open yield vaults →- ERC-4626 shares — composable with any DeFi front-end
- 3-day timelock on strategy swap; guardian can pause deposits instantly
- wStock wrapper handles ERC-8056 corporate actions without stranding value
- Fees stream to a single FeeRouter — no per-vault leak
IndexToken is an ERC-20 backed by a fixed basket of arbitrary constituents. Constituents can be raw Stock Tokens, wStock wrappers, or even Perch vault shares — the last of which makes the basket yield-bearing without changing user UX. Mint pulls the pro-rata basket (ceil-rounded); redeem pays it out (floor-rounded). Optional mint + redeem fees flow to the FeeRouter as index shares.
Open indexes →- Raw stock, wStock, or vault shares — pick your constituents
- Rebalancer role swaps between constituents via whitelisted routers with slippage bounds
- unitPerShare auto-refreshes from live balances after each swap
- Yield-bearing variant compounds through the underlying vaults
LeveragedMorphoStrategy repeats supply → borrow → swap-USDG-to-stock → wrap → re-supply up to N times, targeting a configured LTV. Leverage ≈ 1 / (1 − LTV): 50% → 2×, 66.7% → 3×, 75% → 4×. Withdrawals unwind pro-rata and swap surplus USDG back to stock so the user gets the full underlying-denominated payout.
Open leveraged products →- Configurable leverage capped below market LLTV − safety buffer
- Withdraw handles pro-rata debt repay with slippage headroom
- Emergency unwind sells the whole position and returns raw stock to the vault
- Options-based products (covered, range) queued behind on-chain options
Every button on this site calls one of these.
The full stack lives in the repo. BUSL-1.1 for two years, then GPL-3.0.
| Contract | Purpose | Ownership |
|---|---|---|
| StockTokenVault | ERC-4626 shell, fees, TVL cap, pause, timelocked migration | Timelock |
| WrappedStockToken | Non-rebasing wrapper — freezes ERC-8056 multiplier | Immutable |
| MorphoLoopStrategy | Single-loop yield strategy on Morpho Blue | Timelock + guardian |
| LeveragedMorphoStrategy | N-loop leveraged strategy, ~2× default | Timelock + guardian |
| StockTokenOracle | Chainlink adapter, staleness guard, 1e18 normalised | Timelock |
| IndexToken | ERC-20 basket, pro-rata mint/redeem, rebalancer | Timelock |
| IndexFactory | CREATE2 deploy of index tokens | Timelock |
| VaultFactory | CREATE2 deploy of vaults (whitelist pre-registration) | Timelock |
| FeeRouter | One-way fee splitter, 3-day route timelock | Timelock |
Every fee goes to one router. Splits three ways.
Vault performance fees, vault management fees, index mint fees, index redeem fees — all denominated in the token they naturally accrue in (vault shares, index shares, or USDG) and pushed to the FeeRouter. Anyone can call distribute() to split them by the current route.
Three shapes of user, one set of primitives.
You hold NVDA / AAPL / TSLA on Robinhood Chain and would rather they earn yield than sit idle. Deposit → forget → the share price ticks up. No new tokens, no positioning.
You want 2×–4× exposure to a stock without opening a perps position or dealing with funding rates. Leveraged vaults give you spot-like exposure via Morpho leverage with hard-capped LTV.
You want to compose. Every vault share, index share, and wStock is a plain ERC-20 — agents can quote prices, mint indexes, sweep sink yield, and route fees with standard interfaces.
Why not just hold, or park in a CEX?
Each column below is what you get by default. Perch adds yield to on-chain stocks without moving them off-chain or handing custody to an exchange.
| Property | Hold Stock Token | CEX yield product | Perch vault |
|---|---|---|---|
| Custodial | You | Exchange | You |
| Yield on the stock | 0 | Usually 0 | Compounded via Morpho |
| Composability | ERC-20 only | None | Full DeFi |
| Corporate actions | Auto (ERC-8056) | Auto | Auto (via wStock) |
| Withdrawal delay | None | T+1 to weeks | Same block |
| Risk model | Underlying | Underlying + counterparty | Underlying + smart contract + Morpho |
The boring stuff we take very seriously.
Perch is unaudited software today. Mainnet launch is gated by two independent audits and a live bug bounty. Everything below is what's already in the code.
Every governance action goes through a 3-day OpenZeppelin TimelockController. No admin key can migrate a strategy, change fees, or move the fee route without waiting.
A separate incident-response multisig can pause deposits and force emergency unwind — but cannot lift a pause or move governance. Fast defence, no residual power.
Deposits from non-Robinhood-whitelisted wallets revert cleanly. Contracts respect the KYT/KYC gate rather than trying to route around it.
wStock wrapper freezes the corporate-action multiplier before Morpho sees the token, so splits flow through the exchange rate instead of decoupling accounting.
Every oracle read is guarded by a max-staleness clock and a positive-answer check. A stalled Chainlink feed halts new positions, not silently misprices existing ones.
Every vault ships with a hard TVL ceiling for the first 90 days. Growth by explicit governance vote, not by drift.
Every S&P major from the Robinhood catalog.
Verified addresses ship in config/robinhood-chain.json. Vaults roll out symbol by symbol, gated on whitelist onboarding for the vault contract.
Stock Tokens are permissioned. Perch respects that.
Robinhood Chain Stock Tokens enforce a KYT/KYC whitelist at the transfer layer. Perch contracts wrap the underlying into a non-rebasing ERC-20 (wstETH-style) and every contract holding a Stock Token has to be onboarded to the Robinhood whitelist before it can accept deposits. That model is why the mainnet path currently shows "Coming soon" — code is ready, onboarding is a gating dependency.
- Chainalysis KYT at the network layer
- ERC-8056 corporate action multipliers respected
- Guardian multisig with pause-only power
- 3-day timelock on every governance change
What people ask before their first deposit.
Open the app and try it against a live local deployment.
Informational only, not financial advice. Contracts are unaudited. Deposits require a Robinhood-whitelisted wallet; the mainnet path is not live until onboarding completes.