abstract contract StrategyStakingRewardsBase is StrategyBase {
    address public rewards;

    // **** Getters ****
    constructor(
        address _rewards,
        address _want,
        address _governance,
        address _strategist,
        address _controller,
        address _timelock
    )
        public
        StrategyBase(_want, _governance, _strategist, _controller, _timelock)
    {
        rewards = _rewards;
    }

    function balanceOfPool() public override view returns (uint256) {
        return IStakingRewards(rewards).balanceOf(address(this));
    }

    function getHarvestable() external view returns (uint256) {
        return IStakingRewards(rewards).earned(address(this));
    }

    // **** Setters ****

    function deposit() public override {
        uint256 _want = IERC20_1(want).balanceOf(address(this));
        if (_want > 0) {
            IERC20_1(want).safeApprove(rewards, 0);
            IERC20_1(want).safeApprove(rewards, _want);
            IStakingRewards(rewards).stake(_want);
        }
    }

    function _withdrawSome(uint256 _amount)
        internal
        override
        returns (uint256)
    {
        IStakingRewards(rewards).withdraw(_amount);
        return _amount;
    }
}
// Base contract for SNX Staking rewards contract interfaces
function deposit() public override {
        uint256 _want = IERC20_1(want).balanceOf(address(this));
        if (_want > 0) {
            IERC20_1(want).safeApprove(rewards, 0);
            IERC20_1(want).safeApprove(rewards, _want);
            IStakingRewards(rewards).stake(_want);
        }
    }
// **** Setters ****