interface IStakingRewards {
    // Views
    function lastTimeRewardApplicable(uint256 pool) external view returns (uint256);

    function rewardPerToken(uint256 pool) external view returns (uint256);

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

    function getRewardForDuration(uint256 pool) external view returns (uint256);

    function totalSupplyPerPool(uint256 pool) external view returns (uint256);

    function balanceOfPerPool(address account, uint256 pool) external view returns (uint256);

    // Mutative

    function stake(uint256 amount, uint256 pool) external;

    function withdraw(uint256 amount, uint256 pool) external;

    function getReward(uint256 pool) external;

    function exit(uint256 pool) external;
}
// Inheritancea
function stake(uint256 amount, uint256 pool) external;

// Mutative