interface IStakingRewards {
  // Views

  function totalSupply() external view returns (uint256);

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

  function lastTimeRewardApplicable() external view returns (uint256);

  function rewardPerToken() external view returns (uint256);

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

  function getRewardForDuration() external view returns (uint256);

  // Mutative
  function stake(uint256 amount) external;

  function withdraw(uint256 amount) external;

  function getReward() external;

  function exit() external;

  function notifyRewardAmount(uint256 reward) external;
}
// https://docs.synthetix.io/contracts/source/interfaces/istakingrewards
function stake(uint256 amount) external;

// Mutative