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 pricestableComponent: 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 (once principal is registered onchain, 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): Open to every non-blacklisted holder. Burn a chosen amount of vBT and receive the call slice plus pro-rata pending coupon. A KYC-verified holder receives stablecoin. Everyone else receives vault Principal Tokens for the call slice and vault Coupon Tokens for the coupon part. Does not require a full vault exit. The Bondi frontend shows how much you can unwind before you confirm.
- couponToken(): The vault's Coupon Token (
ctvbtXXX). - 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.
- 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. Any non-blacklisted holder can unwind a slice via
claimCallProceeds; Bondi may reinvest some or all viareinvestCallStablewhen the pool allows; any remainder settles pro-rata onredeem. - pendingReinvestment: Stablecoin queued for the stablecoin→BT swap after a coupon claim.
- pendingStableBalance(): Returns the NAV pending stable (coupon + call buckets); stablecoin reserved for outstanding vault claim tokens is excluded. Used by
VbtVaultOraclefor the stable component of share price. - principalToken(): The vault's Principal Token (
ptvbtXXX). - redeemCouponTokens(amount): Burn vault Coupon Tokens and receive stablecoin 1:1. KYC-verified caller only. Partial amounts are allowed.
- redeemPrincipalTokens(amount): Burn vault Principal Tokens and receive stablecoin 1:1. KYC-verified caller only. Partial amounts are allowed.
- redeemToBTAndStable: KYC-verified-only exit that pays the Bond Token backing as Bond Tokens and only the pending coupon and call stablecoin as stablecoin, with no swap. The standard
redeem/withdrawexit decides the form by whether the swap can clear and the KYC status;redeemToBTAndStablelets a KYC-verified holder pick the stablecoin form on purpose.withdrawToBTAndStableis the same path, also verified-only. - reinvestCallStable(amount): Bondi-triggered (admin) reinvestment that swaps part of
pendingCallStableback into Bond Tokens, using the same swap guards asreinvestCoupon. 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. - totalTokenizedCouponLiability: Stablecoin reserved in the vault for outstanding vault Coupon Tokens. Equals the Coupon Token supply.
- totalTokenizedPrincipalLiability: Stablecoin reserved in the vault for outstanding vault Principal Tokens. Equals the Principal Token supply.
- Slippage threshold (
slippageThreshold): Second of two independent reinvestment swap guards. The vault passesamountOutMinimum = 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 usevbtXXXas collateral. Holding the last good price keeps collateral valuation continuous through temporary feed downtime.