The core contract carries two reward programmes inherited from the reference design: token incentives for trading volume and cashback on creator fees. Both are present in the deployed code, both are inert at launch, and both are switched on by governance actions that emit events.
Token Incentives#
When enabled, the core records each trader's quote volume per day in a volume accumulator and pays a daily supply of an incentive coin in proportion to that volume.
| Element | Detail |
|---|---|
| Schedule | adminUpdateTokenIncentives(startTime, endTime, secondsInADay, dayNumber, tokenSupplyPerDay, incentiveCoin) by the admin |
| Funding | fundTokenIncentives(amount) moves the incentive coin from the funder into the contract's incentive ledger; the ledger is tracked, so stray transfers do not count |
| Earning | with trackVolume on, each curve trade adds the trader's quote volume to the current day's accumulator |
| Claiming | claimTokenIncentives(user) pays the user's unclaimed share for completed days; anyone can trigger a claim for a user, the payout always goes to the user |
| Records | initUserVolumeAccumulator, syncUserVolumeAccumulator, closeUserVolumeAccumulator manage a user's record; closing pays out any native cashback the record holds |
The programme pays only what it holds: a claim larger than the incentive ledger reverts rather than drawing on anything else.
Cashback#
A cashback coin is one whose creator share is returned to the buyer instead of paid to a creator. On such a coin each buy credits the buyer's cashback balance with the creator fee of that trade, in the trade's quote asset.
| Element | Detail |
|---|---|
| Designation | a coin is a cashback coin from creation; the flag requires the protocol's cashback setting to be on |
| Accrual | the creator share of each buy credits cashbackBalance(buyer, quoteAsset) |
| Claiming | claimCashback(user, quoteAsset) pays the balance to the user; anyone can trigger it |
| Launch state | the cashback setting is off, so no cashback coin exists |
Volume Accumulator Views#
globalVolumeAccumulator() and userVolumeAccumulator(user) expose the counters that the programmes read: total and unclaimed incentive coins, the current day's volume and the last update time. They are read-only and cost nothing to query.
Switching On#
Enabling either programme is a governance action by the protocol admin (see Roles and Governance): setTrackVolume, adminUpdateTokenIncentives (which emits AdminUpdateTokenIncentives) and toggleCashbackEnabled. The flags are readable at any time through the core's global() view, and the app's Parameters page shows them. This page is updated when a programme is turned on, with its schedule.