abstract contract RewardAdder is IFestaked {
    address  public rewardTokenAddress;
    FestakedLib.FestakeRewardState public rewardState;
    address public rewardSetter; // Not using Ownable to save on deployment gas

    function rewardsTotal() external view returns (uint256) {
        return rewardState.rewardsTotal;
    }

    function earlyWithdrawReward() external view returns (uint256) {
        return rewardState.earlyWithdrawReward;
    }

    function rewardBalance() external view returns (uint256) {
        return rewardState.rewardBalance;
    }

    function addReward(uint256 rewardAmount, uint256 withdrawableAmount)
    external returns (bool) {
        return FestakedLib.addReward(rewardAmount, withdrawableAmount,
            rewardTokenAddress, rewardState);
    }
}
function rewardsTotal() external view returns (uint256) {
    return rewardState.rewardsTotal;
}

// Not using Ownable to save on deployment gas