Paboxo

Earn vault

The only way to lend on Paboxo — one USDG deposit, lent across the markets.

The Earn vault is how you lend on Paboxo, and the only way: a market accepts liquidity from its vault and from nobody else (see how it works). It is an ERC-4626 vault over USDG. You deposit once; the vault lends to the markets it has been configured for, rather than you choosing one.

NamePaboxo Earn USDG
Share tokenpeUSDG, 18 decimals (USDG has 6)
Addresssee contracts

Shares

Deposit USDG, receive peUSDG. The share count stays the same; what changes is how much USDG each share is worth. It rises as borrowers pay interest, and it falls if a market the vault lends to realises bad debt.

Shares carry 12 more decimals than USDG. That offset is also the vault's protection against the ERC-4626 first-depositor inflation attack.

Standard ERC-4626 methods apply — deposit, mint, withdraw, redeem, and the preview* functions for quoting. maxWithdraw and maxRedeem are capped by what the vault could pay out right now (liquidAssets()).

deposit, mint, withdraw and redeem first accrue interest in every market. totalAssets() and the preview* functions already count that pending interest, so in the same block a preview returns exactly what the call does. The formulas are on Earn vault math.

How the money moves

The vault keeps a list of markets, each with a cap — the most the vault will have lent to that market — plus a supply queue and a withdraw queue that set the order it fills and drains them.

DepositAt least the vault's minimum deposit (0.1 USDG) per deposit. The vault places idle USDG into markets in supply-queue order, each up to its cap. What does not fit stays idle in the vault. The supply queue is empty, so a deposit stays idle
BorrowIf a market holds less cash than a borrower asks for, it pulls the shortfall from the vault's idle USDG (pullTo), never past that market's cap. With caps unlimited, any market can draw on all of idle
RepayThe market sends any cash above its reserves back to the vault, where it is available to every market again
LiquidationThe same as a repay: what the liquidator pays goes back to the vault, less the market's reserves (since 26 October 2026)
WithdrawThe vault pays from idle USDG first, then takes cash back from markets in withdraw-queue order. A paused market counts as having nothing to give

The vault allocates by pull alone: new deposits wait idle in the vault and reach a market only when a borrower there needs the cash. The pull on borrow is what keeps liquidity from being stranded: a quiet market does not sit on cash a busy one is turning borrowers away for, and idle USDG stays withdrawable even while a market is paused. The push path is still in the contract; it comes back if the curator fills the supply queue again. Interest is unchanged in total, since only borrowed USDG earns, wherever the rest sits.

Live settings, read on 2026-11-13 at block 113204091:

MarketsNVDA/USDG, SPY/USDG, WETH/USDG, SPCX/USDG, TSLA/USDG, MSFT/USDG, AAPL/USDG, QQQ/USDG, GOOGL/USDG, AMD/USDG, and the two LP markets
Supply queueempty — deposits are not pushed into markets
Withdraw queueNVDA/USDG, SPY/USDG, WETH/USDG, SPCX/USDG, TSLA/USDG, MSFT/USDG, AAPL/USDG, NVDA/USDG LP, SPY/USDG LP, QQQ/USDG, GOOGL/USDG, AMD/USDG, in that order
Per-market capunlimited (type(uint256).max)
Deposit cap0 — uncapped
Minimum deposit0.1 USDG per deposit (minDeposit(), read at block 98528689, 26 Oct 2026). Withdrawals are never held to it
Fee0%

Since 4 November 2026 the vault also lends to the two LP markets, NVDA/USDG LP and SPY/USDG LP. At block 108993261 (8 Nov 2026) both are enabled with an unlimited cap and sit in the withdraw queue after AAPL/USDG; the supply queue is still empty. QQQ/USDG, GOOGL/USDG and AMD/USDG, listed on 13 November 2026, follow them, each enabled with an unlimited cap.

On 22 October 2026 (block 94915008) totalAssets() was 4,480.378347 USDG, of which 4,230.375971 was idle in the vault. NVDA/USDG and SPY/USDG held the vault's 1-base-unit seed; SPCX/USDG and TSLA/USDG held the 100 USDG each was seeded with from the vault when it was listed, with no debt; WETH/USDG held 50.002363 USDG, all of it lent out.

On 23 October 2026 the protocol Safe took those two 100 USDG seeds back into the vault (block 96053523), leaving 1 base unit in each market, like the launch markets. MSFT/USDG and AAPL/USDG were seeded with 100 USDG each on 27 October 2026 and returned the same way the same day (block 99432434). Since 26 October 2026 a market can be listed with no seed at all, so a new market holds nothing until a borrower pulls what they need. QQQ/USDG, GOOGL/USDG and AMD/USDG were listed on 13 November 2026 with a seed of 1 base unit (0.000001 USDG) each, the same as the launch markets. At block 97359729 (25 Oct 2026) totalAssets() was 4,591.380523 USDG, of which 4,541.375969 was idle in the vault.

Withdrawals depend on liquidity

A withdrawal is only possible to the extent there is cash that is not lent out: the vault's idle USDG, plus what each market holds beyond its borrowers' debt. If the markets are fully borrowed, redemption waits for borrowers to repay.

Withdrawing reads no price, so it stays open while the equity market is closed. Pausing the vault does not stop it either — pause stops deposits and markets pulling new liquidity, not withdrawals.

What a depositor earns

The vault's blended return: the interest each market pays on what the vault has lent it, weighted by where the vault's USDG sits (idle USDG earns nothing), less each market's reserve factor and less the vault's fee.

That rate is an APR, the figure the contracts work in. It compounds on its own: each time a market books interest, the interest is added to what its borrowers owe and to the vault's share price, and the next booking charges on the larger amount. There is nothing to claim or restake. Bookings happen whenever someone uses a market, not on a fixed schedule, so the app shows the continuous-compounding figure, eAPR−1e^{\text{APR}} - 1, as the APY: the ceiling a quiet market approaches more slowly. See Earn vault math for the formula and APR and APY for what compounding adds.

Fee

A performance fee, performanceFee, minted as peUSDG to a fee recipient. Like every percentage in the protocol it is in WAD: 1e18 is 100%, so 10% is 0.1e18. It is capped on-chain at MAX_PERFORMANCE_FEE = 0.5e18 (50%). It is currently 0.

The fee has a high-water mark, kept per share. It is charged only on growth of the share price above the highest price it has already been settled at. After a loss, from bad debt for instance, no fee is taken and the mark stays where it was, so the recovery back to the previous level is not charged. Deposits and withdrawals happen at the current price and do not move the mark. See performance fee.

Who runs it

Two roles, deliberately split.

  • Curator — holds CURATOR_ROLE and runs the vault: adds and removes markets, sets each market's cap, the two queues, the deposit cap and the fee, pauses and unpauses, and moves USDG between idle and a market. Which markets the vault is exposed to, and how much, is the curator's explicit decision.
  • Protocol — holds upgrade rights and sets the vault's minimum deposit. The vault is a UUPS proxy, and its admin role is not stored in the vault: it resolves, on every call, to the vaultAdmin named by the EarnVaultFactory. The curator cannot upgrade the vault, and the protocol administers CURATOR_ROLE, so it can revoke a curator.

The protocol role resolves to the protocol Safe, a 2-of-4 multisig (vaultAdmin() on the EarnVaultFactory, since 4 November 2026). CURATOR_ROLE is held by the Safe alone (read at block 105757627). See risks.

In the app

The Earn page deposits into and withdraws from this vault; the Borrow page's Lend tab is the same vault deposit. The Earn pages for individual markets are read-only: they show a market's parameters and state, and there is nothing to supply to one directly.

Keyed by pool

One detail for integrators: the vault identifies a market by its LendingPool address, while the interest rate model identifies the same market by its router. They are different addresses. markets(pool) returns the market; markets(router) returns zeroes and does not revert.

On this page