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. Throughout the flow, Bondi does not take custody of investor proceeds: funds move from the regulated segregated account directly into onchain distribution contracts, and payouts are enforced by contract logic.
Coupon Flow Diagram
How Coupons Work
Off-chain Process
The coupon payment process begins in traditional finance and bridges to onchain distribution:
• Issuer Payment: The bond issuer pays the coupon to the paying agent (or its trustee), who transfers it through the depository into Bondi's regulated segregated account.
• Currency Conversion: Funds are converted from fiat currency to stablecoins.
• Onchain Transfer: The segregated account transfers the funds 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 (Admin in the diagram above) 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 block: The block number at registration is recorded onchain as the snapshot block used to calculate holder entitlements.
4. Holder snapshot: Bondi's orchestrator service snapshots Bond Token holder balances at that block to build the entitlement dataset.
5. Finalization: The orchestrator computes the Merkle tree from the net amount and calls Distribution.finalizeCoupon(couponId, root, blockNumber) to publish the root for claims.
6. Claims: Bondi's relayer automatically calls claimCouponForUser(user, couponId, amount, proof) for each eligible address; no action required from the holder. "Eligible" means a KYC-verified wallet, a whitelisted Bondi vault (Reinvestment/Redemption), or the Admin Safe for compliance-custodied Bond Tokens. For whitelisted vaults, Distribution transfers the coupon proceeds and triggers the vault callback in the same transaction so the vault can register the coupon immediately. For non-eligible wallet addresses, entitlement is recorded and becomes claimable on the Bondi frontend once KYC is completed. As a fallback, holders can always self-claim directly via claimCoupon(couponId, amount, proof).
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.
Relayer-Assisted Claims
Bondi operates a relayer service that submits coupon and incentive claims on behalf of holders. Relayer-submitted claims still verify eligibility and Merkle proof — eligibility is KYC'ed wallets, with whitelisted Bondi vaults treated as allowed exceptions. The relayer covers the transaction cost but cannot redirect funds. Holders can always claim manually instead.