//SPDX-License-Identifier: MITpragmasolidity >=0.8.0;import"./IERC20.sol";
/// @title The interface for Graviton lp-token lock-unlock/// @notice Locks liquidity provision tokens/// @author Artemij Artamonov - <array.clean@gmail.com>/// @author Anton Davydov - <fetsorn@gmail.com>interfaceILockUnlockLP{
/// @notice User that can grant access permissions and perform privileged actionsfunctionowner() externalviewreturns (address);
/// @notice Transfers ownership of the contract to a new account (`_owner`)./// @dev Can only be called by the current owner.functionsetOwner(address _owner) external;
/// @notice Look up if locking is allowedfunctioncanLock() externalviewreturns (bool);
/// @notice Sets the permission to lock to `_canLock`functionsetCanLock(bool _canLock) external;
/// @notice Look up if the locking of `token` is allowedfunctionisAllowedToken(address token) externalviewreturns (bool);
/// @notice Look up if the locking of `token` is allowedfunctionlockLimit(address token) externalviewreturns (uint256);
/// @notice Sets minimum lock amount limit for `token` to `_lockLimit`functionsetLockLimit(address token, uint256 _lockLimit) external;
/// @notice The total amount of locked `token`functiontokenSupply(address token) externalviewreturns (uint256);
/// @notice The total amount of all locked lp-tokensfunctiontotalSupply() externalviewreturns (uint256);
/// @notice Sets permission to lock `token` to `_isAllowedToken`functionsetIsAllowedToken(address token, bool _isAllowedToken) external;
/// @notice The amount of `token` locked by `depositer`functionbalance(address token, address depositer)
externalviewreturns (uint256);
/// @notice Transfers `amount` of `token` from the caller to LockUnlockLPfunctionlock(address token, uint256 amount) external;
/// @notice Transfers `amount` of `token` from LockUnlockLP to the callerfunctionunlock(address token, uint256 amount) external;
/// @notice Event emitted when the owner changes via `#setOwner`./// @param ownerOld The account that was the previous owner of the contract/// @param ownerNew The account that became the owner of the contracteventSetOwner(addressindexed ownerOld, addressindexed ownerNew);
/// @notice Event emitted when the `sender` locks `amount` of `token` lp-tokens/// @param token The address of the lp-token/// @param sender The account that locked lp-token/// @param receiver The account to whose lp-token balance the tokens are added/// @dev receiver is always same as sender, kept for compatibility/// @param amount The amount of lp-tokens lockedeventLock(addressindexed token,
addressindexed sender,
addressindexed receiver,
uint256 amount
);
/// @notice Event emitted when the `sender` unlocks `amount` of `token` lp-tokens/// @param token The address of the lp-token/// @param sender The account that locked lp-token/// @param receiver The account to whose lp-token balance the tokens are added/// @dev receiver is always same as sender, kept for compatibility/// @param amount The amount of lp-tokens unlockedeventUnlock(addressindexed token,
addressindexed sender,
addressindexed receiver,
uint256 amount
);
/// @notice Event emitted when the permission to lock token is updated via `#setIsAllowedToken`/// @param owner The owner account at the time of change/// @param token The lp-token whose permission was updated/// @param newBool Updated permissioneventSetIsAllowedToken(addressindexed owner,
addressindexed token,
boolindexed newBool
);
/// @notice Event emitted when the minimum lock amount limit updated via `#setLockLimit`/// @param owner The owner account at the time of change/// @param token The lp-token whose permission was updated/// @param _lockLimit New minimum lock amount limiteventSetLockLimit(addressindexed owner,
addressindexed token,
uint256indexed _lockLimit
);
/// @notice Event emitted when the permission to lock is updated via `#setCanLock`/// @param owner The owner account at the time of change/// @param newBool Updated permissioneventSetCanLock(addressindexed owner, boolindexed newBool);
}