Tokenized money market fund dividends paid as new tokens
What are tokenized money market fund dividends?
Tokenized money market fund dividends are the income a money market fund pays to holders of its tokenized shares as extra tokens, each holder’s share worked out from their balance at the record time.
Because the fund keeps each token at $1, income can’t raise the price, so it arrives as more tokens, as it does in tokenized Treasury funds that keep a $1 token.
Asset managers and their transfer agents run a distribution every period, and each holder’s new tokens have to match both their balance at the record time and the income per share the fund administrator declared, or the token register stops agreeing with the fund’s books.
With Goldsky, you can run each distribution as a Compose task that snapshots holders with a one-time Turbo Pipelines job and mints their dividends, or as a Compose task that reads holders at the record block from a subgraph register.
Who pays tokenized money market fund dividends?
Asset managers running tokenized money market and Treasury funds, and the transfer agents that keep their registers.
How tokenized money market fund dividends are paid as new tokens
The diagram follows one distribution, from the income your fund administrator calculates to the mints recorded in your books, and shows who does each step. Your setup may differ.
Ways to pay tokenized money market fund dividends as new tokens
For each distribution, the one-time job rebuilds every holder’s balance from the chain and leaves nothing running afterwards; the subgraph keeps the register indexed all the time, so the task only queries it at the record block.
- Best for
- Periodic distributions, with no register to maintain
- Best for
- One chain, with a register you also use for reporting
| Usual setupOption 1: Snapshot task | Option 2: Subgraph register | |
|---|---|---|
| Best for | Periodic distributions, with no register to maintain | One chain, with a register you also use for reporting |
| Products | ComposeTurboFeeds | ComposeSubgraphsFeeds |
Set the income per unit
Every holder’s new tokens are worked out from one figure: how much income the fund earned for each unit in the period.
Your fund administrator calculates the period’s net income per unit and the record time it applies to. If that figure is revised after minting starts, some holders are paid on the old number and the fund’s supply no longer matches its books.
Find the record block
Handled by Goldsky FeedsThe record time 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 holder 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.Work out each holder’s new tokens
Income is shared pro rata, in proportion to each holder’s units, and the new tokens have to add back up to the income declared.
Convert each holder’s income into units at the fund’s price per unit, by rules your fund documents set. Rounding has to be settled in those rules: if every share is rounded down and the remainder never assigned, the minted total falls short of the distribution.
Mint each holder’s yield
Handled by Goldsky ComposeThe distribution happens when the new fund tokens are created in each holder’s wallet.
Each mint is signed by whoever holds mint permission on the token, under an approval policy: your own key, or your tokenization platform minting from the amounts you send it. A retry must never mint twice to the same holder for the same period.
Compose can send each mint through a webhook wallet, which has a signing endpoint you host sign it as a UserOperation (the transaction format smart-account wallets use), plus a one-time EIP-7702 authorization the first time it sends on a chain, then submits it; or it can pass the amounts to your platform’s API with
Sign writes through your own endpoint (opens in a new tab)fetch. If the task restarts, calls that already succeeded aren’t made again.Settle the mints on the chain
The chain is the shared record, so the distribution counts once the mints are in blocks.
Each holder’s balance grows by their share. Until enough blocks sit on top of a mint, a reorg (the chain replacing its newest blocks) can still drop it, so check each mint again before the period closes.
Record the distribution
The fund’s books have to show the income declared and the new units issued for it, holder by holder.
Tie each mint’s transaction to the snapshot, the income per unit and the approval. The units minted should equal the declared income at the price per unit; any difference is a break to explain before the period closes.
What to know about snapshotting holders 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.
Set the income per unit
Every holder’s new tokens are worked out from one figure: how much income the fund earned for each unit in the period.
Your fund administrator calculates the period’s net income per unit and the record time it applies to. If that figure is revised after minting starts, some holders are paid on the old number and the fund’s supply no longer matches its books.
Find the record block
Handled by Goldsky FeedsThe record time 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 holder 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)Work out each holder’s new tokens
Income is shared pro rata, in proportion to each holder’s units, and the new tokens have to add back up to the income declared.
Convert each holder’s income into units at the fund’s price per unit, by rules your fund documents set. Rounding has to be settled in those rules: if every share is rounded down and the remainder never assigned, the minted total falls short of the distribution.
Mint each holder’s yield
Handled by Goldsky ComposeThe distribution happens when the new fund tokens are created in each holder’s wallet.
Each mint is signed by whoever holds mint permission on the token, under an approval policy: your own key, or your tokenization platform minting from the amounts you send it. A retry must never mint twice to the same holder for the same period.
Compose can send each mint through a webhook wallet, which has a signing endpoint you host sign it as a UserOperation (the transaction format smart-account wallets use), plus a one-time EIP-7702 authorization the first time it sends on a chain, then submits it; or it can pass the amounts to your platform’s API with
Sign writes through your own endpoint (opens in a new tab)fetch. If the task restarts, calls that already succeeded aren’t made again.Settle the mints on the chain
The chain is the shared record, so the distribution counts once the mints are in blocks.
Each holder’s balance grows by their share. Until enough blocks sit on top of a mint, a reorg (the chain replacing its newest blocks) can still drop it, so check each mint again before the period closes.
Record the distribution
The fund’s books have to show the income declared and the new units issued for it, holder by holder.
Tie each mint’s transaction to the snapshot, the income per unit and the approval. The units minted should equal the declared income at the price per unit; any difference is a break to explain before the period closes.
What to know about reading fund holders 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
- Work out each holder’s new tokens
- Record the distribution
- Your providers
- Fund administrator
Questions and answers
What is a rebase token?
A rebase token is one whose contract changes every holder’s balance in place to pass on yield or track a price, without any transfer or mint to the holder. Tokenized funds that pay yield as new tokens do the opposite: each holder receives a separate mint for their share, so every distribution is a transaction the fund can tie to a holder, a record date and the income declared. The fund’s documents say which method a token uses.
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
- Dividends and splits on tokenized stocksApply dividends and splits to tokenized-stock holders as of the record date.
- Tokenized bond coupon paymentsPay bond coupons to holders at 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.
Pay tokenized money market fund dividends as new tokens 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.