Incentives and cashback
Anyone can fund a weekly campaign for one market in any ERC-20: rewards for its liquidity providers, cashback for its traders, or cashback for referred traders and their referrers. Each week's amounts are computed from public chain data and published as one Merkle root.
Campaign kinds
| Kind | Who earns | How much |
|---|---|---|
| LP rewards | The market's position owners | The week's budget, split by in-range liquidity (hourly minimum × value, as in Points) |
| Trading cashback | Every trader of the market | `rateBps` of the LP fees they paid that week |
| Referral cashback | Traders bound to a referrer (Referrals contract) and the referrer | `rateBps` to the trader, `referrerBps` to the referrer |
Cashback is exact and scaled down pro rata only when a week's total is above the budget. Rates are at most 90% of the LP fees (checked on-chain), and each trade's cashback (trader and referrer together) is also capped at 90% of the protocol fee it paid: an LP fee can come back to a trader who holds the liquidity the trade goes through, the protocol fee never does, so trading or self-referring only for cashback always loses money. Cashback pays in one of the market's two tokens. Fees come from each Swap event (input × LP fee), the trader is the transaction sender, and swaps by our own contracts and team wallets never earn.
Lifecycle
createCampaign(market, token, perWeek, start, weeks, kind, rateBps, referrerBps)pulls the whole amount (fee-on-transfer tokens are refused) plus an optional fee (0 at launch, cap 10%).- After each week (Thursday 00:00 UTC) the publisher posts one root for every campaign; claims open 24 hours later. The guardian can cancel a wrong root.
- What nobody earned goes back to the funder through the root.
stopCampaignrefunds every week that has not started. reclaimreturns what is still unclaimed 26 weeks after a week ends.
Fund on Incentives; claim on Portfolio or with the SDK (fetchIncentiveClaims + buildClaimIncentives).