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.

EACH HARVEST · EVERY BOX LINKS TO ITS CONTRACT ON BASESCAN

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.

A price, not moneyHarvest USDC, line width = sharePrincipal, arrowed, not to scaleShares are fixed by the protocol; the totals move with what the bonds pay and what is lent.
TABLE VIEW · 13 boxes, 20 flows
BOXWHAT IT DOESSHARECONTRACT
DexFiMints the bonds and pays their weekly yield into its farm.-DexFi's bond 0x969C…006f 0x969C6eCF97c256846029cBCBB865824E505E006f
NAV oraclePrices the collateral. A price, not money.-NAVOracle 0xF18e…681d 0xF18ed41cfC1d00A179Eea790a2A4C7d48365681d
Recoup vaultHolds every depositor's bonds. Its custody adapter stakes them in DexFi's farm and claims their USDC.-CollateralVault 0x95d5…FC53 0x95d5442aA3E3FDeb13DD9158fB9eCD0A1777FC53
Custody adapterHolds 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
HarvestClaims the farm's USDC and splits it. Anyone can run it, at most once every 5 days.-EpochHarvester 0x230A…45b6 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6
Borrowers' debtStreamed 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 poolThe pool that lent the USDC.25%LenderPool 0x9085…8Fb2 0x9085B96c079d8790D0A74043e2cfeB031C5d8Fb2
Insurance fundCovers an auction shortfall before lenders do.10%CreditManager 0x8E90…f748 0x8E902D98Ef0b513613b42E3A0AA99b06bf28f748
ProtocolFlushed to the fee splitter, which pays Recoup 80% and DexFi 20%.10%ProtocolFeeSplitter 0xA905…5177 0xA905d06704451733Ea77889FD3ac9847dcD35177
LendersDeposit USDC for pool shares, and withdraw: instantly up to the pool's idle cash, by request beyond it.principalpeople, not a contract
Lender poolLends to borrowers while more than 15% of the pool stays in cash.principalLenderPool 0x9085…8Fb2 0x9085B96c079d8790D0A74043e2cfeB031C5d8Fb2
BorrowersBorrow USDC against their bonds. The debt is paid down by them, or by their 55% of each harvest.principalCreditManager 0x8E90…f748 0x8E902D98Ef0b513613b42E3A0AA99b06bf28f748
Liquidation auctionA 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.principalLiquidationAuction 0x92E9…694F 0x92E93BD303B1dcA297e69857711d7b77617c694F
FROMTOWHAT MOVESSHARE
DexFiRecoup vaultUSDC yield, paid into the farm where the custody adapter stakes the vault's bonds100% of the harvest
NAV oracleRecoup vaulta price, not money: the NAV every loan and liquidation is measured againstnot money
Recoup vaultHarvestthe farm's USDC, claimed through the custody adapter for the bonds in custody100% of the harvest
HarvestBorrowers' debtUSDC55% of the harvest
HarvestLender poolUSDC25% of the harvest
HarvestInsurance fundUSDC10% of the harvest
HarvestProtocolUSDC10% of the harvest
ProtocolRecoupUSDC, paid by the fee splitter8% of the harvest
ProtocolDexFiUSDC, paid by the fee splitter2% of the harvest
Borrowers' debtLender poolthe principal it repays, as it pays a bond's debt downpart of the 55%
Borrowers' debtDepositorssurplus, on a bond with no debt left, for its depositor to claimpart of the 55%
LendersLender poolUSDC deposited, for pool sharesprincipal
Lender poolLendersUSDC withdrawn: instantly up to the pool's idle cash, by request beyond itprincipal
Lender poolBorrowersUSDC lent against their bonds, while more than 15% of the pool stays in cashprincipal
BorrowersLender poolprincipal repaid, by them or from their share of each harvestprincipal
BorrowersLiquidation auctionthe bonds of a loan past the liquidation linebonds
Liquidation auctionLender poolthe proceeds, up to the debtprincipal
Liquidation auctionAuction caller50% of the penaltyprincipal
Liquidation auctionInsurance fund50% of the penaltyprincipal
Liquidation auctionBorrowerwhat is left after the debt and the penaltyprincipal

We price your collateral lower than DexFi does, on purpose.

DIVERGENCE FROM DEXFI
Reading Recoup's oracle on Base and DexFi's displayed price
This gap is deliberate. Recoup prices part of the fund from primary sources, with no DexFi input. The rest is DexFi's vault book, which only DexFi prices, so it takes a 20% haircut: most of the gap. Better to underprice collateral than overprice it.
A live comparison, not a reconciliation. No monthly reconciliation has been published yet. The first will appear here.
CURRENT NAV
Reading NAV from Base
per bond · reading Recoup's oracle on Base
CHECK IT YOURSELF
$ cast call 0xF18ed41cfC1d00A179Eea790a2A4C7d48365681d "navPerBond()(uint256)" --rpc-url https://mainnet.base.org
Reading the oracle's raw word from Base
DexFi displays Reading DexFi's displayed price for the same bond. Recoup prices the fund itself rather than taking that figure on trust; neither number is an error.
is the price all collateral and liquidation maths use. The methodology below shows how it is built.
Borrows pause automatically if NAV is older than 8 days. A single post can move NAV by at most 10%, and by the full 10% only once 24 hours have passed since the price last changed; the limit grows evenly until then. A larger move is held back for at least 12 hours and counts only if it is confirmed in a separate step before it expires.
INSURANCE FUND
Reading the insurance fund from Base
target: 5% of outstanding debt before any cap raise
 
Funded by 10% of harvested yield.
IF AN AUCTION FALLS SHORT
  1. 1The auction's proceeds pay down the debt first.
  2. 2The insurance fund covers what is left, as far as its balance reaches.
  3. 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.
HARVEST CLOCK
NEXT EPOCH HARVEST CAN RUN FROM
Reading the harvest clock from Base
reading EpochHarvester on Base
LAST HARVEST
-
EPOCHS RUN
-
on this deployment
MINIMUM GAP
5 days
Config.MIN_EPOCH_GAP, fixed in the contract

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.

the last harvest, in unix seconds
$ cast call 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6 "lastHarvestAt()(uint256)" --rpc-url https://mainnet.base.org
a dry run of the harvest itself: before the gap it reverts with the time it opens
$ cast call 0x230A5bDECAb42dCb1f7d4850E47fb02B6F3345b6 "harvest()" --from 0x0000000000000000000000000000000000000001 --rpc-url https://mainnet.base.org
THE DEXFI FUND
FUND VALUE
$4,118,283
DexFi's own figure
BONDS MINTED
130,269
USDC DISTRIBUTED
$2,035,211
since June 2025
BOND MINT PRICE
0.0126 ETH
$31.61

DexFi's public fund data as of 2026-10-09.

DEXFI'S OWN FIGURESThese 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.
REALISED WEEKLY YIELD PER BOND - LAST 12 WEEKS
$0.09-61.4% vs avg29 Octlatest week, provisional
12-wk avg $0.23
13 Aug
 
 
3 Sep
 
 
24 Sep
 
 
15 Oct
 
29 Oct

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 PROMISEUSDC 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.

NAV METHODOLOGY
  1. 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 ↗
  2. 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.
  3. 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.
  4. 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
  5. Step 5. Reconcile monthly against DexFi's displayed bond price; publish the reconciliation here.
    not yet published
Recoup is early software in a capped first phase. Nothing on this site is financial advice or an offer of financial services.