Skip to content

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 is computed as:

scalar=f(sharestotalShares)

Where f is a redistribution function that:

  • 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:

  1. The area under the old rate is accumulated
  2. A new entry is appended at the current timestamp
  3. Future reward calculations use the area-weighted average of all entries

Mathematically, the effective rate over period [t0,t1] is:

r¯=iri×(ti+1ti)t1t0

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:

ConstraintLimit
Value multiplier0.5× to 2.0× of current value
Time between changesMinimum 1 month
Array validationLength 4; div and mul non-zero

These limits prevent governance from making extreme or frequent parameter changes, protecting stakers from sudden rate collapses.