How Porus works
Porus turns tokenized equity into dollar liquidity, without selling it. This page walks through the mechanism layer by layer — what each contract actually does, and what it doesn't.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. Wide horizontal composition, one left-to-right flow line: a stock-certificate icon labeled "AAPL · TSLA · NVDA ..." → an arrow through a small padlock icon labeled "COLLATERAL" → a dollar-coin icon labeled "pUSD". A thin dashed arrow loops back from the pUSD coin to the stock icon, labeled "REDEEM ANYTIME", showing the flow is reversible.
One market per stock, sealed at creation
Every Porus market runs on Morpho Blue — an immutable, audited lending primitive that doesn't distinguish stock collateral from any other asset. A market is just a five-part tuple: loan token, collateral token, oracle, interest-rate model, and liquidation LTV (LLTV). Once created, that tuple is fixed forever — no admin can change a market's oracle, its LLTV, or its risk parameters after the fact.
Porus deposits AAPL, TSLA, NVDA, GOOGL, AMZN, MSFT, META, and SPCX as collateral, borrowing against USDG as the loan asset, each in its own isolated market. Isolation matters: a bad oracle or a liquidation cascade in one market cannot touch collateral or liquidity sitting in another. All eight markets currently listed share the same 62.5% LLTV convention (SPCX runs at 38.5%, reflecting thinner liquidity for pre-IPO shares) and the same adaptive-curve interest-rate model, so borrow rates float with utilization — Porus never sets them directly.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. Eight identical rectangular boxes in a single row, each labeled with a stock ticker over "USDG" (AAPL, TSLA, NVDA, GOOGL, AMZN, MSFT, META, SPCX), each with a small eye-in-diamond oracle icon and an "LLTV 62.5%" micro-label (SPCX box reads "LLTV 38.5%"). Visible gaps between boxes, each gap marked with a small broken-link glyph to show the markets are not connected to each other. Caption strip along the bottom: "MORPHO BLUE — ONE SINGLETON, EIGHT ISOLATED MARKETS".
USDG in, pUSD out — always 1:1
The Treasury contract (0x7eCE2544…) is deliberately the smallest, most conservative piece of the system. It holds a USDG reserve and does exactly two things: mint(amount) deposits USDG and mints pUSD 1:1, redeem(amount) burns pUSD and returns USDG 1:1. No admin withdraw path, no owner-mint backdoor, no fee on either direction. The invariant it exists to hold is simple: pUSD's total supply always equals the USDG sitting in the Treasury.
It's worth being precise about what backs pUSD. The immediate reserve relationship is USDG ↔ pUSD — the Treasury does not hold AAPL or NVDA directly, and pUSD is not itself claimed to be 1:1 backed by the underlying stock. The credit that creates the USDG being minted into pUSD originates one layer up, from stock-collateralized borrowing in Layer 1 and Layer 3.
A Curve StableSwap pool (pUSD/USDG) sits alongside the Treasury for anyone who'd rather swap than mint/redeem directly. The pool doesn't hold the peg on its own — the peg is held by arbitrage against the Treasury's guaranteed 1:1 mint/redeem; the pool just makes that arbitrage cheap and instant.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. A single rectangular vault/ledger box centered, labeled "TREASURY". Two labeled arrows: one entering from the left labeled "USDG" with a small open-padlock icon, one leaving to the right labeled "pUSD" — both marked "1:1". Below the vault, a horizontal balance-scale icon sitting perfectly level, captioned "RESERVE == SUPPLY, ALWAYS". A smaller box to the side labeled "CURVE POOL" connects to both arrows with thin dashed lines, captioned "ARBITRAGE KEEPS THE PEG TIGHT".
Stock in, pUSD out — one transaction
This is the piece that makes the UX collapse from three steps into one. PorusZap (0xA16d3032…) sits between Morpho Blue and the Treasury and clubs the whole path — supply collateral, borrow USDG, mint pUSD — into a single call: borrowAndMint(marketParams, collateralAmount, borrowAmount). The reverse, repayAndWithdraw, does the same in one call going back the other way: redeem pUSD, repay the Morpho debt, withdraw collateral to the wallet.
PorusZap never custodies funds as reserve — every balance it ever holds is transient, mid-transaction. Your collateral is credited directly to your own Morpho position (onBehalf = you), not to PorusZap's. That does mean a one-time setAuthorization(zap, true) call on Morpho Blue is required before your first zap — the same one-time approval step any Morpho-based product asks for, since Morpho itself needs to know PorusZap is allowed to borrow and withdraw on your behalf.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. One wide bracket frame labeled "ONE TRANSACTION — PORUSZAP" containing three small icons in sequence, joined by solid arrows: a stock-certificate icon labeled "SUPPLY COLLATERAL" → a handshake/ledger icon labeled "BORROW USDG" → a coin-stack icon labeled "MINT pUSD". An arrow exits the bracket on the right into a small wallet icon labeled "YOUR WALLET". Beneath the bracket, a small annotation: "msg.sender STAYS YOU, THE WHOLE WAY THROUGH".
Why this needs its own contract instead of routing through Morpho's general-purpose Bundler3: every call inside a Bundler3 multicall executes with msg.sender == Bundler3. That's fine for Morpho's own adapter functions, but it breaks the Treasury's mint/redeem, which trust msg.sender directly to stay minimal. PorusZap is the direct caller of both Morpho Blue and the Treasury, so msg.sender stays the real user throughout the whole call — no rewriting needed.
Pricing tokenized equity is not pricing a crypto pair
Morpho Blue markets are permissionless — anyone can spin one up against any collateral with any oracle, including one that always reports a manipulated price. Every market Porus lists clears a bar before it ever appears in this app: its oracle has to resolve to the same live Chainlink price already trusted elsewhere for that stock, re-checked directly on-chain via latestRoundData(), not taken on faith from a listing.
Tokenized stock feeds carry a risk crypto pairs don't: real-world market hours. Off-hours (nights, weekends, holidays) a feed legitimately holds its last price with no heartbeat — that's expected behavior, not staleness. Stock tokens also expose oraclePaused(), which freezes pricing during corporate actions like splits or dividends — any liquidation logic that reads a stock price should check this flag first.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. A single hexagonal feed icon at center labeled "CHAINLINK FEED", with two thin arrows pointing into it: one from a small clock icon labeled "MARKET HOURS ONLY — WEEKEND = LAST PRICE, NOT STALE", one from a small pause icon labeled "oraclePaused() — FROZEN DURING SPLITS/DIVIDENDS". A checkmark badge beneath reads "VERIFIED ON-CHAIN VIA latestRoundData()".
What a deposit looks like, start to finish
- 01Approve
Approve your stock token (e.g. AAPL) to PorusZap for the amount you intend to deposit.
- 02Authorize (one-time)
Call setAuthorization(PorusZap, true) on Morpho Blue. Only needed once, ever, across every Porus market.
- 03borrowAndMint
One signature: your stock lands as collateral in the isolated market under your own Morpho position, USDG is borrowed against it, and that USDG is minted into pUSD, sent straight to your wallet.
- 04Hold, trade, or repay
pUSD is a plain ERC-20 the moment it lands — spend it, provide liquidity with it, or come back later and call repayAndWithdraw to close the position and get your stock back.

Flat vector technical illustration, architectural blueprint / drafting-table style. Warm parchment background (#f3ede0), linework in deep navy ink (#2c3a63), key/active elements picked out in muted copper (#c8a05a). Thin 1px rules, no gradients, no drop shadows, no photorealism, no glossy 3D, no people or faces. Small uppercase monospaced micro-labels, like captions on a technical drawing sheet. Generous whitespace, quiet and precise — not a marketing graphic. A horizontal strip of four equal numbered panels (01, 02, 03, 04) separated by thin vertical rules, each with one small line-icon and a short caption: 01 a checkmark-on-token icon captioned "APPROVE"; 02 a key icon captioned "AUTHORIZE (ONE-TIME)"; 03 a lightning-bolt-through-coin icon captioned "borrowAndMint"; 04 a wallet-with-arrow icon captioned "HOLD, TRADE, OR REPAY". One thin unbroken arrow runs left to right beneath all four panels.
Where yield actually comes from
spUSD, the staked/yield-bearing version of pUSD, isn't deployed yet — see the spUSD page for the current preview. Once live, spUSD will be an ERC-4626 vault: stake pUSD and it's auto-supplied across the stock-collateral Morpho markets above, earning the real interest that borrowers pay to hold their positions open. That's the entire yield source — real borrower interest, nothing else. Porus does not hold or claim any T-bill/RWA sleeve today, and this page won't claim one until it's actually integrated and held.
Contracts — Robinhood Chain (4663)
- pUSD
- 0x18717dD0FeA68fBE42c842c73C6c012C2e9Ec226
- Treasury
- 0x7eCE25445D60FCd503332eF1B43a66BBDe5c9b16
- PorusZap
- 0xA16d30325B33e187d7a5bA477fF879c5Da346135
- Morpho Blue
- 0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010