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.

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.

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.

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.

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.

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.

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