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.
| Event | KYC-verified wallet | Registered Bondi vault | Non-verified wallet | Blacklisted wallet |
|---|---|---|---|---|
Coupon (claimCouponForUser or self claimCoupon) | Stablecoin | Stablecoin, plus registerCoupon | Coupon Tokens (ctbtXXX) | Coupon Tokens, frozen |
Issuer call or amortization (executeCallForUser, during the call freeze) | Bond Tokens burned, stablecoin paid | Burned, stablecoin, plus registerCall | Burned, Principal Tokens (ptbtXXX) for the payment amount | Burned, Principal Tokens, frozen |
Maturity, self-service (redeemPrincipal) | Stablecoin | The vault redeems its own slice. See Holder Exits | Principal Tokens | Reverts |
Maturity, relayer sweep after the post-maturity delay (redeemPrincipalForUser) | Stablecoin | Not allowed (VaultNotAllowed). Vault holders exit through the vault | Principal Tokens | Principal 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(sourceCallorMaturity),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.