Dynamic Rate Adjustment
While APR and APB provide static reward rates, the actual effective rate for any given NFT level fluctuates based on where stakers choose to allocate their capital. This is the dynamic rate adjustment mechanism.
The Share Distribution Problem
Without dynamic adjustment, stakers would naturally cluster around a "sweet spot" level — one with the best risk-reward ratio — leaving other levels under-supplied. This concentration:
- Reduces overall protocol utility (fewer level options for new stakers)
- Creates volatility at popular levels (many stakers competing for the same rewards)
Scalar Redistribution
The MoeTreasury maintains a _shares accumulator per NFT level — the total denomination of APowerNfts staked at that level. The scalar for level
Where
- Maps below-average share levels to scalars > 1 (boost)
- Maps above-average share levels to scalars < 1 (penalty)
- Ensures the weighted sum of all scalars equals the number of active levels (preserving total reward budget)
Practical Effect
A staker at level 30 with 1,000,000 shares when the average level has 500,000 shares might see their effective APR reduced by ~20%. Conversely, if level 30 is under-supplied, they receive a bonus.
This rewards contrarian staking — choosing levels that others have neglected — and naturally distributes capital across the entire tier spectrum.
Integrator Mechanism
Rate changes cannot be applied instantly, or stakers could manipulate the timing. The integrator library enforces time-weighted smoothing.
How It Works
The integrator maintains a linked list of (timestamp, rate) tuples. When the rate changes:
- The area under the old rate is accumulated
- A new entry is appended at the current timestamp
- Future reward calculations use the area-weighted average of all entries
Mathematically, the effective rate over period
This prevents flash-staking — a staker cannot briefly enter at a high rate, then have that rate persist after they leave. The integrator ensures that rewards reflect the duration-weighted average of the rates during the stake period.
Reparametrization Limits
The underlying APR and APB polynomial parameters themselves can be changed, but only within strict bounds enforced by the Rpp (Rug Pull Protection) contract:
| Constraint | Limit |
|---|---|
| Value multiplier | 0.5× to 2.0× of current value |
| Time between changes | Minimum 1 month |
| Array validation | Length 4; div and mul non-zero |
These limits prevent governance from making extreme or frequent parameter changes, protecting stakers from sudden rate collapses.