Skip to main content

Vault Shares (vbtXXX)

vbtXXX shares follow the standard ERC-4626 accounting model and entry/exit interfaces:

Deposit: deposit(btXXX, receiver): transfer Bond Tokens into the vault, receive vault shares proportional to the current share price.


Redeem: redeem(shares, receiver, owner): burn vault shares. See Holder Exits. withdraw follows the same exit rules.


Share price and anti-gaming: Vault Bond Token oracles price vbtXXX shares as btComponent + stableComponent:

  • btComponent: Bond Token holdings per share × bond oracle price
  • stableComponent: pending stablecoin (coupon + 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 stablecoin component rises immediately; when it is reinvested into Bond Tokens, the BT component rises equivalently. A new depositor entering while a coupon or call is pending pays an oracle-adjusted price that already includes the pending value; there is no window to enter, capture proceeds, and exit at a windfall. Anti-gaming comes from full-value accounting at entry and exit, not from timing assumptions.


Deposit window: New deposits are accepted at all times unless the vault has been permanently closed (post-maturity, or after a full bond call that burns all Bond Tokens in the vault), or while an issuer bond call freeze is active on the underlying Bond Token (see Issuer Bond Calls).

Contract functions and parameters
  • claimCallProceeds(vbtToBurn): KYC-gated. Burn a chosen amount of vBT and receive call stable at the contractual call price for those shares, plus pro-rata pending coupon on the amount burned. Does not require a full vault exit. The Bondi frontend shows how much you can unwind before you confirm.
  • currentCallRewindEligible(): View function returning how much vBT can still be burned for call proceeds at the contractual call price. The Bondi frontend uses this to show your unwind limit.
  • entitledStable: Stablecoin recorded for a non-KYC-verified holder who exited when the swap of their pending coupon/call proceeds into Bond Tokens could not execute (it can be neither delivered as Bond Tokens nor paid as distribution stable to a non-KYC-verified wallet). Claimable via claimEntitledStable() once KYC-verified, or claimEntitledStableAsBT() (Bond Tokens). Never admin-sweepable.
  • exchangeRate(): totalAssets() × 1e18 / totalSupply(): Bond Token backing per Vault Bond Token.
  • Oracle deviation threshold (oracleDeviationThreshold): First of two independent reinvestment swap guards. Compares the Uniswap quoter's implied price for the exact trade size against the oracle price; if deviation exceeds the threshold (default 2.5%), the swap call reverts. Detects a pool that has moved far from the real-world reference price. Both thresholds are constructor parameters, defaulting to 250 bps each in the Bondi ignition deployment.
  • pendingCallStable: Stablecoin from bond call settlements, held in the vault until it is unwound, reinvested, or paid out on exit. Bondi expects it to move quickly after a call. KYC holders unwind a slice via claimCallProceeds at the contractual call price; Bondi may reinvest some or all via reinvestCallStable when the pool allows; any remainder settles pro-rata on redeem.
  • pendingReinvestment: Stablecoin queued for the stablecoin→BT swap after a coupon claim.
  • pendingStableBalance(): Accounting view of in-vault stable owed pro-rata to active shareholders, pendingCallStable plus active pending coupon. Excludes totalEntitledStable (already allocated to specific wallets, not pool NAV). Used by VbtVaultOracle for the stable component of share price.
  • redeemToBTAndStable: KYC-verified-only exit that pays Bond Token backing plus pending coupon/call stablecoin directly as stablecoin, with no swap. The standard redeem/withdraw exit decides the form (Bond Tokens vs. stablecoin) by whether the swap can clear and the KYC status; redeemToBTAndStable lets a KYC-verified holder pick the stablecoin form on purpose.
  • reinvestCallStable(amount): Admin/relayer function that swaps part of pendingCallStable back into Bond Tokens, using the same swap guards as reinvestCoupon. Remaining holders benefit from more Bond Token backing per share. Bondi may reinvest all, some, or none depending on pool liquidity and what it communicates ahead of the call.
  • Slippage threshold (slippageThreshold): Second of two independent reinvestment swap guards. The vault passes amountOutMinimum = quoterOutput × (1 − slippageThreshold) to the Uniswap router; if actual execution delivers fewer tokens than that floor, the swap reverts. Anchored to the quoter output (not the oracle price) so it independently catches sandwich attacks and execution shortfalls between quote time and fill time. Default 2.5%.
  • VbtVaultOracle: Morpho-compatible oracle for vbtXXX. Prices shares as (btComponent + stableComponent) × 1e18. If the bond price feed goes briefly stale, it holds the last valid bond price instead of falling back to a stable-only valuation, because dropping the Bond Token portion to zero would make the share appear almost worthless for the duration of the outage and trigger needless liquidations of otherwise-healthy positions in lending markets that use vbtXXX as collateral. Holding the last good price keeps collateral valuation continuous through temporary feed downtime.