What a user earns from a Time-Based Incentives campaign comes down to two things: how much eligible balance they hold and how long they hold it for. This page walks through how those two inputs become real reward amounts, with a few worked examples.Documentation Index
Fetch the complete documentation index at: https://docs.boost.xyz/llms.txt
Use this file to discover all available pages before exploring further.
The drip
Every campaign defines a total reward budget and a duration. Together they set the rate at which rewards flow out:startTime to endTime.
The drip doesn’t pause and doesn’t accelerate. The same amount flows every second, regardless of how many users are participating.
Your share of the moment
At any given second, the drip is split across everyone holding eligible balance at that moment, in proportion to how much they hold:Pulling it together
A user’s earnings over time are just the sum of every second’s drip × their share for that second:Worked examples
One user, full duration
Campaign: 100 USDC over 10 days. Alice is the only participant the entire time. She has 100% share at every moment. Alice earns 100 USDC.Two users, same balance
Campaign: 100 USDC over 10 days. Alice and Bob both hold $100, both hold the entire time. They each have 50% share at every moment. Alice earns 50, Bob earns 50.Two users, different balances
Campaign: 100 USDC over 10 days. Alice holds $100. Bob holds $200. Bob’s share is twice Alice’s at every moment. Alice earns ~33.3, Bob earns ~66.7.A late joiner
Campaign: 100 USDC over 10 days, so 10 USDC per day. Alice holds $100 from day 1. Bob joins on day 6 with $100.| Period | Who’s in | Daily split |
|---|---|---|
| Days 1–5 | Alice only | 10 → Alice (50 over 5 days) |
| Days 6–10 | Alice + Bob | 5 → Alice, 5 → Bob (25 each over 5 days) |
An early exit
Same campaign. Alice holds $100 from day 1, then exits on day 6. No one else joins.| Period | Who’s in | Daily split |
|---|---|---|
| Days 1–5 | Alice only | 10 → Alice (50 over 5 days) |
| Days 6–10 | Nobody | 10 per day undistributed |
A note on undistributed drip
The drip never stops, but it can flow into an empty pool. When no one holds eligible balance during a stretch — at the start of a campaign, between participant rotations, or after everyone exits — that period’s rewards aren’t distributed. Undistributed rewards stay in the campaign and are recoverable by the creator at the end of the campaign. Nothing gets lost; it just doesn’t go to a user.What modes change
Most campaign modes shape the inputs to this formula rather than the formula itself:- Minimum Balance — balances below the threshold are treated as 0.
- Deposit Cap — balances above the cap are clamped down.
- New Capital — only the increase over a snapshot counts.
- Deposit Tiers — the qualifying tier’s multiplier is applied to the full balance.
- Fixed APY — replaces the fixed-amount drip with one that flexes to maintain a target APY across whatever balance is in the campaign.
- Capped APY — caps the per-second drip when the natural rate would exceed the ceiling. Held-back budget stays in the pool.
- Capital Cap — stops new balance from counting once the total cap is reached.
- Participant Cap — caps the number of distinct earners.
When rewards land in a user’s wallet
Earnings accrue continuously but they aren’t transferred on every second. Boost takes a reward snapshot on a regular cadence, publishes it on-chain, and from that point the user can claim what’s accrued so far. Snapshots are cumulative — a user can claim now, claim later, or claim everything at once at the end. The drip math above is what determines how much is in their accrued balance at any given moment; the snapshot is what makes it withdrawable. See Campaign Lifecycle for how snapshots fit into the full campaign arc.Keep Exploring
Campaign Modes
The stackable rules that shape who earns and how much.
Campaign Lifecycle
The phases a campaign moves through from setup to claim window close.
How It Works
The plain-English overview of a campaign from end to end.
Glossary
Quick definitions for terms used across the docs.