Coupon Distribution
Bond Token holders receive periodic stablecoin payments corresponding to the underlying bond's coupon schedule through an automated, snapshot-based distribution system.
Overview
Bond Token holders receive onchain coupon distributions corresponding to the issuer's actual coupon payments. Snapshot‑based entitlements ensure fungibility and prevent transfer gaming.
Coupon Flow Diagram
How Coupons Work
Offchain Process
The coupon payment process begins in traditional finance and bridges to onchain distribution:
• Issuer Payment: The bond issuer pays the coupon into Bondi's regulated segregated account
• Currency Conversion: Funds are converted from fiat currency to stablecoins
• Onchain Transfer: Funds are transferred to the Distribution Contract for automated distribution
Onchain Coupon Distribution
Once funds arrive onchain, the coupon is registered and distributed through an explicit, auditable sequence:
1. Gross Transfer: The segregated account (Cell) onramps fiat and transfers the gross coupon amount in stablecoins directly to the Distribution contract. Bondi never touches user funds.
2. Coupon Registration: The Distribution Safe calls Distribution.registerCoupon(amount). Commission is deducted using the immutable couponCommissionBps set at deployment time per Bond Token; the net amount is stored as the coupon's distributable total. A solvency check confirms the contract holds enough stablecoin to cover all registered liabilities.
3. Snapshot: The block number at registration is recorded as the snapshot block used to calculate holder entitlements.
4. Finalization: Bondi's orchestrator backend computes the Merkle tree from the net amount and calls Distribution.finalizeCoupon(couponId, root, blockNumber) to publish the root for claims.
5. Claims: Bondi's relayer automatically calls claimCouponForUser(user, couponId, amount, proof) for each KYC-verified holder — no action required from the holder. Non-verified wallets have their entitlement recorded; it becomes claimable on the Bondi frontend once KYC is completed. As a fallback, holders can always self-claim directly via claimCoupon(couponId, amount, proof) — see Merkle Snapshots & Claims for proof generation.
Net-amount distribution: The Merkle tree is always built from the net (post-commission) coupon amount. The CouponAnnounced event reports (couponId, blockNumber, netAmount, commissionBps) — the commissionBps value reflects the immutable couponCommissionBps set at deployment time per Bond Token. For the exact snapshot and Merkle procedure, see the Merkle Snapshots & Claims specification.
Solvency accounting: v3 tracks registered and paid coupon liabilities onchain. Every claim is bounded by the registered liability — the contract cannot pay out more than was registered.
Relayer-Assisted Claims
Bondi operates a relayer service that submits coupon and incentive claims on behalf of holders. Relayer-submitted claims still verify the holder's KYC status and Merkle proof — the relayer covers the transaction cost but cannot redirect funds. Holders can always claim manually instead.