Skip to main content
Every campaign moves through a predictable arc. Knowing which phase a campaign is in — and what’s possible at that phase — helps with launch planning, in-product UI, and answering user questions when something looks off. The arc is the same for every campaign:
1

Configured

Setup is done, the campaign is on-chain, but earning hasn’t started yet.
2

Active

The campaign is live. Users earn continuously, claims open as snapshots publish.
3

Ended

Earning stops, but the system is still settling — final snapshots roll up the last rewards.
4

Finalized

The campaign is settled. Unspent budget can be recovered. Users keep claiming.
5

Closed

The claim window has expired. Anything still unclaimed can be reclaimed by the creator.
A campaign can also leave the main arc early in a couple of ways, covered further down.

Phase by phase

Configured

The campaign config is committed, the on-chain contract is deployed, and the reward budget is locked in — but the campaign’s startTime hasn’t hit yet. Nothing user-facing happens. This is the team’s window to:
  • Review the live config one last time.
  • Seed any UI pieces that surface the campaign.
  • Coordinate launch comms.
If the team needs to change anything material — eligibility, targets, modes — the campaign has to be cancelled and re-launched. Configuration is locked at deploy.

Active

startTime has passed, endTime hasn’t, and the budget hasn’t been fully paid out (see Automatic early end below). Users earn continuously while their position is eligible. What’s happening behind the scenes:
  • Rabbithole watches the chain for relevant events and updates earnings as positions change.
  • A reward snapshot publishes on a regular cadence so claims become available shortly after the campaign goes live.
  • The team can watch the campaign run on rabbithole.gg — TVL, participants, distributed rewards, and live leaderboard stats are all surfaced there.
If the team needs to top up or end the campaign early, this is the only window for either. See Mid-flight adjustments below.

Ended

endTime has passed, the budget has run out, or the campaign was ended early (see Mid-flight adjustments). Earning stops for everyone, but the campaign isn’t fully wrapped up yet. A few things are still in motion:
  • The final reward snapshot rolls up the last few hours of earnings.
  • Users keep claiming on the same schedule as during the active phase.
  • The team can no longer change anything about the campaign.
This phase is short — usually a few hours — and ends as soon as the operator settles the final state.

Finalized

The final merkle snapshot is published and locked. Total distributed rewards are confirmed. At this point, the creator can recover any unspent budget. That can include:
  • Rewards from periods when no one was participating.
  • Rewards held back by Capped APY when the natural rate would have exceeded the cap.
  • Forfeited rewards from broken cliffs (once Cliff is live).
Claims continue to work for the rest of the claim window.

Closed

The claim window expires. Standard campaigns run a 60-day claim window measured from finalization, but this is configurable per campaign. Once the window closes:
  • New claims stop being accepted.
  • Anything still unclaimed becomes recoverable by the creator through the same withdraw flow.
  • The campaign is fully wound down.

Mid-flight adjustments

While a campaign is active, it can be topped up to run longer. It can also leave the active phase before its scheduled endTime in two ways: early termination or an automatic early end.

Topping up

A top-up adds funds to a live campaign so it keeps paying out for longer.
  • The rate stays the same. Rewards keep paying out at the campaign’s daily rate, so a top-up extends how long the campaign runs. It doesn’t raise the APY.
  • The fee matches the original deposit. It comes out of the amount added, at the rate agreed when the campaign was created. See Pricing.
  • The minimum is one day of rewards. A top-up must cover at least 24 hours at the campaign’s daily rate, after the fee.
  • Top up before the budget runs out. Once a campaign runs out it ends, and it is usually finalized within minutes. A finalized campaign can’t be topped up; continuing means launching a new one.
  • The latest end date doesn’t move. Each campaign has a latest end date, set at launch and at most a year out. Funds that can’t be paid out before then stay in the campaign and are recoverable at finalization.
Top-ups come from the same budget that funded the campaign, and the Rabbithole team handles them like the original deposit. Raise one with the team while the campaign still has runway.

Early termination

Creators (or the protocol admin in emergencies) can end a campaign before its scheduled endTime.
  • Earning stops at the moment of cancellation.
  • Already-accrued rewards stay claimable on the normal schedule.
  • The campaign skips straight to settlement: ended → finalized → claim window.
Use this when goals shift, when a partner relationship changes, or when something in the underlying market makes the campaign no longer relevant.

Automatic early end

A campaign ends as soon as its reward budget is fully paid out, even if endTime hasn’t been reached. This happens in two cases. Campaigns that can be topped up pay out at a set daily rate, so the budget lasts budget ÷ daily rate and the campaign ends when it runs out, unless it is topped up first. Quiet periods and Capped APY slow the payout rather than holding budget back, so they only make the campaign run longer, never shorter, up to its latest end date. If at least one eligible position is held throughout and there’s no cap, the end date is known from launch and only moves with top-ups. A Fixed APY campaign ends early when participation is higher than the team anticipated. The budget drains faster than the original schedule, and the campaign wraps up the moment the last reward is distributed. On other campaigns, modes don’t trigger this. Capped APY never moves the schedule there: when the cap binds, less reward gets distributed per second, and the held-back budget stays in the pool as recoverable funds at finalization. An automatic early end follows the same flow as any other ending: status flips to ended, the final snapshot rolls up the last earnings, and the campaign moves into Finalized once the operator settles. The claim window still runs from endTime, so users get the full window, measured from the latest end date rather than from when the budget ran out.

What can’t change

Once a campaign launches, the rules are locked:
  • Reward token
  • Targets (which positions count)
  • Eligibility (open, allowlist, verification)
  • Modes (caps, tiers, fixed APY, etc.)
  • Reward rate and schedule. A top-up extends how long the budget lasts, but not the latest end date
Any meaningful change requires a new campaign.

What users see at each phase


What teams do at each phase


Recoverable funds

When a campaign winds down, leftover budget can show up in a few places. All of it is recoverable by the creator through the same withdraw flow:
  • Undistributed budget — periods when no one was participating, so no rewards were earned.
  • Throttled rewards — when Capped APY held the rate below its natural value, the saved budget stays in the pool.
  • Forfeited rewards — when Cliff ships, rewards from broken cliffs flow back here.
  • Budget past the latest end date — on a campaign that can be topped up, anything it couldn’t pay out before its latest end date.
  • Unclaimed rewards — after the claim window closes, anything users didn’t pull is returned to the creator.
On a campaign that can be topped up, quiet periods and Capped APY don’t leave budget behind; they make the campaign run longer instead. Nothing gets stuck. Everything that isn’t paid out to a user eventually flows back.

Keep Exploring

Reward Calculation

How eligible balance and time held translate into rewards.

Campaign Modes

The stackable rules that shape who earns and how much.

Launch a Campaign

What it looks like to bring a campaign live with the Rabbithole team.

Glossary

Quick definitions for terms used across the docs.