Skip to main content

Maturity Redemption

When the underlying bond reaches its maturity date, principal is registered for holders and they redeem the principal against their Bond Tokens. This is the standard end-of-life redemption path for the product.

Maturity Redemption Flow Diagram​

Segregated AccountSeg. Account
OnrampOnramp
AdminAdmin
Distribution ContractDistribution
RelayerRelayer
Bond Token HolderToken Holder
1. Currency conversion and transfer
Onramp fiat to stablecoins
Transfer stablecoin proceeds to Distribution
setPrincipal(principalAmt): deduct commission, register net principal
3. Holder redemption
redeemPrincipal(burnAmt): burn Bond Tokens
Payout by verification status
KYC-verified: pay stablecoin
Non-verified: mint Principal Tokens
Later: relayer sweep of remaining wallet holders
redeemPrincipalForUser(user, burnAmt), after the post-maturity delay
KYC-verified: stablecoin. Non-verified: Principal Tokens. Blacklisted: frozen Principal Tokens

How Maturity Redemption Works​

The maturity process combines traditional settlement with onchain principal distribution:


1. Principal repayment
The bond issuer pays principal into the regulated segregated account (the "Cell") administered by Ensuro Re Ltd. at maturity.


2. Currency conversion
Funds are converted from fiat currency to stablecoins where applicable.


3. Final coupon
The bond's last coupon is paid on its maturity date in traditional markets and reaches the Distribution contract days later. It is registered and finalized like every other coupon (see Coupon Distribution), after the maturity date and before principal: the contract refuses a coupon registration once principal is set. The relayer settles the vault leaves at once; wallet holders claim the final coupon in the Bondi frontend together with their principal. The onchain maturity date is never extended for this payment.


4. Onchain principal registration
The Distribution Safe (Admin in the diagram above) calls Distribution.setPrincipal(principalAmt). The contract reverts if the bond has not yet reached maturity (block.timestamp < maturityDate). Commission is deducted using the immutable principalCommissionBps set at deployment time per Bond Token and distributed to Bondi and its configured distribution partners; the net principal amount is stored onchain. Once registered, principalSet = true and principal redemption is immediately live. Any holder can call redeemPrincipal directly on Distribution.


5. Holder redemption
redeemPrincipal is self-service for every wallet holder. Verified holders burn Bond Tokens and receive stablecoin. The final coupon, if not yet claimed, is claimed in the same frontend flow. Holders who are not verified burn Bond Tokens and receive Principal Tokens for the payment amount. A blacklisted wallet's self-service call reverts. Vault share holders (vbtXXX (Reinvestment Vault) and RV shares (Redemption Vault)) follow separate settlement paths through their vault contracts rather than calling Distribution directly. See right below.


Vault Settlement at Maturity​

Vault share holders are not Bond Token holders directly, their positions settle through the vault, not through a direct redeemPrincipal call on Distribution. The diagram below shows both paths once principal is deposited and registered onchain.

AdminAdmin
RelayerRelayer
Distribution ContractDistribution
Reinvestment / Redemption VaultsVaults
Vault Share HoldersShare Holders
Redemption Vault share (RV shares) holders
redeemPrincipalFromDistribution(pendingShares)
redeemPrincipal(pendingShares)
Principal stablecoins → vault
fulfillRedeemRequest(bondiRelayer, assets)
redeem(shares, sharesHolder, bondiRelayer)
Principal stablecoins + accrued coupons
Reinvestment Vault share (vbtXXX) holders
redeem(shares) — routes to principal redemption at maturity
redeemPrincipal(btRedeemed): vault always redeems the holder slice
Principal stablecoins → vault
4. Payout by verification status
KYC-verified: stablecoin for principal and any pending call, and for any coupon not yet reinvested
Non-verified: vault Principal Tokens for principal and any pending call, plus vault Coupon Tokens for any coupon not yet reinvested

Redemption Vault (RV shares): Bondi Admin Safe triggers redeemPrincipalFromDistribution on the vault batch; the vault calls Distribution internally, Admin fulfills the batch, and the relayer redeems each depositor's RV shares. Applies when Bond Tokens are still in the pending batch at maturity, see Redemption Vault outcomes, outcome 3.


Reinvestment Vault (vbtXXX): At maturity, the holder exits through redeem or withdraw on the vault. The vault redeems the holder's Bond Token slice at the Distribution itself. A verified holder receives stablecoin (principal, plus any pending call and coupon). A holder who is not verified receives vault Principal Tokens for the principal and call part, and vault Coupon Tokens for the coupon part. There is no swap, and no Bond Tokens are delivered. See Compliance at Reinvestment Vault Exit.

Maturity Redemption Features​

  • Pro-rata distribution: Each token redeems for its proportional share of registered net principal.
  • Onchain verification: Principal registration and redemptions are recorded onchain.
  • Maturity Redemption Fee: Applied when principal is registered; holders receive net amounts. See Fees.
  • Solvency accounting: Principal is registered onchain with explicit liability tracking. Redemptions are bounded by the registered principal liability, payouts can never exceed the principal set aside for distribution.

Maturity date updates​

If the underlying bond issuer extends the bond's legal maturity in traditional markets before principal is registered onchain, the Admin Safe calls Handler.extendMaturity(newDate) to mirror that date onchain. Bondi does not unilaterally extend maturity, the onchain timestamp is updated only to reflect a change already made by the issuer in the underlying bond markets. Extension is only permitted while principalSet is false, the new date is strictly later than the current maturity, and no bond-call freeze is active. Once principal is registered, maturity is final.


If the issuer instead redeems bonds ahead of the scheduled maturity date, that is an issuer bond call (partial or full) so not handled through maturity redemption. A full call retires the entire outstanding issue at the contractual call price.

Relayer sweep​

The standard path is for holders to self-redeem via redeemPrincipal(burnAmt) on the Bondi frontend. After a set (default: 12 months) delay following maturity, the relayer calls redeemPrincipalForUser(user, burnAmt) for every remaining wallet holder. Two kinds of address are excluded on chain: registered vaults (VaultNotAllowed), whose holders exit through the vault, and the bond's canonical liquidity pool (CanonicalPoolNotAllowed, the address in BondToken.canonicalPool()), whose liquidity providers withdraw their position and redeem the Bond Tokens themselves. The same sweep settles any final-coupon leaves still unclaimed after that delay: stablecoin for eligible holders, Coupon Tokens for everyone else. Verified holders receive stablecoin. Holders who are not verified receive Principal Tokens. A blacklisted wallet receives Principal Tokens that stay frozen. Redemption Vault positions are settled by Bondi Admin Safe promptly after maturity.