Get User Earnings

Tracking earnings on Idle is easy, you just need the avg buy price of the IdleTokens, the amount of IdleTokens held by a user and the current price.

IdleToken contract saves and updates the userAvgPrices mapping which contains the avg price paid for each IdleToken of a user, so to calculate earnings (in underlying) one can do the following:

address user = <address_of_user>;
IIdleToken idleDAI = IIdleToken(<address_idle_token>);
uint256 userBalance = idleDAI.balanceOf(user);
uint256 avgCost = userBalance.times(idleDAI.userAvgPrices(user)).div(10**18);
uint256 currentValue = userBalance.times(idleDAI.tokenPriceWithFee()).div(10**18);
uint256 earnings = currentValue.minus(avgCost);

*Note: tokenPriceWithFee is available only for IdleToken of the Best yield strategy. For the Risk adjusted strategy fee must be accounted on the integrators side or by using this helper. Here you can find more info and also a follow up here