// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "../../contract-registry/IContractEntity.sol"; interface IListingTermsRegistry is IContractEntity { /** * @dev Thrown upon attempting to work with unregistered listing terms. */ error UnregisteredListingTerms(uint256 listingTermsId); /** * @dev Thrown upon attempting to work with listing terms with params that have more specific terms on warper level. */ error MoreSpecificListingTermsExistForWarper(uint256 listingTermsId, uint256 listingId, address warperAddress); /** * @dev Thrown upon attempting to work with listing terms with * params that have more specific terms on universe level. */ error MoreSpecificListingTermsExistForUniverse(uint256 listingTermsId, uint256 listingId, uint256 universeId); /** * @dev Thrown upon attempting to work with listing without listing terms. */ error WrongListingTermsIdForParams( uint256 listingTermsId, uint256 listingId, uint256 universeId, address warperAddress ); /** * @dev Thrown upon attempting to work with listing without listing terms on global level. */ error GlobalListingTermsMismatch(uint256 listingId, uint256 listingTermsId); /** * @dev Thrown upon attempting to work with listing without listing terms on universe level. */ error UniverseListingTermsMismatch(uint256 listingId, uint256 universeId, uint256 listingTermsId); /** * @dev Thrown upon attempting to work with listing without listing terms on warper level. */ error WarperListingTermsMismatch(uint256 listingId, address warperAddress, uint256 listingTermsId); /** * @dev Emitted when the new listing terms are registered. * @param listingTermsId Listing terms ID. * @param strategyId Listing strategy ID. * @param strategyData Listing strategy data. */ event ListingTermsRegistered(uint256 indexed listingTermsId, bytes4 indexed strategyId, bytes strategyData); /** * @dev Emitted when existing global listing terms are registered. * @param listingId Listing group ID. * @param listingTermsId Listing terms ID. */ event GlobalListingTermsRegistered(uint256 indexed listingId, uint256 indexed listingTermsId); /** * @dev Emitted when the global listing terms are removed. * @param listingId Listing group ID. * @param listingTermsId Listing terms ID. */ event GlobalListingTermsRemoved(uint256 indexed listingId, uint256 indexed listingTermsId); /** * @dev Emitted when universe listing terms are registered. * @param listingId Listing group ID. * @param universeId Universe ID. * @param listingTermsId Listing terms ID. */ event UniverseListingTermsRegistered( uint256 indexed listingId, uint256 indexed universeId, uint256 indexed listingTermsId ); /** * @dev Emitted when universe listing terms are removed. * @param listingId Listing group ID. * @param universeId Universe ID. * @param listingTermsId Listing terms ID. */ event UniverseListingTermsRemoved( uint256 indexed listingId, uint256 indexed universeId, uint256 indexed listingTermsId ); /** * @dev Emitted when the warper listing terms are registered. * @param listingId Listing group ID. * @param warperAddress Address of the warper. * @param listingTermsId Listing terms ID. */ event WarperListingTermsRegistered( uint256 indexed listingId, address indexed warperAddress, uint256 indexed listingTermsId ); /** * @dev Emitted when warper level lister's listing terms are removed. * @param listingId Listing group ID. * @param warperAddress Address of the warper. * @param listingTermsId Listing terms ID. */ event WarperListingTermsRemoved( uint256 indexed listingId, address indexed warperAddress, uint256 indexed listingTermsId ); /** * @dev Listing terms information. * @param strategyId Listing strategy ID. * @param strategyData Listing strategy data. */ struct ListingTerms { bytes4 strategyId; bytes strategyData; } /** * @dev Listing Terms parameters. * @param listingId Listing ID. * @param universeId Universe ID. * @param warperAddress Address of the warper. */ struct Params { uint256 listingId; uint256 universeId; address warperAddress; } /** * @dev Registers global listing terms. * @param listingId Listing ID. * @param terms Listing terms data. * @return listingTermsId Listing terms ID. */ function registerGlobalListingTerms(uint256 listingId, ListingTerms calldata terms) external returns (uint256 listingTermsId); /** * @dev Removes global listing terms. * @param listingId Listing ID. * @param listingTermsId Listing Terms ID. */ function removeGlobalListingTerms(uint256 listingId, uint256 listingTermsId) external; /** * @dev Registers universe listing terms. * @param listingId Listing ID. * @param universeId Universe ID. * @param terms Listing terms data. * @return listingTermsId Listing terms ID. */ function registerUniverseListingTerms( uint256 listingId, uint256 universeId, ListingTerms calldata terms ) external returns (uint256 listingTermsId); /** * @dev Removes universe listing terms. * @param listingId Listing ID. * @param universeId Universe ID. * @param listingTermsId Listing terms ID. */ function removeUniverseListingTerms( uint256 listingId, uint256 universeId, uint256 listingTermsId ) external; /** * @dev Registers warper listing terms. * @param listingId Listing ID. * @param warperAddress The address of the warper. * @param terms Listing terms. * @return listingTermsId Listing terms ID. */ function registerWarperListingTerms( uint256 listingId, address warperAddress, ListingTerms calldata terms ) external returns (uint256 listingTermsId); /** * @dev Removes warper listing terms. * @param listingId Listing ID. * @param warperAddress The address of the warper. * @param listingTermsId Listing terms ID */ function removeWarperListingTerms( uint256 listingId, address warperAddress, uint256 listingTermsId ) external; /** * @dev Returns listing terms by ID. * @param listingTermsId Listing terms ID. * @return Listing Terms. */ function listingTerms(uint256 listingTermsId) external view returns (ListingTerms memory); /** * @dev Returns listing terms by ID. * @param listingTermsId Listing terms ID. * @return Listing Terms. * @return Listing Terms Params. */ function listingTermsWithParams(uint256 listingTermsId) external view returns (ListingTerms memory, Params memory); /** * @dev Returns all listing terms for params. * @param params Listing terms specific params. * @param offset List offset value. * @param limit List limit value. * @return List of Listing Terms IDs. * @return List of Listing Terms. */ function allListingTerms( Params calldata params, uint256 offset, uint256 limit ) external view returns (uint256[] memory, ListingTerms[] memory); /** * @dev Checks registration of listing terms. * @param listingTermsId Listing Terms ID. * @return Boolean that is positive in case of existance */ function areRegisteredListingTerms(uint256 listingTermsId) external view returns (bool); /** * @dev Checks registration of listing terms. * @param listingTermsId Listing Terms ID. * @param params Listing terms specific params. * @return Boolean that is positive in case of existance */ function areRegisteredListingTermsWithParams(uint256 listingTermsId, Params memory params) external view returns (bool); /** * @dev Checks registration of listing terms. * Reverts with UnregisteredListingTerms() in case listing terms were not registered. * @param listingTermsId Listing Terms ID. */ function checkRegisteredListingTerms(uint256 listingTermsId) external view; /** * @dev Checks registration of listing terms for lister on global, universe and warper levels. * Reverts in case of absence of listing terms on all levels. * @param listingTermsId Listing Terms ID. * @param params Listing terms specific params. */ function checkRegisteredListingTermsWithParams(uint256 listingTermsId, Params memory params) external view; }