Verify
Check every figure the protocol relies on: how NAV is built, the treasury behind it, realised yield and the insurance fund.
Follow the money.
Money moves from DexFi into the Recoup vault's farm, and from the vault to the harvest, which splits it: 55% to borrowers' debt, 25% to lender pool, 10% to insurance fund, 10% to protocol. The protocol's share is split 80% Recoup and 20% DexFi. The borrowers' share pays each bond's debt down, and the principal it repays goes back to the lender pool; on a bond with no debt it is surplus for its depositor. Separately, lenders deposit USDC into the lender pool, which lends it to borrowers against their bonds; repayments come back to the pool and lenders withdraw from it. A liquidation auction repays the debt to the pool first and splits its penalty 50% to the caller and 50% to insurance. The NAV oracle sends the vault a price, not money.
TABLE VIEW · 13 boxes, 20 flows
| BOX | WHAT IT DOES | SHARE | CONTRACT |
|---|---|---|---|
| DexFi | Mints the bonds and pays their weekly yield into its farm. | - | DexFi's bond 0x969C…006f 0x969C6eCF97c256846029cBCBB865824E505E006f |
| NAV oracle | Prices the collateral. A price, not money. | - | NAVOracle 0xF18e…681d 0xF18ed41cfC1d00A179Eea790a2A4C7d48365681d |
| Recoup vault | Holds every depositor's bonds. Its custody adapter stakes them in DexFi's farm and claims their USDC. | - | CollateralVault 0x95d5…FC53 0x95d5442aA3E3FDeb13DD9158fB9eCD0A1777FC53 |
| Custody adapter | Holds the vault's stake in DexFi's farm: the farm records it under this contract, which claims the USDC for the harvest. | - | DirectCallAdapter 0x2a10…b05f 0x2a10A9f17024f98Ab9511F73f2473f82125Eb05f |
| Harvest | Claims the farm's USDC and splits it. Anyone can run it, at most once every 5 days. | - | EpochHarvester 0x230A…45b6 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6 |
| Borrowers' debt | Streamed across every deposited bond, a little every second. It pays that bond's debt down, and the principal it repays goes back to the lender pool; on a bond with no debt it is surplus its depositor can claim. | 55% | CreditManager 0x8E90…f748 0x8E902D98Ef0b513613b42E3A0AA99b06bf28f748 |
| Lender pool | The pool that lent the USDC. | 25% | LenderPool 0x9085…8Fb2 0x9085B96c079d8790D0A74043e2cfeB031C5d8Fb2 |
| Insurance fund | Covers an auction shortfall before lenders do. | 10% | CreditManager 0x8E90…f748 0x8E902D98Ef0b513613b42E3A0AA99b06bf28f748 |
| Protocol | Flushed to the fee splitter, which pays Recoup 80% and DexFi 20%. | 10% | ProtocolFeeSplitter 0xA905…5177 0xA905d06704451733Ea77889FD3ac9847dcD35177 |
| Lenders | Deposit USDC for pool shares, and withdraw: instantly up to the pool's idle cash, by request beyond it. | principal | people, not a contract |
| Lender pool | Lends to borrowers while more than 15% of the pool stays in cash. | principal | LenderPool 0x9085…8Fb2 0x9085B96c079d8790D0A74043e2cfeB031C5d8Fb2 |
| Borrowers | Borrow USDC against their bonds. The debt is paid down by them, or by their 55% of each harvest. | principal | CreditManager 0x8E90…f748 0x8E902D98Ef0b513613b42E3A0AA99b06bf28f748 |
| Liquidation auction | A loan past the liquidation line has its bonds auctioned. The proceeds repay the debt to the pool first. From what is left, a penalty of up to 5% of the debt is split 50% to whoever opened the auction and 50% to insurance, and the rest goes back to the borrower. A shortfall is written down against insurance first, then the pool. | principal | LiquidationAuction 0x92E9…694F 0x92E93BD303B1dcA297e69857711d7b77617c694F |
| FROM | TO | WHAT MOVES | SHARE |
|---|---|---|---|
| DexFi | Recoup vault | USDC yield, paid into the farm where the custody adapter stakes the vault's bonds | 100% of the harvest |
| NAV oracle | Recoup vault | a price, not money: the NAV every loan and liquidation is measured against | not money |
| Recoup vault | Harvest | the farm's USDC, claimed through the custody adapter for the bonds in custody | 100% of the harvest |
| Harvest | Borrowers' debt | USDC | 55% of the harvest |
| Harvest | Lender pool | USDC | 25% of the harvest |
| Harvest | Insurance fund | USDC | 10% of the harvest |
| Harvest | Protocol | USDC | 10% of the harvest |
| Protocol | Recoup | USDC, paid by the fee splitter | 8% of the harvest |
| Protocol | DexFi | USDC, paid by the fee splitter | 2% of the harvest |
| Borrowers' debt | Lender pool | the principal it repays, as it pays a bond's debt down | part of the 55% |
| Borrowers' debt | Depositors | surplus, on a bond with no debt left, for its depositor to claim | part of the 55% |
| Lenders | Lender pool | USDC deposited, for pool shares | principal |
| Lender pool | Lenders | USDC withdrawn: instantly up to the pool's idle cash, by request beyond it | principal |
| Lender pool | Borrowers | USDC lent against their bonds, while more than 15% of the pool stays in cash | principal |
| Borrowers | Lender pool | principal repaid, by them or from their share of each harvest | principal |
| Borrowers | Liquidation auction | the bonds of a loan past the liquidation line | bonds |
| Liquidation auction | Lender pool | the proceeds, up to the debt | principal |
| Liquidation auction | Auction caller | 50% of the penalty | principal |
| Liquidation auction | Insurance fund | 50% of the penalty | principal |
| Liquidation auction | Borrower | what is left after the debt and the penalty | principal |
We price your collateral lower than DexFi does, on purpose.
$ cast call 0xF18ed41cfC1d00A179Eea790a2A4C7d48365681d "navPerBond()(uint256)" --rpc-url https://mainnet.base.org- 1The auction's proceeds pay down the debt first.
- 2The insurance fund covers what is left, as far as its balance reaches.
- 3Anything beyond that falls on whoever funded the loan: the lender pool, or the treasury where it is the funder. If the pool cannot absorb it yet, that part is deferred.
The earliest time, not a promise of one. Harvests are triggered by a keeper, and anyone can call one. The contract refuses a harvest until 5 days after the last one, so the next harvest lands at this time or later, whenever it is next triggered. Times are UTC.
How this is worked out, and how to check it
The time is the harvester's own lastHarvestAt plus MIN_EPOCH_GAP. Before then harvest() reverts with EpochGapNotElapsed, carrying that same moment in unix seconds. It is shown rounded up to the minute, and "open now" is judged by this device's clock rather than the chain's, so the two can differ by a few seconds. The keeper runs on a schedule that can be delayed, so a harvest can arrive hours after the gate opens.
$ cast call 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6 "lastHarvestAt()(uint256)" --rpc-url https://mainnet.base.org$ cast call 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6 "harvest()" --from 0x0000000000000000000000000000000000000001 --rpc-url https://mainnet.base.orgDexFi's public fund data as of 2026-10-09.
DEXFI'S OWN FIGURES
These are DexFi's figures about itself, not an independent valuation. DeBank's read of the same treasury, which the daily cross-check compares them against, is on Stats. Display only: collateral and liquidation maths use Recoup's own NAV oracle, never a third-party feed.The newest week is provisional: its span is assumed to be seven days until DexFi's next top-up lands, and it can move when it does.
Weeks commencing 13 Aug to 29 Oct.
HISTORY, NOT A PROMISE
USDC per bond per week, from the DexFi farm's on-chain reward-funding events divided by bonds staked. History, not a promise: no rate is promised, and every projection the app shows starts from this trailing history, the lender calculator's rough APR included.Every figure the protocol has produced, indexed from its own events, is on Stats.
- Step 1. Price the part of the DexFi treasury EOA that has a primary source, with no DexFi input: its ETH at Chainlink's price and its Aave position net of debt, on Base mainnet:0xd4ec4E5b7625Fed3c40Bfeec206E49396F02Dd54Basescan ↗
- Step 2. Take the rest of the fund - DexFi's vault book and other-chain balances, which only DexFi prices - at DexFi's own figure, less a 20% haircut.
- Step 3. Divide the sum by total bonds outstanding. DexFi's displayed price divides the same fund with no haircut, which is the gap in the divergence panel above.
- Step 4. Posted on chain at most about once a day. A large move is held back and counts only if it is confirmed in a separate step before it expires; borrowing pauses if the price is more than 8 days old.reading the oracle's last post
- Step 5. Reconcile monthly against DexFi's displayed bond price; publish the reconciliation here.not yet published