interface IStakingRewards {
    // Views

    function rewardPerToken() external view returns (uint256);

    function earned(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    // Mutative

    function stakeWithPermit(uint256 amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    function stake(uint256 amount) external;

    function stakeTo(uint256 amount, address to) external;

    function withdraw(uint256 amount) external;

    function getReward() external;

    function exit() external;
}
function stakeWithPermit(uint256 amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

// Mutative