$IDLE gauges are based on the Curve gauge system with the following modifications.
The main difference is that $IDLE is not mintable, so a mechanism to release $IDLE linearly to Gauges is introduced which allows fine-grained control of the epochs and the inflation rate.
Such a system replaced the CRV token with a contract that distributes $IDLE to Liquidity Gauges following parameters governed by the Idle DAO.
The $IDLE Gauge system consists of the following smart contracts:
LiquidityGauge: specific for each pool, measures the liquidity provided by users.
GaugeController: maintains a list of gauges and their respective weight. Allow users to vote for gauges.
Distributor: used to distribute $IDLE rewards across epochs. Epochs have a length of one week and the total amount of rewards to be distributed in a given epoch (or week) can be changed during the previous epoch (or week).
DistributorProxy: used by users to claim $IDLE rewards.
GaugeProxy: allows setting additional rewards on top of liquidity gauges deposits.