// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "../../../contract-registry/IContractEntity.sol"; import "../../../tax/tax-terms-registry/ITaxTermsRegistry.sol"; import "../../../warper/warper-manager/IWarperManager.sol"; interface IWarperWizardV1 is IContractEntity { /** * @dev Is thrown when Warper Tax Terms cannot be detected. * @param taxStrategyId Tax Strategy ID. * @param universeId Universe ID. * @param warperAddress Warper address. */ error CouldNotDetectWarperTaxTerms(bytes4 taxStrategyId, uint256 universeId, address warperAddress); /** * @dev Does a registration of Warper. * Step 1. deploy Warper from a preset (if no `existingWarperAddress` is provided); * Step 2. register deployed Warper; * Step 3. define Warper Tax Terms in Universe; * @param existingWarperAddress Already deployed Warper address. * @param universeWarperTaxTerms Tax Terms for Warper in Universe. * @param warperRegistrationParams Not fully filled (without universeId) Warper registration params. * @param warperPresetId Warper Preset ID. * @param warperInitData Bytes with Warper constructor params. * @return deployedWarperAddress Deployed Warper address (new or existing one) */ function registerWarper( address existingWarperAddress, ITaxTermsRegistry.TaxTerms calldata universeWarperTaxTerms, IWarperManager.WarperRegistrationParams calldata warperRegistrationParams, bytes32 warperPresetId, bytes calldata warperInitData ) external returns (address deployedWarperAddress); /** * @dev Deregisters Warper and removes its Tax Terms. * @param warperAddress address of Warper to deregister. */ function deregisterWarper(address warperAddress) external; /** * @dev Alters Warper's Tax Terms. * @param warperAddress address of Warper to alter Tax Terms for. * @param newUniverseWarperTaxTerms New Tax Terms for Warper in Universe. */ function alterWarperTaxTerms(address warperAddress, ITaxTermsRegistry.TaxTerms calldata newUniverseWarperTaxTerms) external; }