Capped, funded separately, paid only to the extent it’s actually funded. FixVault uses a fixed rate instead — see How FixVault Works.
For Circles and FlexVault, there’s no accrual engine anywhere — no per-second interest, no compounding. A participant’s payout is their principal back, plus, once, a flat percentage bonus computed at the moment the Circle or FlexVault plan finishes. Entirely separate from the Circle bucket model above — it’s funded independently via fundRewards(), never drawn from contributions or the Deferred Savings pool. FixVault does not use this mechanism at all; its rate is fixed at deposit instead.
Because the participant bonus only exists for public circles, the resulting ceilings are 10% (public) and 8.5% (private, no participant component). Each component is paid only to the extent it was actually met — missing one forfeits that slice of the reward, never the principal.
| Component | Applies to | Bonus |
|---|---|---|
| Period threshold met | Full rotation completed | +4% |
| Amount threshold met | Contribution amount honoured | +4% |
| Participant threshold met | Public visibility only | +1.5% |
| Organizer discretion | Any, granted manually | up to +0.5% |
FlexVault has no stackable components — it’s a single reward capped at 15% per year, prorated to the plan’s configured duration, earned only on full completion of the schedule. There is no partial credit for a partially completed plan.
fundRewards() (REWARD_FUNDER_ROLE) deposits tokens into an instance’s reward pool ahead of claims. A claim hard-requires the pool to actually hold enough to cover that specific claim before paying it — the claim reverts rather than paying out unfunded value. This applies to Circle and FlexVault completion rewards, and to FixVault’s fixed-rate reward alike.