Tokenized bond coupon payments
What are tokenized bond coupon payments?
Tokenized bond coupon payments are the interest a bond issued as tokens pays its holders on each coupon date, worked out from who held the bond at the record date; banks also call them digital bond coupon payments.
Banks, asset managers and transfer agents that issue or service digital bonds run them on every coupon date, and each payment has to reach the holder of record, in the right amount, under the issuer’s approval policy.
Goldsky starts the run on the coupon schedule, finds the record block, snapshots bondholders and sends each coupon once your custody provider signs it, while the coupon terms, the signing keys and the booking stay with you.
You can build it two ways: a Compose task that snapshots bondholders with a one-time Turbo Pipelines job and pays each coupon, or a Compose task that reads bondholders at the record block from a subgraph register.
Who makes tokenized bond coupon payments?
Banks issuing digital bonds, asset managers with tokenized bond funds, and the transfer agents and paying agents that service them.
How a tokenized bond coupon is paid
The diagram follows one coupon date, from the scheduled start to each payment booked by your back office, and shows who does each step. Your setup may differ.
Ways to pay tokenized bond coupons
On each coupon date the one-time job rebuilds the bondholder list from the chain, while the subgraph keeps the register indexed for the life of the bond.
- Best for
- Coupon dates with nothing running in between
- Best for
- One chain, with a register kept for the bond’s life
| Usual setupOption 1: Snapshot task | Option 2: Subgraph register | |
|---|---|---|
| Best for | Coupon dates with nothing running in between | One chain, with a register kept for the bond’s life |
| Products | ComposeTurboFeeds | ComposeSubgraphsFeeds |
Load the coupon terms
Each coupon’s amount comes from the bond’s terms: the rate, the face value, the day-count rule and the dates.
Set up the coupon dates, record dates and rate from the bond’s terms before the first coupon falls due. A wrong day-count rule pays every holder a slightly wrong amount, which is hard to unwind once paid.
Start on the record date
Handled by Goldsky ComposeCoupons fall due on fixed dates, so the run should start on its own on each record date.
The run starts once the record date has passed, with enough time before the payment date to snapshot, approve and pay. Starting before the record date captures holders who may still sell.
With Goldsky, a Compose task can run on a cron trigger and check the bond’s schedule each time it fires, so the coupon run starts on the record date without anyone starting it.
Set up cron triggers (opens in a new tab)Find the record block
Handled by Goldsky FeedsThe record date is a clock time, but a chain keeps balances by block, so the time has to become a block number.
Decide which moment counts, such as the close of business in the time zone the terms use, then take the last block at or before it on the chain where the token lives. A block from just after the cutoff puts late buyers on the list.
The Feeds blocks endpoint returns the newest block at or before a time when you call it with
Turn a timestamp into a block (opens in a new tab)timestamp_lte,sort=number_descandlimit=1.Snapshot every bondholder at the record block
Handled by Goldsky ComposeHoldings change all the time, so you need a fixed list of who held how much at the record block.
Each balance is rebuilt from every mint, burn and transfer of the token from its first block up to the record block, then summed per wallet. Missing early history understates some balances, and counting blocks after the cutoff pays people who bought late.
With Goldsky, the task can start a one-time Turbo Pipelines job with
Start a Turbo job from a task (opens in a new tab)ctx.turbo, backfill the token’s transfers up to the record block into a table, sum them per holder in SQL, then delete the job.Calculate each coupon
Each holder is owed interest on the face value they held at the record date.
Multiply each holding by the period’s rate under the bond’s day-count rule, then settle rounding so the total matches what the issuer funds. Rounding every amount down without assigning the remainder leaves cash in the paying wallet.
Approve and sign the coupons
Paying out takes a signature from the issuer’s key, held by a custody provider whose policy says who can approve what.
Your signing endpoint holds that policy: it reads the holder and amount from each coupon’s call data, checks them, then asks the paying wallet’s custodian to sign. If the coupon is paid offchain instead, in central bank money with only the bond onchain, the snapshot goes to your paying agent and the payment runs in that system.
Send each coupon
Handled by Goldsky ComposeA signed payment still has to be submitted to the chain and confirmed.
Each coupon goes to the wallet that held the bond at the record date, in the cash token the bond pays in, such as a stablecoin or tokenized deposit. A retry must never pay a holder twice for the same coupon.
Compose can send each coupon through a webhook wallet: it builds a UserOperation (the transaction format smart-account wallets use) and posts it to a signing endpoint you host that calls your custody provider, along with a one-time EIP-7702 authorization the first time it sends on a chain, then submits the signed result.
Sign writes through your own endpoint (opens in a new tab)Settle the coupons on the chain
The coupon counts as paid once its transfer is recorded on the chain.
Each bondholder’s wallet receives the cash token. A payment that failed or was never included still shows as unpaid and has to be picked up before the coupon closes.
Close the coupon
The issuer’s books and the bondholders’ statements have to show each coupon paid.
Your back office books each payment against the bond and the holder, checks the total against the amount due, and follows up any holder left unpaid. Left open, unpaid coupons sit in the paying wallet with no owner on your side.
What to know about snapshotting bondholders with a one-time job
- Nothing runs between record dates: each run starts its own job and deletes it once the holder list is read.
- The list is rebuilt from the chain’s transfers every time, so it doesn’t depend on a register anyone kept in between.
- Summing transfers into balances at the record block is a SQL query in your task, run once the one-time job has finished.
- You write and own the task code; Goldsky hosts it, retries failed calls and logs each one.
Load the coupon terms
Each coupon’s amount comes from the bond’s terms: the rate, the face value, the day-count rule and the dates.
Set up the coupon dates, record dates and rate from the bond’s terms before the first coupon falls due. A wrong day-count rule pays every holder a slightly wrong amount, which is hard to unwind once paid.
Start on the record date
Handled by Goldsky ComposeCoupons fall due on fixed dates, so the run should start on its own on each record date.
The run starts once the record date has passed, with enough time before the payment date to snapshot, approve and pay. Starting before the record date captures holders who may still sell.
With Goldsky, a Compose task can run on a cron trigger and check the bond’s schedule each time it fires, so the coupon run starts on the record date without anyone starting it.
Set up cron triggers (opens in a new tab)Find the record block
Handled by Goldsky FeedsThe record date is a clock time, but a chain keeps balances by block, so the time has to become a block number.
Decide which moment counts, such as the close of business in the time zone the terms use, then take the last block at or before it on the chain where the token lives. A block from just after the cutoff puts late buyers on the list.
The Feeds blocks endpoint returns the newest block at or before a time when you call it with
Turn a timestamp into a block (opens in a new tab)timestamp_lte,sort=number_descandlimit=1.Read every bondholder at the record block
Handled by Goldsky SubgraphsHoldings change all the time, so you need each holder’s balance as it stood at the record block, not today.
The register has to return balances for a past block as well as the latest one. A register that only keeps current balances can’t say who held what on the record date once anyone has traded since.
With Goldsky Subgraphs as the holder register, the task reads each holder’s balance at the record block over GraphQL, the same way the tokenized equities guide has its dividend task read the registry at a record-date block.
Build a tokenized equities registry (opens in a new tab)Calculate each coupon
Each holder is owed interest on the face value they held at the record date.
Multiply each holding by the period’s rate under the bond’s day-count rule, then settle rounding so the total matches what the issuer funds. Rounding every amount down without assigning the remainder leaves cash in the paying wallet.
Approve and sign the coupons
Paying out takes a signature from the issuer’s key, held by a custody provider whose policy says who can approve what.
Your signing endpoint holds that policy: it reads the holder and amount from each coupon’s call data, checks them, then asks the paying wallet’s custodian to sign. If the coupon is paid offchain instead, in central bank money with only the bond onchain, the snapshot goes to your paying agent and the payment runs in that system.
Send each coupon
Handled by Goldsky ComposeA signed payment still has to be submitted to the chain and confirmed.
Each coupon goes to the wallet that held the bond at the record date, in the cash token the bond pays in, such as a stablecoin or tokenized deposit. A retry must never pay a holder twice for the same coupon.
Compose can send each coupon through a webhook wallet: it builds a UserOperation (the transaction format smart-account wallets use) and posts it to a signing endpoint you host that calls your custody provider, along with a one-time EIP-7702 authorization the first time it sends on a chain, then submits the signed result.
Sign writes through your own endpoint (opens in a new tab)Settle the coupons on the chain
The coupon counts as paid once its transfer is recorded on the chain.
Each bondholder’s wallet receives the cash token. A payment that failed or was never included still shows as unpaid and has to be picked up before the coupon closes.
Close the coupon
The issuer’s books and the bondholders’ statements have to show each coupon paid.
Your back office books each payment against the bond and the holder, checks the total against the amount due, and follows up any holder left unpaid. Left open, unpaid coupons sit in the paying wallet with no owner on your side.
What to know about reading bondholders from a subgraph
- The subgraph runs all the time, so the register is ready when a record date comes and also serves statements and reports.
- Your mappings keep each balance, and a mistake in them shows up in every snapshot until it’s fixed and the subgraph reindexed.
- A subgraph indexes one chain, so a token issued on several chains needs one per chain and a merge in your code.
- The task’s payment code, retries and log are the same as with a one-time job.
What you control
- Your team
- Load the coupon terms
- Calculate each coupon
- Close the coupon
- Your providers
- Wallet or custody provider
Questions and answers
What is a bond coupon payment?
A bond coupon payment is the periodic interest a bond pays its holders, set as a rate on the face value and paid on fixed dates. Whoever holds the bond on the record date, shortly before each payment date, receives that coupon. On a tokenized bond the register lives on a chain, so the holders of record come from the token’s balances at the record block, and the coupon can be paid onchain in a cash token such as a stablecoin or tokenized deposit.
Security and deployment
- SOC 2 Type IIIndependently audited security controls.
- Dedicated infrastructureSingle-tenant options for production workloads.
- Data residencyCloud, on-premises or co-located.
More use cases that run corporate actions
- Tokenized money market fund dividends paid as new tokensSnapshot holders and mint each one’s yield as new fund tokens.
- Dividends and splits on tokenized stocksApply dividends and splits to tokenized-stock holders as of the record date.
- Tokenized loan participation paymentsPay out loan-participation shares between banks in tokenized deposits.
- Proxy voting for tokenized securitiesRun proxy votes and corporate-action elections for tokenized holders as of a record date.
Use cases built the same way
Pay tokenized bond coupons with Goldsky
We’ll map it to your systems and show you what Goldsky runs, so your team builds the product, not the pipelines underneath it.