Redemption
This chapter describes the principal redemption process at bond maturity. During redemption, investors receive the principal for the bonds they hold, the corresponding bond tokens are burned on-chain, and the bond issuance is closed once the full issued amount has been burned.
Business Flow
-
Maturity and Principal Payday:
- Redemption starts when the bond reaches its principal payday, which is generated for the bond
maturityDate. - The Core Payment Service processes due
PRINCIPALpaydays and prepares the settlement of the full principal amount. - Coupon settlement remains separate from redemption. Coupon payments distribute interest only and must not trigger token burning.
- Redemption starts when the bond reaches its principal payday, which is generated for the bond
-
Holder Resolution and Payment Creation:
- The Core Payment Service queries the Indexer for the current bond issuance, the latest finalized checkpoint, and the eligible investors holding the bond.
- For principal redemption, the payout amount for each investor is calculated as
denomination * bondCount. - The service creates one issuer settlement payment for the aggregate principal amount and one buyer settlement payment for each investor.
-
Fiat Settlement via PSP:
- The issuer is instructed to fund the aggregate principal payment through the Payment Service Provider (PSP).
- Once the PSP confirms receipt of the issuer funds, the Core Payment Service validates the payment and authorizes investor payouts.
- After the PSP confirms that investor payouts were sent, the corresponding buyer settlement payments move to
SENT.
-
On-Chain Token Burn:
- Token burning happens only after investor principal payouts are confirmed as sent by the PSP.
- For a real buyer settlement payment transition from
AUTHORISEDtoSENT, the Core Payment Service callsburnBondBatch(isin, version, froms, amounts, FINAL_SETTLEMENT). fromscontains investor wallet addresses andamountscontains the number of redeemed bonds for each investor.- Repeated PSP callbacks must not trigger duplicate burns for payments that were already settled.
-
Bond Closure:
- The blockchain emits a
BondBurnedevent after tokens are burned. - The Blockchain Event Service forwards the event to the Registry Service as
BondRegistryEvents.BOND_BURNED. - The Registry Service increments
burned_bond_countfor the bond identified byisin. - Once
burned_bond_count == bond_count, the bond is set toBURNEDandbondRegistry.closeBond(isin, version)is called on-chain.
- The blockchain emits a