A Rate Accumulator is a building block for tracking a set of balances with a continuous variable return rate. It will correctly prorate balances in constant time no matter how frequently the rate is updated or balances are changed (each at most once per timestamp).

This comes at a cost of storage space that is linear with number of "points": Any time the rate is changed or a balance is read, a storage slot is polluted forever. Reuse rate accumulators whenever possible - the same accumulator can be used for totally different balance sets with no extra penalty.