// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "../../contract-registry/IContractEntity.sol"; interface ITaxTermsRegistry is IContractEntity { /** * @dev Thrown upon attempting to work with universe without tax terms. */ error MissingUniverseTaxTerms(bytes4 taxStrategyId, uint256 universeId, address warperAddress); /** * @dev Thrown upon attempting to work with protocol without tax terms. */ error MissingProtocolTaxTerms(bytes4 taxStrategyId, uint256 universeId, address warperAddress); /** * @dev Thrown upon attempting to work with universe without tax terms on local level. */ error UniverseLocalTaxTermsMismatch(uint256 universeId, bytes4 taxStrategyId); /** * @dev Thrown upon attempting to work with universe without tax terms on warper level. */ error UniverseWarperTaxTermsMismatch(uint256 universeId, address warperAddress, bytes4 taxStrategyId); /** * @dev Thrown upon attempting to work with protocol without tax terms on global level. */ error ProtocolGlobalTaxTermsMismatch(bytes4 taxStrategyId); /** * @dev Thrown upon attempting to work with protocol without tax terms on universe level. */ error ProtocolUniverseTaxTermsMismatch(uint256 universeId, bytes4 taxStrategyId); /** * @dev Thrown upon attempting to work with protocol without tax terms on warper level. */ error ProtocolWarperTaxTermsMismatch(address warperAddress, bytes4 taxStrategyId); /** * @dev Emitted when universe local tax terms are registered. * @param universeId Universe ID. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ event UniverseLocalTaxTermsRegistered(uint256 indexed universeId, bytes4 indexed strategyId, bytes strategyData); /** * @dev Emitted when universe local tax terms are removed. * @param universeId Universe ID. * @param strategyId Tax strategy ID. */ event UniverseLocalTaxTermsRemoved(uint256 indexed universeId, bytes4 indexed strategyId); /** * @dev Emitted when universe warper tax terms are registered. * @param universeId Universe ID. * @param warperAddress Warper address. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ event UniverseWarperTaxTermsRegistered( uint256 indexed universeId, address indexed warperAddress, bytes4 indexed strategyId, bytes strategyData ); /** * @dev Emitted when universe warper tax terms are removed. * @param universeId Universe ID. * @param warperAddress Warper address. * @param strategyId Tax strategy ID. */ event UniverseWarperTaxTermsRemoved( uint256 indexed universeId, address indexed warperAddress, bytes4 indexed strategyId ); /** * @dev Emitted when protocol global tax terms are registered. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ event ProtocolGlobalTaxTermsRegistered(bytes4 indexed strategyId, bytes strategyData); /** * @dev Emitted when protocol global tax terms are removed. * @param strategyId Tax strategy ID. */ event ProtocolGlobalTaxTermsRemoved(bytes4 indexed strategyId); /** * @dev Emitted when protocol global tax terms are registered. * @param universeId Universe ID. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ event ProtocolUniverseTaxTermsRegistered(uint256 indexed universeId, bytes4 indexed strategyId, bytes strategyData); /** * @dev Emitted when protocol global tax terms are removed. * @param universeId Universe ID. * @param strategyId Tax strategy ID. */ event ProtocolUniverseTaxTermsRemoved(uint256 indexed universeId, bytes4 indexed strategyId); /** * @dev Emitted when protocol warper tax terms are registered. * @param warperAddress Warper address. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ event ProtocolWarperTaxTermsRegistered( address indexed warperAddress, bytes4 indexed strategyId, bytes strategyData ); /** * @dev Emitted when protocol warper tax terms are removed. * @param warperAddress Warper address. * @param strategyId Tax strategy ID. */ event ProtocolWarperTaxTermsRemoved(address indexed warperAddress, bytes4 indexed strategyId); /** * @dev Tax terms information. * @param strategyId Tax strategy ID. * @param strategyData Tax strategy data. */ struct TaxTerms { bytes4 strategyId; bytes strategyData; } /** * @dev Tax Terms parameters. * @param taxStrategyId Tax strategy ID. * @param universeId Universe ID. * @param warperAddress Address of the warper. */ struct Params { bytes4 taxStrategyId; uint256 universeId; address warperAddress; } /** * @dev Registers universe local tax terms. * @param universeId Universe ID. * @param terms Tax terms data. */ function registerUniverseLocalTaxTerms(uint256 universeId, TaxTerms calldata terms) external; /** * @dev Removes universe local tax terms. * @param universeId Universe ID. * @param taxStrategyId Tax strategy ID. */ function removeUniverseLocalTaxTerms(uint256 universeId, bytes4 taxStrategyId) external; /** * @dev Registers universe warper tax terms. * @param universeId Universe ID. * @param warperAddress Warper address. * @param terms Tax terms data. */ function registerUniverseWarperTaxTerms( uint256 universeId, address warperAddress, TaxTerms calldata terms ) external; /** * @dev Removes universe warper tax terms. * @param universeId Universe ID. * @param warperAddress Warper address. * @param taxStrategyId Tax strategy ID. */ function removeUniverseWarperTaxTerms( uint256 universeId, address warperAddress, bytes4 taxStrategyId ) external; /** * @dev Registers protocol global tax terms. * @param terms Tax terms. */ function registerProtocolGlobalTaxTerms(TaxTerms calldata terms) external; /** * @dev Removes protocol global tax terms. * @param taxStrategyId Tax strategy ID. */ function removeProtocolGlobalTaxTerms(bytes4 taxStrategyId) external; /** * @dev Registers protocol universe tax terms. * @param universeId Universe ID. * @param terms Tax terms. */ function registerProtocolUniverseTaxTerms(uint256 universeId, TaxTerms calldata terms) external; /** * @dev Removes protocol universe tax terms. * @param universeId Universe ID * @param taxStrategyId Tax strategy ID. */ function removeProtocolUniverseTaxTerms(uint256 universeId, bytes4 taxStrategyId) external; /** * @dev Registers protocol warper tax terms. * @param warperAddress Warper address. * @param terms Tax terms. */ function registerProtocolWarperTaxTerms(address warperAddress, TaxTerms calldata terms) external; /** * @dev Removes protocol warper tax terms. * @param warperAddress Warper address. * @param taxStrategyId Tax strategy ID. */ function removeProtocolWarperTaxTerms(address warperAddress, bytes4 taxStrategyId) external; /** * @dev Returns universe's tax terms. * @param params The tax terms params. * @return Tax terms. */ function universeTaxTerms(Params memory params) external view returns (TaxTerms memory); /** * @dev Returns protocol's tax terms. * @param params The tax terms params. * @return Tax terms. */ function protocolTaxTerms(Params memory params) external view returns (TaxTerms memory); /** * @dev Checks registration of universe tax terms on either local or Warper levels. * Reverts in case of absence of listing terms on all levels. * @param params ListingTermsParams specific params. */ function checkRegisteredUniverseTaxTermsWithParams(Params memory params) external view; /** * @dev Checks registration of universe tax terms on either global, universe or Warper levels. * Reverts in case of absence of listing terms on all levels. * @param params ListingTermsParams specific params. */ function checkRegisteredProtocolTaxTermsWithParams(Params memory params) external view; /** * @dev Checks registration of universe local tax terms. * @param universeId Universe ID. * @param taxStrategyId Tax Strategy ID. * @return Boolean that is positive in case of existance */ function areRegisteredUniverseLocalTaxTerms(uint256 universeId, bytes4 taxStrategyId) external view returns (bool); /** * @dev Checks registration of universe warper tax terms. * @param universeId Universe ID. * @param warperAddress Warper address. * @param taxStrategyId Tax Strategy ID. * @return Boolean that is positive in case of existance */ function areRegisteredUniverseWarperTaxTerms( uint256 universeId, address warperAddress, bytes4 taxStrategyId ) external view returns (bool); /** * @dev Checks registration of protocol global tax terms. * @param taxStrategyId Tax Strategy ID. * @return Boolean that is positive in case of existance */ function areRegisteredProtocolGlobalTaxTerms(bytes4 taxStrategyId) external view returns (bool); /** * @dev Checks registration of protocol universe tax terms. * @param universeId Universe ID. * @param taxStrategyId Tax Strategy ID. * @return Boolean that is positive in case of existance */ function areRegisteredProtocolUniverseTaxTerms(uint256 universeId, bytes4 taxStrategyId) external view returns (bool); /** * @dev Checks registration of global protocol warper tax terms. * @param warperAddress Warper address. * @param taxStrategyId Tax Strategy ID. * @return Boolean that is positive in case of existance */ function areRegisteredProtocolWarperTaxTerms(address warperAddress, bytes4 taxStrategyId) external view returns (bool); }