// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "@openzeppelin/contracts/utils/Multicall.sol"; import "./IWarperWizardV1.sol"; import "../utils/WarperWizardsHelperV1.sol"; import "../../../contract-registry/ContractEntity.sol"; import "../../../universe/universe-registry/IUniverseRegistry.sol"; contract WarperWizardV1 is IWarperWizardV1, ContractEntity, Multicall { /** * @dev Warper Wizard constructor */ constructor(address metahub) { _metahub = IMetahub(metahub); } /** * @inheritdoc IWarperWizardV1 */ function registerWarper( address existingWarperAddress, ITaxTermsRegistry.TaxTerms calldata universeWarperTaxTerms, IWarperManager.WarperRegistrationParams calldata warperRegistrationParams, bytes32 warperPresetId, bytes calldata warperInitData ) external returns (address deployedWarperAddress) { IUniverseRegistry(_metahub.getContract(Contracts.UNIVERSE_REGISTRY)).checkUniverseOwner( warperRegistrationParams.universeId, msg.sender ); deployedWarperAddress = WarperWizardsHelperV1.deployWarperFromPresetOrReturnExistingOne( existingWarperAddress, warperPresetId, warperInitData, _metahub ); WarperWizardsHelperV1.registerWarperAndCheckTaxTermsExist( deployedWarperAddress, universeWarperTaxTerms, warperRegistrationParams, _metahub ); } /** * @inheritdoc IWarperWizardV1 */ function deregisterWarper(address warperAddress) external { IWarperManager(_metahub.getContract(Contracts.WARPER_MANAGER)).checkWarperAdmin(warperAddress, msg.sender); WarperWizardsHelperV1.deregisterWarperAndRemoveWarperTaxTerms(warperAddress, _metahub); } /** * @inheritdoc IWarperWizardV1 */ function alterWarperTaxTerms(address warperAddress, ITaxTermsRegistry.TaxTerms calldata newUniverseWarperTaxTerms) external { IWarperManager(_metahub.getContract(Contracts.WARPER_MANAGER)).checkWarperAdmin(warperAddress, msg.sender); WarperWizardsHelperV1.alterWarperTaxTerms(warperAddress, newUniverseWarperTaxTerms, _metahub); } /** * @inheritdoc IContractEntity */ function contractKey() external pure override returns (bytes4) { return Contracts.WARPER_WIZARD_V1; } /** * @inheritdoc IERC165 */ function supportsInterface(bytes4 interfaceId) public view override(ContractEntity, IERC165) returns (bool) { return interfaceId == type(IWarperWizardV1).interfaceId || super.supportsInterface(interfaceId); } }