Skip to content

The Reinvestment Vault: How coupons become more bonds

14 min readAli Sarp Mestçioğlu

Coupons are the whole point of a bond and the one thing DeFi cannot handle. The Reinvestment Vault keeps the Bond Token a full bond underneath and puts a clean, compounding ERC-20 share on top: every coupon is pooled and swapped into more bonds, so each coupon leaves every share backed by more bonds. Any size compounds, which the traditional bond market structurally cannot offer.

The Reinvestment Vault: How coupons become more bonds — a mint paper loop returning into progressively thicker layers on a deep pine ground.

Bonds pay periodic interest called coupons. That is the whole point of holding them, and it is also exactly what makes them awkward inside DeFi. This post explains how our Reinvestment Vault turns a coupon-paying Bond Token (BT) into a clean, compounding ERC-20, and why the result does something traditional bond markets structurally cannot. The idea underneath is simple: keep the BT a full bond, coupons, calls, amortizations, maturity and all, and put a full abstraction on top of it, the vault share, so the rest of DeFi never has to know any of that.


Full primitive underneath, full abstraction on top

A Bond Token btXXX is an onchain claim on real bonds held one to one under regulated custody. Some Bond Tokens hold a single bond; a basket Bond Token holds several bonds inside one token. Bondi's goal has always been to bring bonds onchain as full primitives, with everything a bond does kept intact, not sanded off. And bonds live eventful lives: coupons arrive on a calendar, issuers call bonds early, amortizing bonds return principal in slices that shrink token supply as they go, and inside a basket a single constituent can mature or be called while the others live on. On top of that, quoted yield to maturity itself assumes every coupon is reinvested, an assumption almost no traditional holder can actually satisfy, because reinvesting a coupon means buying the bond again in a full trading lot, which takes millions of face; the arithmetic is worked below.

Because a Bond Token mirrors the security faithfully, by design and because bonds issued natively onchain will carry the same obligations, it carries all of these obligations onchain: coupon entitlements fixed by snapshots, force-burns against principal on calls and amortizations, KYC-gated claims on real-world proceeds. These are exactly the properties a bond must have, and exactly the properties DeFi protocols do not expect. A lending market wants collateral whose supply and value are one number that never jumps for accounting reasons. A raw Bond Token is not that.

The Reinvestment Vault exists to absorb every one of those quirks and hand DeFi the clean share on top.


Vault shares: vbtXXX

The vault is an ERC-4626 wrapper around a Bond Token. Deposit btXXX, receive vbtXXX: a standard, freely transferable ERC-20 with no admin force-transfer capability, whose supply changes only when holders deposit or exit. Every coupon the underlying Bond Tokens earn is swapped into more Bond Tokens inside the vault, so the Bond Token backing per share rises over time. There is no separate coupon yield and reinvestment yield; they are one stream, a dividend reinvested mechanically.

The share is priced by an oracle as btComponent + stableComponent:

  • btComponent: Bond Token holdings per share times the bond oracle price
  • stableComponent: any pending stablecoin (coupon or call proceeds) per share

The share price reflects the full economic value of the vault at all times, regardless of what form that value takes. When a coupon arrives, the stable component rises immediately; when it is reinvested, the BT component rises equivalently.

In symbols, with b the Bond Tokens per share, P the bond's oracle price and s the pending stablecoin per share, the share price is NAV = b·P + s, and s is zero by default: it holds coupon or call cash only until that cash is reinvested or unwound. Each bond event is one line of algebra on it. A coupon of c per Bond Token adds b·c to s. A call or amortization of a fraction r moves the share by r·b·(P_call − P), positive when the call price is above the market price. Any repricing, including maturity at par, moves it by b·(P′ − P).

A reinvestment at execution price P_x moves it by s·(P/P_x − 1), which the three guards keep above about −4.9% of the amount reinvested. Deposits and redemptions mint and burn shares at the current price and leave it unchanged. The derivation, event by event, is in the docs, written by Bondi intern Berat Karaca.


Anti-gaming by accounting, not timing

Coupon entitlements come from onchain snapshots, and the vault is included in the snapshot like any other holder. The sequence matters, because it is where people look for a free lunch. The bond pays its coupon in the traditional market and its price steps down that day; the cash settles at the broker, comes onchain, and only then is the coupon registered on the Distribution contract, which is the snapshot that fixes who is owed it. In the days between the price step and that snapshot, the Bond Token trades ex-coupon in price but cum-coupon in entitlement: whoever holds it at the snapshot gets paid. That is not a loophole, it is a trade, and the pool prices it. Buyers bid the token above the oracle by up to the coupon until the snapshot, sellers take that premium, and the price falls back to the oracle once the snapshot has passed. Anyone who buys Bond Tokens to deposit into the vault in that window pays the coupon in the price, and anyone who already held them would have received the coupon in their own wallet anyway. Once the coupon is registered on the vault, every new deposit is priced on the vault's Bond Tokens plus the stablecoin it is owed, at the same BT price feed the rest of the system runs on, so registered value cannot be captured by entering late. Anti-gaming comes from full-value accounting and from a market that prices public events, not from timing assumptions.

What the design deliberately leaves open is honest trading around public information. Every coupon schedule is published in advance, and each basket trades in its own onchain liquidity pool, seeded in a tight band either side of the oracle price. If the pool drifts from fair value around a coupon event, anyone can trade the gap: buy cheap in the pool ahead of the vault's reinvestment buy, or arbitrage the pool back toward the oracle. That activity is not a leak, it is the mechanism. The vault captures the coupon for its holders either way, and the arbitrageurs are the ones who keep the public price honest.


The auto-reinvestment flow, and its three guards

Coupons reach the vault through the same distribution path as wallet holders: snapshot, Merkle tree, and a claim that the Bondi relayer executes on the vault's behalf, as it does for every eligible holder. Once the stablecoin lands in the vault, Bondi triggers reinvestCoupon, which executes a swap: stablecoin leaves the vault, Bond Tokens come in. The swap runs against the basket's dedicated liquidity pool, built on Uniswap and its periphery contracts, infrastructure that has settled hundreds of billions of dollars and is among the most battle-tested code in DeFi.

Reinvestment Vault: how a coupon becomes more bonds

Three checks run before and during that swap:

  1. Oracle freshness. Every check below measures against the bond's oracle price, so the reference has to be current: the price feed must be less than 24 hours old. If it is stale, the call reverts.
  2. Pool deviation. The vault asks the pool's quoter what the exact trade size would fill at, and compares that implied price against the bond's oracle price, the dealer-quoted fair value. If the two differ by more than the threshold (default 2.5%), the call reverts. The vault never compounds into a pool that has drifted from the real-world reference.
  3. Quote-to-execution slippage. The vault passes a minimum output of quoterOutput × (1 − slippageThreshold) to the router. If execution delivers fewer Bond Tokens than that floor, the swap reverts, so the fill can never land below what the quote promised. Anyone who pushes the pool before the swap moves the quote away from the oracle and trips the deviation check; anyone who moves it after the quote trips the floor. The swap is MEV-resistant by construction.

Reinvestment Vault: the three guards every reinvestment swap must pass

If any check fails, the coupon simply stays in pendingReinvestment, priced into the share the whole time, and we retry as soon as conditions allow. The vault never trades into a dislocated pool, and nothing is ever forced through at a bad price.


Why this is impossible in TradFi

In traditional bond markets, the minimum tradable lot is typically $200,000 face value: the standard denomination for bonds sold under Rule 144A and Regulation S, which is how nearly every USD bond in the international market reaches investors, with US-registered corporates often in $1,000 or $2,000 pieces instead. Holding a bond in size is one thing; compounding its coupons is another entirely, because each reinvestment purchase must itself clear a lot. Work the single-name case: for a bond paying an 8% coupon in semi-annual installments, one coupon payment clears a $200,000 lot only if you hold about $5,000,000 of face (200,000 / 0.04). Below that, your coupon cannot buy back into the bond that paid it.

Baskets of ten or more bonds make it dramatically worse, because every constituent must clear its own lot separately, so reinvesting a single coupon payment into every underlying bond takes more than $50M of face value. Below those lines, a traditional holder's coupons sit in cash, and the realized return falls quietly below the quoted yield to maturity, whose formula assumes the reinvestment happened.

The Reinvestment Vault pools every holder's coupon proceeds into one aggregated swap, sized so that it clears the pool's guard. A holder with $1,000 compounds on exactly the same terms as a holder with $10M.

Face value needed to reinvest one coupon: TradFi vs the Reinvestment Vault


Calls, amortizations and maturity, without the NAV gap

When an issuer calls a bond, or an amortizing bond pays down principal, which the contracts handle through the same path, all holders are affected pro rata, including the vault. The settlement is atomic: the vault's callable Bond Tokens are burned, call stablecoin arrives, and the vault's accounting updates in a single transaction. The proceeds are recorded as pendingCallStable, so the BT component drops and the stable component rises in the same block. The share price never gaps down, which matters enormously if vbtXXX is posted as collateral: an unaccounted hole in NAV during a call window could trigger liquidations of perfectly healthy positions. Here that window does not exist. The size of the move is known in advance, r·b·(P_call − P) per share: positive when the issuer pays more than the market price, negative when less, and settled atomically in the block the call lands.

Reinvestment Vault: share price holds flat through a bond call

From there, three paths clear the call stablecoin, and the expected one is the unwind: any holder calls claimCallProceeds, burning a chosen amount of shares for call proceeds at the call price plus their pending coupon, paid in stablecoin with KYC or as Principal and Coupon Tokens without it, without exiting the rest of their position. Alternatively the vault can reinvest the proceeds into Bond Tokens via reinvestCallStable, behind the same guards as coupon swaps. And an ordinary redeem always settles a share's full value: its Bond Tokens plus its slice of any pending stablecoin, swapped into Bond Tokens, or if the swap is blocked, paid as stablecoin with KYC or as Coupon and Principal Tokens without it, so nothing is stranded whichever path a holder takes. Nobody is forced down any path: the vault keeps the share fully composable while the Bond Token underneath keeps behaving exactly like the bond it mirrors. That is the design goal in one line, bonds as full primitives, with their entire nature intact.

Maturity is the same accounting taken to its end. When the bond matures, deposits close and each exit redeems its slice of the vault's Bond Tokens for principal, in stablecoin with KYC or as a Principal Token without it: no gap, no event a lending market has to special-case, the collateral simply stops moving. What changes is the economics, not the safety. A share that is all stablecoin earns nothing further while a levered position keeps paying borrow interest, so a holder unwinds when it suits them, and a levered holder should do so promptly.


What the clean share unlocks

Everything bond-like about the Bond Token, the snapshots, the supply-reducing burns, the compliance moves, disappears inside the vault share. What comes out is a plain ERC-20 vault share that compounds. That abstraction is the DeFi building block: anything can price it, hold it, lend against it, or build on top of it. vbtXXX works as collateral in lending markets, which in turn enables leveraged looping strategies on real-world bond yield, something raw coupon-paying tokens could never support cleanly.

Deposit Bond Tokens, hold one share, exit whenever. The bonds do the rest.

Read the full mechanics in thedocs and the share-price math event by event here.

All posts