Skip to main content

Called Bonds in the Reinvestment Vault

When the bond issuer exercises a call provision, all Bond Token holders are affected pro-rata: including the Reinvestment Vault. Without careful handling, a bond call would create a window where the vault's Bond Tokens are burned but their equivalent stablecoin proceeds have not yet been reflected in the vault's accounting.

info

For lending protocols using vbtXXX as collateral, any unaccounted gap in NAV during that window could trigger unnecessary liquidations of otherwise-healthy positions. The Reinvestment Vault eliminates this gap entirely.

The general issuer bond call flow (registration, full Bond Token freeze, snapshot, and relayer execution) applies to all holders. See the Issuer Bond Call Flow in Redemption. For how whitelisted vaults are settled differently from individual Bond Token holders, see Vault Settlement on Bond Call.

Why Unwinding Exists

A bond call shrinks the vault's Bond Token holdings and replaces that slice with stablecoin that sits idle (earning nothing) until it is either reinvested or paid out. Some holders are happy to stay fully invested and let that stablecoin eventually compound back into Bond Tokens or let other unwind and keep their full exposure. Others, for example some holders using vbtXXX as collateral on a lending market like Morpho, may want that cash now: to repay debt, to delever, or simply to take the proceeds without giving up the rest of their position.


claimCallProceeds gives holders that choice without asking anyone else to pay for it. A holder burns a chosen amount of their own vBT and receives the matching call stablecoin at the contractual call price. That vBT is removed from supply and call proceeds are paid out, so the Bond Tokens still backing every remaining share stay exactly as they were. Unwinding only clears idle stablecoin the holder chose to take as cash; it does not shift Bond Token exposure or coupon entitlement onto anyone else.


Bondi announces a call and the resulting unwind opportunity through all its communication channels: holders who want to unwind their call slice can do so on the Bondi frontend. Bondi expects unwinding to happen promptly after a call; no special monitoring of the vault is required.

How Called Bond Settlement Works for the Reinvestment Vault

1. Relayer execution
The relayer calls Distribution.executeCallForUser(callId, vault, expectedBalance). Distribution identifies the vault as a whitelisted Bondi vault.


2. Atomic settlement
The vault's callable Bond Tokens are burned, call stablecoin proceeds are transferred to the vault, and the vault's registerCall callback is triggered in a single transaction. The vault records the stablecoin in pendingCallStable. Because the BT burn and stablecoin receipt happen atomically, the oracle's BT component and stable component update in the same block, the share price is never artificially depressed.


3. Exit paths for call proceeds
After registerCall, three paths exist for accessing pendingCallStable:

  • Pro-rata exit via redeem(shares): Burn vault shares and receive pro-rata Bond Token backing plus pro-rata pendingCallStable and any pending coupon stablecoin. Settlement follows Compliance at Reinvestment Vault Exit. After a full bond call (callRatioBps == 10000), totalAssets() == 0 so Bond Token output is zero; use redeem, not withdraw(assets): withdraw reverts with InsufficientBondTokenForWithdraw when there are no Bond Tokens to back the asset amount.

  • Direct claim via claimCallProceeds(vbtToBurn) (KYC-gated): Burn a chosen number of vBT (up to what the Bondi frontend shows as available) and receive call stable at the contractual call price for those shares, plus pro-rata pending coupon on them, without exiting the full vault position. Remaining vBT keeps its Bond Token backing and continues earning future coupons. Useful for holders using vBT as collateral (e.g. Morpho) who need call cash without burning their whole position.

  • Admin/relayer reinvestment via reinvestCallStable(amount): Swap a portion of pendingCallStable back into Bond Tokens via the same oracle deviation and slippage guards as coupon reinvestment. Remaining holders benefit through a higher Bond Token NAV per share. This is coordinated by Bondi ops, not triggered automatically, Bondi decides per call how much to reinvest versus leave for holders to access via claimCallProceeds or redeem, based on pool liquidity.

Share Price Continuity Through All Lifecycle Events

VbtVaultOracle always prices vbtXXX shares as btComponent + stableComponent. This design means the share price accounts for every form of value in the vault: whether that value is held as Bond Tokens, pending coupon stablecoin, or call proceeds. No lifecycle event creates a gap:

  • Pending coupon reinvestment: stableComponent rises immediately when the coupon is registered. New depositors pay an oracle-adjusted entry price that includes the pending value. No gaming window exists.
  • Bond call settlement: btComponent drops (fewer Bond Tokens) and stableComponent rises (pendingCallStable added) in the same block. No artificial NAV drop triggers liquidations. Yet a slight net price shift can happen, reflecting the call price vs. the prevailing oracle price rather than an accounting gap.
  • Maturity: deposits close; exit follows Compliance at Reinvestment Vault Exit. See also Vault Settlement at Maturity.
  • Oracle staleness: if the live bond price feed is temporarily unavailable, VbtVaultOracle uses the last valid recorded bond price rather than dropping to stable-only valuation. This avoids artificial liquidation pressure from oracle downtime while preserving continuous collateral pricing.