Skip to main content

Coupon and Principal Tokens

When a coupon is distributed or principal comes back, a KYC-verified holder receives stablecoin, and everyone else receives a Coupon Token or a Principal Token for the same amount. Each token is $1 of stablecoin owed by the contract that issued it.

Why they exist​

The Bond Token is a full bond primitive, and it is permissionless to hold and trade. Paying proceeds is regulated. Instead of freezing value in a ledger until someone completes KYC, the value is handed over immediately in a form anyone can hold and trade, while redemption into stablecoin stays with verified holders. Every event settles for everyone at once, so calls and maturities never wait on a missing KYC.

Two tokens​

There are two claim tokens. A Coupon Token is issued for coupons. A Principal Token is issued when principal comes back: an issuer call, an amortization, maturity, or a basket constituent maturing. The two are economically identical, both $1 each, and named separately so coupon cash and principal cash stay distinct in the accounts. Decimals equal the stablecoin's (6 for USDC).

Who receives what​

For a wallet holding the Bond Token, the Distribution contract pays as follows.


EventKYC-verified walletRegistered Bondi vaultNon-verified walletBlacklisted wallet
Coupon (claimCouponForUser or self claimCoupon)StablecoinStablecoin, plus registerCouponCoupon Tokens (ctbtXXX)Coupon Tokens, frozen
Issuer call or amortization (executeCallForUser, during the call freeze)Bond Tokens burned, stablecoin paidBurned, stablecoin, plus registerCallBurned, Principal Tokens (ptbtXXX) for the payment amountBurned, Principal Tokens, frozen
Maturity, self-service (redeemPrincipal)StablecoinThe vault redeems its own slice. See Holder ExitsPrincipal TokensReverts
Maturity, relayer sweep after the post-maturity delay (redeemPrincipalForUser)StablecoinNot allowed (VaultNotAllowed). Vault holders exit through the vaultPrincipal TokensPrincipal Tokens, frozen

A registered Bondi vault always receives stablecoin, never claim tokens, with the registerCoupon / registerCall callback when the relayer settles a coupon or call. Holders of vault shares are paid by the vault, as described on Holder Exits.

Redeeming for stablecoin​

Any KYC-verified holder of the tokens, not only the person who first received them, calls redeemCouponTokens(amount) or redeemPrincipalTokens(amount) on the contract that issued them. Partial amounts are allowed. The call burns the tokens and pays stablecoin 1:1 from the balance that contract set aside at the payout.

Transferring​

Claim tokens transfer freely. A transfer is blocked only in four cases: to the contract that issued them, to the token contract itself, to a registered Bondi vault, and from or to a blacklisted address. A non-verified holder can sell the tokens to a verified buyer, who then redeems them.

One pair per contract​

Each Bond Token's Distribution contract has its own pair, symbols ctbtXXX and ptbtXXX. Each Reinvestment Vault has its own pair, symbols ctvbtXXX and ptvbtXXX. A token can be redeemed only at the contract that minted it. Before maturity, the vault mints from its pair only if a non-verified holder's exit swap cannot clear. It also mints on claimCallProceeds and on an exit after maturity. See Holder Exits.

Blacklisted addresses​

At a regulator's request, an address can be blacklisted on the Bond Token. Coupon Tokens and Principal Tokens follow that list. A blacklisted address still receives its tokens when a payout happens, so a call or a maturity sweep never stalls, but it cannot transfer or redeem them. A holder of the Bond Token's compliance burner role can call complianceBurn on a blacklisted holder's claim tokens, which moves them to the caller.

Contract reference​

Contract functions
  • Distribution and Reinvestment Vault: redeemCouponTokens(amount), redeemPrincipalTokens(amount), couponToken(), principalToken(), totalTokenizedCouponLiability, totalTokenizedPrincipalLiability.
  • Distribution events: CouponTokensIssued, CouponTokensRedeemed, PrincipalTokensIssued (source Call or Maturity), PrincipalTokensRedeemed.
  • Vault events: VaultCouponTokensIssued, VaultPrincipalTokensIssued, VaultCouponTokensRedeemed, VaultPrincipalTokensRedeemed.
  • Transfer errors: TransferToPayerOrToken, TransferToVault.
  • Reinvestment Vault lens: claimTokenBalances(owner) returns the coupon balance, the principal balance, and whether that owner can redeem them.