Skip to content

Reward Pools & Accounting

The controller has two staking reward pools:

  • Pool 0 — Flexible
  • Pool 1 — Locked

Each pool tracks:

  • reward period finish;
  • last update time;
  • reward rate;
  • reward-per-token accumulator;
  • total active stake;
  • funded budget; and
  • accrued liability.

fundRewards(poolId, amount) transfers funded WATER into the controller and increases the selected pool budget. scheduleRewards(poolId, duration) establishes the emission schedule for that pool.

The controller exposes rewardReserveRequired() and rewardReserveSolvent() so the application can verify that the controller WATER balance covers the funded reward reserve.

The dApp’s current readiness logic also validates the same invariant from the controller balance and pool budgets so a failed convenience read cannot falsely report insolvency when the underlying state is solvent.