// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; import './IERC20.sol'; import './IRewarder.sol'; import '../libraries/Types.sol'; /// @dev Pools interface /// @author Alexandas interface IPools { /// @dev emit when ERC20 Token contract updated /// @param token ERC20 Token contract event TokenUpdated(IERC20 token); /// @dev emit when `Rewarder` contract updated /// @param rewarder `Rewarder` contract event RewarderUpdated(IRewarder rewarder); /// @dev emit when `rewardPerSecond` updated /// @param rewardPerSecond reward generated for per second event RewardPerSecondUpdated(uint256 rewardPerSecond); /// @dev emit when shares precision updated /// @param precision shares precision event PrecisionUpdated(uint256 precision); /// @dev emit when max coefficient updated /// @param maxCoef max coefficient event MaxCoefUpdated(uint256 maxCoef); /// @dev emit when add a pool /// @param grade pool grade event AddPool(Types.Grade grade); /// @dev emit when pool updated /// @param grade pool grade event PoolUpdated(Types.Grade grade); /// @dev return ERC20 token address function token() external view returns(IERC20); /// @dev return `Rewarder` contract address function rewarder() external view returns(IRewarder); /// @dev return precision for shares function ACC_PRECISION() external view returns(uint256); /// @dev return max coefficient function MAXCOEF() external view returns(uint256); /// @dev return total pools allocation points function totalAllocPoint() external view returns(uint256); /// @dev return reward generated for per second function rewardPerSecond() external view returns(uint256); /// @dev update a specific pool /// @param grade pool grade /// @return pool pool info function updatePool(Types.Grade grade) external returns (Types.PoolInfo memory pool); /// @dev return a specific pool /// @param grade pool grade /// @return pool pool info function poolInfo(Types.Grade grade) external view returns(Types.PoolInfo memory); }