# High priority: Ownable is re-used: - Ownable (node_modules/@openzeppelin/contracts/access/Ownable.sol#20-83) - Ownable (contracts/UpgradeableBeacon.sol#671-724) - Ownable (contracts/oz/access/Ownable.sol#20-79) IBeacon is re-used: - IBeacon (contracts/UpgradeableBeacon.sol#7-14) - IBeacon (contracts/oz/proxy/beacon/IBeacon.sol#9-16) UpgradeableBeacon is re-used: - UpgradeableBeacon (contracts/UpgradeableBeacon.sol#732-784) - UpgradeableBeacon (contracts/oz/proxy/beacon/UpgradeableBeacon.sol#16-68) StringsUpgradeable is re-used: - StringsUpgradeable (contracts/oz/utils/StringsUpgradeable.sol#8-34) - StringsUpgradeable (contracts/oz442/utils/StringsUpgradeable.sol#9-71) Initializable is re-used: - Initializable (contracts/oz/proxy/Initializable.sol#20-57) - Initializable (contracts/oz442/proxy/utils/Initializable.sol#35-83) ERC1967Upgrade is re-used: - ERC1967Upgrade (contracts/UpgradeableBeacon.sol#107-299) - ERC1967Upgrade (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#19-200) ERC165Upgradeable is re-used: - ERC165Upgradeable (contracts/oz/introspection/ERC165Upgradeable.sol#14-67) - ERC165Upgradeable (contracts/oz442/utils/introspection/ERC165Upgradeable.sol#23-44) IERC165Upgradeable is re-used: - IERC165Upgradeable (contracts/oz/introspection/IERC165Upgradeable.sol#14-24) - IERC165Upgradeable (contracts/oz442/utils/introspection/IERC165Upgradeable.sol#15-25) AddressUpgradeable is re-used: - AddressUpgradeable (contracts/oz/utils/AddressUpgradeable.sol#8-208) - AddressUpgradeable (contracts/oz442/utils/AddressUpgradeable.sol#9-210) BeaconProxy is re-used: - BeaconProxy (contracts/UpgradeableBeacon.sol#1062-1108) - BeaconProxy (contracts/oz/proxy/beacon/BeaconProxy.sol#18-64) ContextUpgradeable is re-used: - ContextUpgradeable (contracts/oz/utils/ContextUpgradeable.sol#16-33) - ContextUpgradeable (contracts/oz442/utils/ContextUpgradeable.sol#17-33) EnumerableSet is re-used: - EnumerableSet (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#41-378) - EnumerableSet (contracts/oz/utils/EnumerableSet.sol#41-424) IOperatorFilterRegistry is re-used: - IOperatorFilterRegistry (contracts/opensea/IOperatorFilterRegistry.sol#4-102) - IOperatorFilterRegistry (node_modules/operator-filter-registry/src/IOperatorFilterRegistry.sol#4-29) StorageSlot is re-used: - StorageSlot (contracts/UpgradeableBeacon.sol#568-636) - StorageSlot (contracts/oz/utils/StorageSlot.sol#32-100) Address is re-used: - Address (contracts/UpgradeableBeacon.sol#304-540) - Address (contracts/oz/utils/Address.sol#9-250) Context is re-used: - Context (node_modules/@openzeppelin/contracts/utils/Context.sol#16-24) - Context (contracts/UpgradeableBeacon.sol#648-657) - Context (contracts/oz/utils/Context.sol#16-24) ERC1967Proxy is re-used: - ERC1967Proxy (contracts/UpgradeableBeacon.sol#792-819) - ERC1967Proxy (contracts/oz/proxy/ERC1967/ERC1967Proxy.sol#15-42) Proxy is re-used: - Proxy (contracts/UpgradeableBeacon.sol#26-97) - Proxy (contracts/oz/proxy/Proxy.sol#16-86) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused INFO:Detectors: SubdomainController.authorizedAccounts (contracts/controllers/SubdomainController.sol#17) is never initialized. It is used in: - SubdomainController.isAuthorized() (contracts/controllers/SubdomainController.sol#75-80) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-state-variables # Medium priority: INFO:Detectors: CustomStrings.toString(uint256) (contracts/CustomStrings.sol#5-26) performs a multiplication on the result of a division: - tempo = (48 + uint8(value - (value / 10) * 10)) (contracts/CustomStrings.sol#20) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply INFO:Detectors: Reentrancy in DomainPurchaser.purchaseSubdomain(uint256,string,string) (contracts/controllers/DomainPurchaser.sol#112-193): External calls: - paymentToken.safeTransferFrom(msg.sender,platformWallet,price) (contracts/controllers/DomainPurchaser.sol#150) - paymentToken.safeTransferFrom(msg.sender,zNSHub.ownerOf(parentId),price - fee) (contracts/controllers/DomainPurchaser.sol#155-159) - paymentToken.safeTransferFrom(msg.sender,platformWallet,fee) (contracts/controllers/DomainPurchaser.sol#163) - createdDomainId = rootRegistrar.registerSubdomainContract(parentId,name,msg.sender,metadataUri,0,false,msg.sender) (contracts/controllers/DomainPurchaser.sol#170-178) State variables written after the call(s): - purchaseData[createdDomainId].wasAllowedToSubdomainMintOnCreation = domainData.allowSubdomainsToMint (contracts/controllers/DomainPurchaser.sol#186-187) DomainPurchaser.purchaseData (contracts/controllers/DomainPurchaser.sol#75) can be used in cross function reentrancies: - DomainPurchaser.getDomainPrice(uint256,string) (contracts/controllers/DomainPurchaser.sol#305-325) - DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256) (contracts/controllers/DomainPurchaser.sol#80-103) - DomainPurchaser.purchaseData (contracts/controllers/DomainPurchaser.sol#75) - DomainPurchaser.purchaseSubdomain(uint256,string,string) (contracts/controllers/DomainPurchaser.sol#112-193) - DomainPurchaser.setDomainMintingStatus(uint256,bool,bool) (contracts/controllers/DomainPurchaser.sol#240-265) - DomainPurchaser.setDomainPricing(uint256,IDomainPurchaser.PricingData,bool,bool) (contracts/controllers/DomainPurchaser.sol#202-231) Reentrancy in Registrar.registerDomainInGroupBulk(uint256,uint256,uint256,uint256,uint256,address,uint256,address) (contracts/registrar/Registrar.sol#822-853): External calls: - _onlyController() (contracts/registrar/Registrar.sol#832) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) State variables written after the call(s): - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - records[domainId] = DomainRecord(parentId,minter,false,address(0),controller,0,address(0),domainGroupId,domainGroupFileIndex) (contracts/registrar/Registrar.sol#701-711) - records[domainId].metadataLockedBy = minter (contracts/registrar/Registrar.sol#389) - records[domainId].metadataLocked = true (contracts/registrar/Registrar.sol#390) - records[domainId].royaltyAmount = royaltyAmount (contracts/registrar/Registrar.sol#394) Registrar.records (contracts/registrar/Registrar.sol#66) can be used in cross function reentrancies: - Registrar._createDomain(uint256,uint256,address,address,uint256,uint256) (contracts/registrar/Registrar.sol#691-712) - Registrar._registerDomainV2(uint256,string,address,string,uint256,bool,uint256,uint256) (contracts/registrar/Registrar.sol#347-416) - Registrar._setDomainLock(uint256,address,bool) (contracts/registrar/Registrar.sol#714-723) - Registrar._setDomainMetadataUri(uint256,string) (contracts/registrar/Registrar.sol#657-670) - Registrar.adminBurnToken(uint256) (contracts/registrar/Registrar.sol#725-728) - Registrar.domainController(uint256) (contracts/registrar/Registrar.sol#578-580) - Registrar.domainMetadataLockedBy(uint256) (contracts/registrar/Registrar.sol#568-572) - Registrar.domainRoyaltyAmount(uint256) (contracts/registrar/Registrar.sol#586-590) - Registrar.isDomainMetadataLocked(uint256) (contracts/registrar/Registrar.sol#558-562) - Registrar.minterOf(uint256) (contracts/registrar/Registrar.sol#550-552) - Registrar.parentOf(uint256) (contracts/registrar/Registrar.sol#596-601) - Registrar.records (contracts/registrar/Registrar.sol#66) - Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324) - Registrar.setDomainRoyaltyAmount(uint256,uint256) (contracts/registrar/Registrar.sol#423-434) - Registrar.tokenURI(uint256) (contracts/registrar/Registrar.sol#603-628) Reentrancy in Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324): External calls: - _onlyController() (contracts/registrar/Registrar.sol#290) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - subdomainContract = address(new BeaconProxy(zNSHub.registrarBeacon(),)) (contracts/registrar/Registrar.sol#302-304) - Registrar(subdomainContract).initialize(address(this),id,Zer0 Name Service,ZNS,address(zNSHub)) (contracts/registrar/Registrar.sol#307-313) State variables written after the call(s): - records[id].subdomainContract = subdomainContract (contracts/registrar/Registrar.sol#316) Registrar.records (contracts/registrar/Registrar.sol#66) can be used in cross function reentrancies: - Registrar._createDomain(uint256,uint256,address,address,uint256,uint256) (contracts/registrar/Registrar.sol#691-712) - Registrar._registerDomainV2(uint256,string,address,string,uint256,bool,uint256,uint256) (contracts/registrar/Registrar.sol#347-416) - Registrar._setDomainLock(uint256,address,bool) (contracts/registrar/Registrar.sol#714-723) - Registrar._setDomainMetadataUri(uint256,string) (contracts/registrar/Registrar.sol#657-670) - Registrar.adminBurnToken(uint256) (contracts/registrar/Registrar.sol#725-728) - Registrar.domainController(uint256) (contracts/registrar/Registrar.sol#578-580) - Registrar.domainMetadataLockedBy(uint256) (contracts/registrar/Registrar.sol#568-572) - Registrar.domainRoyaltyAmount(uint256) (contracts/registrar/Registrar.sol#586-590) - Registrar.isDomainMetadataLocked(uint256) (contracts/registrar/Registrar.sol#558-562) - Registrar.minterOf(uint256) (contracts/registrar/Registrar.sol#550-552) - Registrar.parentOf(uint256) (contracts/registrar/Registrar.sol#596-601) - Registrar.records (contracts/registrar/Registrar.sol#66) - Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324) - Registrar.setDomainRoyaltyAmount(uint256,uint256) (contracts/registrar/Registrar.sol#423-434) - Registrar.tokenURI(uint256) (contracts/registrar/Registrar.sol#603-628) Reentrancy in Registrar.setAndLockDomainMetadata(uint256,string) (contracts/registrar/Registrar.sol#441-451): External calls: - _setDomainMetadataUri(id,uri) (contracts/registrar/Registrar.sol#449) - zNSHub.metadataChanged(id,uri) (contracts/registrar/Registrar.sol#669) - _setDomainLock(id,msg.sender,true) (contracts/registrar/Registrar.sol#450) - zNSHub.metadataLockChanged(id,locker,lockStatus) (contracts/registrar/Registrar.sol#722) State variables written after the call(s): - _setDomainLock(id,msg.sender,true) (contracts/registrar/Registrar.sol#450) - records[id].metadataLockedBy = locker (contracts/registrar/Registrar.sol#719) - records[id].metadataLocked = lockStatus (contracts/registrar/Registrar.sol#720) Registrar.records (contracts/registrar/Registrar.sol#66) can be used in cross function reentrancies: - Registrar._createDomain(uint256,uint256,address,address,uint256,uint256) (contracts/registrar/Registrar.sol#691-712) - Registrar._registerDomainV2(uint256,string,address,string,uint256,bool,uint256,uint256) (contracts/registrar/Registrar.sol#347-416) - Registrar._setDomainLock(uint256,address,bool) (contracts/registrar/Registrar.sol#714-723) - Registrar._setDomainMetadataUri(uint256,string) (contracts/registrar/Registrar.sol#657-670) - Registrar.adminBurnToken(uint256) (contracts/registrar/Registrar.sol#725-728) - Registrar.domainController(uint256) (contracts/registrar/Registrar.sol#578-580) - Registrar.domainMetadataLockedBy(uint256) (contracts/registrar/Registrar.sol#568-572) - Registrar.domainRoyaltyAmount(uint256) (contracts/registrar/Registrar.sol#586-590) - Registrar.isDomainMetadataLocked(uint256) (contracts/registrar/Registrar.sol#558-562) - Registrar.minterOf(uint256) (contracts/registrar/Registrar.sol#550-552) - Registrar.parentOf(uint256) (contracts/registrar/Registrar.sol#596-601) - Registrar.records (contracts/registrar/Registrar.sol#66) - Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324) - Registrar.setDomainRoyaltyAmount(uint256,uint256) (contracts/registrar/Registrar.sol#423-434) - Registrar.tokenURI(uint256) (contracts/registrar/Registrar.sol#603-628) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1 INFO:Detectors: ERC1967Upgrade._upgradeToAndCallUUPS(address,bytes,bool).slot (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#98) is a local variable never initialized Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables INFO:Detectors: ERC1967Upgrade._upgradeToAndCall(address,bytes,bool) (contracts/UpgradeableBeacon.sol#158-168) ignores return value by Address.functionDelegateCall(newImplementation,data) (contracts/UpgradeableBeacon.sol#166) ERC1967Upgrade._upgradeToAndCallSecure(address,bytes,bool) (contracts/UpgradeableBeacon.sol#175-208) ignores return value by Address.functionDelegateCall(newImplementation,data) (contracts/UpgradeableBeacon.sol#185) ERC1967Upgrade._upgradeToAndCallSecure(address,bytes,bool) (contracts/UpgradeableBeacon.sol#175-208) ignores return value by Address.functionDelegateCall(newImplementation,abi.encodeWithSignature(upgradeTo(address),oldImplementation)) (contracts/UpgradeableBeacon.sol#194-197) ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool) (contracts/UpgradeableBeacon.sol#216-226) ignores return value by Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data) (contracts/UpgradeableBeacon.sol#224) ERC1967Upgrade._upgradeToAndCall(address,bytes,bool) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#70-79) ignores return value by Address.functionDelegateCall(newImplementation,data) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#77) ERC1967Upgrade._upgradeToAndCallUUPS(address,bytes,bool) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#86-109) ignores return value by IERC1822Proxiable(newImplementation).proxiableUUID() (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#97-106) ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#189-199) ignores return value by Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#197) ERC721Upgradeable._mint(address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#446-457) ignores return value by _holderTokens[to].add(tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#452) ERC721Upgradeable._mint(address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#446-457) ignores return value by _tokenOwners.set(tokenId,to) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#454) ERC721Upgradeable._burn(uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#469-487) ignores return value by _holderTokens[owner].remove(tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#482) ERC721Upgradeable._burn(uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#469-487) ignores return value by _tokenOwners.remove(tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#484) ERC721Upgradeable._transfer(address,address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#500-522) ignores return value by _holderTokens[from].remove(tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#516) ERC721Upgradeable._transfer(address,address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#500-522) ignores return value by _holderTokens[to].add(tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#517) ERC721Upgradeable._transfer(address,address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#500-522) ignores return value by _tokenOwners.set(tokenId,to) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#519) OperatorFilterRegistry.unregister(address) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#98-109) ignores return value by _subscribers[registration].remove(registrant) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#104) OperatorFilterRegistry.registerAndSubscribe(address,address) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#114-134) ignores return value by _subscribers[subscription].add(registrant) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#131) OperatorFilterRegistry.subscribe(address,address) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#309-338) ignores return value by _subscribers[registration].remove(registrant) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#332) OperatorFilterRegistry.subscribe(address,address) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#309-338) ignores return value by _subscribers[newSubscription].add(registrant) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#336) OperatorFilterRegistry.unsubscribe(address,bool) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#343-357) ignores return value by _subscribers[registration].remove(registrant) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#351) OperatorFilterRegistry.onlyAddressOrOwner(address) (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#32-50) ignores return value by Ownable(addr).owner() (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#34-47) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return # Low priority: INFO:Detectors: AdminUpgradeabilityProxy.constructor(address,address,bytes).admin (contracts/UpgradeableBeacon.sol#1049) shadows: - TransparentUpgradeableProxy.admin() (contracts/UpgradeableBeacon.sol#878-880) (function) AuthBasicController.registerSubdomainExtended(uint256,string,address,string,uint256,bool).owner (contracts/controllers/AuthBasicController.sol#58) shadows: - OwnableUpgradeable.owner() (contracts/oz/access/OwnableUpgradeable.sol#45-47) (function) SubdomainController.registerSubdomainExtended(address,uint256,string,address,string).owner (contracts/controllers/SubdomainController.sol#35) shadows: - OwnableUpgradeable.owner() (contracts/oz/access/OwnableUpgradeable.sol#45-47) (function) SubdomainController.registerSubdomainContractExtended(address,uint256,string,address,string).owner (contracts/controllers/SubdomainController.sol#57) shadows: - OwnableUpgradeable.owner() (contracts/oz/access/OwnableUpgradeable.sol#45-47) (function) IZNAResolver.associateWithResourceType(uint256,uint256,uint256).resourceID (contracts/interfaces/IZNAResolver.sol#38) shadows: - IZNAResolver.resourceID(uint256,uint256) (contracts/interfaces/IZNAResolver.sol#62-65) (function) IZNAResolver.addResourceRegistry(uint256,IResourceRegistry).resourceRegistry (contracts/interfaces/IZNAResolver.sol#46) shadows: - IZNAResolver.resourceRegistry(uint256) (contracts/interfaces/IZNAResolver.sol#67-70) (function) MockOwnedRegistrant.constructor(address)._owner (contracts/mocks/MockOwnedRegistrant.sol#74) shadows: - Ownable._owner (contracts/oz/access/Ownable.sol#21) (state variable) MockToken.initialize(string,string).name (contracts/mocks/MockToken.sol#8) shadows: - ERC20Upgradeable.name() (contracts/oz/token/ERC20/ERC20Upgradeable.sol#80-82) (function) MockToken.initialize(string,string).symbol (contracts/mocks/MockToken.sol#8) shadows: - ERC20Upgradeable.symbol() (contracts/oz/token/ERC20/ERC20Upgradeable.sol#88-90) (function) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing INFO:Detectors: DomainPurchaser.setPlatformFee(uint256) (contracts/controllers/DomainPurchaser.sol#271-276) should emit an event for: - platformFee = fee (contracts/controllers/DomainPurchaser.sol#275) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic INFO:Detectors: DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._platformWallet (contracts/controllers/DomainPurchaser.sol#83) lacks a zero-check on : - platformWallet = _platformWallet (contracts/controllers/DomainPurchaser.sol#90) Ownable2Step.transferOwnership(address).newOwner (contracts/mocks/MockOwnedRegistrant.sol#38) lacks a zero-check on : - _pendingOwner = newOwner (contracts/mocks/MockOwnedRegistrant.sol#40) ZNSHub.initialize(address,address).defaultRegistrar_ (contracts/registrar/ZNSHub.sol#101) lacks a zero-check on : - defaultRegistrar = defaultRegistrar_ (contracts/registrar/ZNSHub.sol#108) ZNSHub.initialize(address,address).registrarBeacon_ (contracts/registrar/ZNSHub.sol#101) lacks a zero-check on : - beacon = registrarBeacon_ (contracts/registrar/ZNSHub.sol#109) ZNSHub.setDefaultRegistrar(address).defaultRegistrar_ (contracts/registrar/ZNSHub.sol#112) lacks a zero-check on : - defaultRegistrar = defaultRegistrar_ (contracts/registrar/ZNSHub.sol#113) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation INFO:Detectors: Modifier TransparentUpgradeableProxy.ifAdmin() (contracts/UpgradeableBeacon.sol#861-867) does not always execute _; or revertReference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier INFO:Detectors: OperatorFilterer._onlyAllowedOperator(address) (contracts/opensea/OperatorFilterer.sol#53-65) has external calls inside a loop: ! OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this),msg.sender) (contracts/opensea/OperatorFilterer.sol#61) Registrar._transfer(address,address,uint256) (contracts/registrar/Registrar.sol#634-643) has external calls inside a loop: zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) Registrar._setDomainMetadataUri(uint256,string) (contracts/registrar/Registrar.sol#657-670) has external calls inside a loop: zNSHub.metadataChanged(id,uri) (contracts/registrar/Registrar.sol#669) Registrar._registerDomainV2(uint256,string,address,string,uint256,bool,uint256,uint256) (contracts/registrar/Registrar.sol#347-416) has external calls inside a loop: zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop INFO:Detectors: Reentrancy in Registrar.createDomainGroup(string) (contracts/registrar/Registrar.sol#94-106): External calls: - _onlyController() (contracts/registrar/Registrar.sol#97) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) State variables written after the call(s): - domainGroups[numDomainGroups + 1] = DomainGroup(baseMetadataUri) (contracts/registrar/Registrar.sol#98-100) - ++ numDomainGroups (contracts/registrar/Registrar.sol#101) Reentrancy in Registrar.registerDomain(uint256,string,address,string,uint256,bool) (contracts/registrar/Registrar.sol#235-253): External calls: - _onlyController() (contracts/registrar/Registrar.sol#243) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#244-252) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) State variables written after the call(s): - _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#244-252) - _tokenURIs[tokenId] = _tokenURI (contracts/oz/token/ERC721/ERC721Upgradeable.sol#535) Reentrancy in Registrar.registerDomainAndSend(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#255-279): External calls: - _onlyController() (contracts/registrar/Registrar.sol#264) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) State variables written after the call(s): - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) - _tokenURIs[tokenId] = _tokenURI (contracts/oz/token/ERC721/ERC721Upgradeable.sol#535) Reentrancy in Registrar.registerDomainAndSend(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#255-279): External calls: - _onlyController() (contracts/registrar/Registrar.sol#264) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) - returndata = to.functionCall(abi.encodeWithSelector(IERC721ReceiverUpgradeable(to).onERC721Received.selector,_msgSender(),from,tokenId,_data),ERC721: transfer to non ERC721Receiver implementer) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#566-575) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) External calls sending eth: - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) State variables written after the call(s): - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - _tokenApprovals[tokenId] = to (contracts/oz/token/ERC721/ERC721Upgradeable.sol#586) Reentrancy in Registrar.registerDomainAndSendBulk(uint256,uint256,uint256,uint256,address,string,uint256,bool) (contracts/registrar/Registrar.sol#793-820): External calls: - _onlyController() (contracts/registrar/Registrar.sol#803) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - result = _registerDomain(parentId,CustomStrings.toString(i + namingOffset),minter,string(abi.encodePacked(folderWithIPFSPrefix,CustomStrings.toString(i))),royaltyAmount,locked) (contracts/registrar/Registrar.sol#809-818) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) State variables written after the call(s): - result = _registerDomain(parentId,CustomStrings.toString(i + namingOffset),minter,string(abi.encodePacked(folderWithIPFSPrefix,CustomStrings.toString(i))),royaltyAmount,locked) (contracts/registrar/Registrar.sol#809-818) - _tokenURIs[tokenId] = _tokenURI (contracts/oz/token/ERC721/ERC721Upgradeable.sol#535) Reentrancy in Registrar.registerDomainInGroupBulk(uint256,uint256,uint256,uint256,uint256,address,uint256,address) (contracts/registrar/Registrar.sol#822-853): External calls: - _onlyController() (contracts/registrar/Registrar.sol#832) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) State variables written after the call(s): - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) - _tokenApprovals[tokenId] = to (contracts/oz/token/ERC721/ERC721Upgradeable.sol#586) - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - _tokenURIs[tokenId] = _tokenURI (contracts/oz/token/ERC721/ERC721Upgradeable.sol#535) Reentrancy in Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324): External calls: - _onlyController() (contracts/registrar/Registrar.sol#290) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) State variables written after the call(s): - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - _tokenURIs[tokenId] = _tokenURI (contracts/oz/token/ERC721/ERC721Upgradeable.sol#535) Reentrancy in Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324): External calls: - _onlyController() (contracts/registrar/Registrar.sol#290) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - subdomainContract = address(new BeaconProxy(zNSHub.registrarBeacon(),)) (contracts/registrar/Registrar.sol#302-304) - Registrar(subdomainContract).initialize(address(this),id,Zer0 Name Service,ZNS,address(zNSHub)) (contracts/registrar/Registrar.sol#307-313) - zNSHub.addRegistrar(id,subdomainContract) (contracts/registrar/Registrar.sol#318) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) - returndata = to.functionCall(abi.encodeWithSelector(IERC721ReceiverUpgradeable(to).onERC721Received.selector,_msgSender(),from,tokenId,_data),ERC721: transfer to non ERC721Receiver implementer) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#566-575) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) External calls sending eth: - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) State variables written after the call(s): - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - _tokenApprovals[tokenId] = to (contracts/oz/token/ERC721/ERC721Upgradeable.sol#586) Reentrancy in Registrar.updateDomainGroup(uint256,string) (contracts/registrar/Registrar.sol#113-130): External calls: - _onlyController() (contracts/registrar/Registrar.sol#117) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) State variables written after the call(s): - domainGroups[id].baseMetadataUri = baseMetadataUri (contracts/registrar/Registrar.sol#127) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2 INFO:Detectors: Reentrancy in ERC1967Upgrade._upgradeToAndCallSecure(address,bytes,bool) (contracts/UpgradeableBeacon.sol#175-208): External calls: - Address.functionDelegateCall(newImplementation,data) (contracts/UpgradeableBeacon.sol#185) - Address.functionDelegateCall(newImplementation,abi.encodeWithSignature(upgradeTo(address),oldImplementation)) (contracts/UpgradeableBeacon.sol#194-197) Event emitted after the call(s): - Upgraded(newImplementation) (contracts/UpgradeableBeacon.sol#206) Reentrancy in DomainPurchaser.purchaseSubdomain(uint256,string,string) (contracts/controllers/DomainPurchaser.sol#112-193): External calls: - paymentToken.safeTransferFrom(msg.sender,platformWallet,price) (contracts/controllers/DomainPurchaser.sol#150) - paymentToken.safeTransferFrom(msg.sender,zNSHub.ownerOf(parentId),price - fee) (contracts/controllers/DomainPurchaser.sol#155-159) - paymentToken.safeTransferFrom(msg.sender,platformWallet,fee) (contracts/controllers/DomainPurchaser.sol#163) - createdDomainId = rootRegistrar.registerSubdomainContract(parentId,name,msg.sender,metadataUri,0,false,msg.sender) (contracts/controllers/DomainPurchaser.sol#170-178) Event emitted after the call(s): - NetworkPurchased(createdDomainId,msg.sender) (contracts/controllers/DomainPurchaser.sol#190) Reentrancy in Registrar.registerDomain(uint256,string,address,string,uint256,bool) (contracts/registrar/Registrar.sol#235-253): External calls: - _onlyController() (contracts/registrar/Registrar.sol#243) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#244-252) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) Event emitted after the call(s): - Transfer(address(0),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#456) - _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#244-252) Reentrancy in Registrar.registerDomainAndSend(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#255-279): External calls: - _onlyController() (contracts/registrar/Registrar.sol#264) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) Event emitted after the call(s): - Transfer(address(0),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#456) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) Reentrancy in Registrar.registerDomainAndSend(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#255-279): External calls: - _onlyController() (contracts/registrar/Registrar.sol#264) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#266-273) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) - returndata = to.functionCall(abi.encodeWithSelector(IERC721ReceiverUpgradeable(to).onERC721Received.selector,_msgSender(),from,tokenId,_data),ERC721: transfer to non ERC721Receiver implementer) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#566-575) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) External calls sending eth: - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) Event emitted after the call(s): - Approval(ERC721Upgradeable.ownerOf(tokenId),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#587) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) - Transfer(from,to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#521) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#276) Reentrancy in Registrar.registerDomainAndSendBulk(uint256,uint256,uint256,uint256,address,string,uint256,bool) (contracts/registrar/Registrar.sol#793-820): External calls: - _onlyController() (contracts/registrar/Registrar.sol#803) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - result = _registerDomain(parentId,CustomStrings.toString(i + namingOffset),minter,string(abi.encodePacked(folderWithIPFSPrefix,CustomStrings.toString(i))),royaltyAmount,locked) (contracts/registrar/Registrar.sol#809-818) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) Event emitted after the call(s): - Transfer(address(0),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#456) - result = _registerDomain(parentId,CustomStrings.toString(i + namingOffset),minter,string(abi.encodePacked(folderWithIPFSPrefix,CustomStrings.toString(i))),royaltyAmount,locked) (contracts/registrar/Registrar.sol#809-818) Reentrancy in Registrar.registerDomainInGroupBulk(uint256,uint256,uint256,uint256,uint256,address,uint256,address) (contracts/registrar/Registrar.sol#822-853): External calls: - _onlyController() (contracts/registrar/Registrar.sol#832) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) Event emitted after the call(s): - Approval(ERC721Upgradeable.ownerOf(tokenId),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#587) - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) - Transfer(address(0),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#456) - tokenId = _registerDomainV2(parentId,CustomStrings.toString(i + namingOffset),minter,,royaltyAmount,true,groupId,i) (contracts/registrar/Registrar.sol#838-847) - Transfer(from,to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#521) - _transfer(minter,sendTo,tokenId) (contracts/registrar/Registrar.sol#850) Reentrancy in Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324): External calls: - _onlyController() (contracts/registrar/Registrar.sol#290) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) Event emitted after the call(s): - Transfer(address(0),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#456) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) Reentrancy in Registrar.registerSubdomainContract(uint256,string,address,string,uint256,bool,address) (contracts/registrar/Registrar.sol#281-324): External calls: - _onlyController() (contracts/registrar/Registrar.sol#290) - ! controllers[msg.sender] && ! zNSHub.isController(msg.sender) (contracts/registrar/Registrar.sol#652) - id = _registerDomain(parentId,label,minter,metadataUri,royaltyAmount,locked) (contracts/registrar/Registrar.sol#292-299) - zNSHub.domainCreated(domainId,label,labelHash,parentId,minter,msg.sender,metadataUri,royaltyAmount,groupId,groupFileIndex) (contracts/registrar/Registrar.sol#402-413) - subdomainContract = address(new BeaconProxy(zNSHub.registrarBeacon(),)) (contracts/registrar/Registrar.sol#302-304) - Registrar(subdomainContract).initialize(address(this),id,Zer0 Name Service,ZNS,address(zNSHub)) (contracts/registrar/Registrar.sol#307-313) - zNSHub.addRegistrar(id,subdomainContract) (contracts/registrar/Registrar.sol#318) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - zNSHub.domainTransferred(from,to,tokenId) (contracts/registrar/Registrar.sol#642) - returndata = to.functionCall(abi.encodeWithSelector(IERC721ReceiverUpgradeable(to).onERC721Received.selector,_msgSender(),from,tokenId,_data),ERC721: transfer to non ERC721Receiver implementer) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#566-575) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) External calls sending eth: - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) Event emitted after the call(s): - Approval(ERC721Upgradeable.ownerOf(tokenId),to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#587) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) - Transfer(from,to,tokenId) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#521) - _safeTransfer(minter,sendToUser,id,) (contracts/registrar/Registrar.sol#321) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 INFO:Detectors: EnumerableSet.values(EnumerableSet.Bytes32Set) (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#219-229) uses assembly - INLINE ASM (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#224-226) EnumerableSet.values(EnumerableSet.AddressSet) (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#293-303) uses assembly - INLINE ASM (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#298-300) EnumerableSet.values(EnumerableSet.UintSet) (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#367-377) uses assembly - INLINE ASM (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#372-374) Proxy._delegate(address) (contracts/UpgradeableBeacon.sol#32-56) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#34-55) Address.isContract(address) (contracts/UpgradeableBeacon.sol#322-333) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#329-331) Address._verifyCallResult(bool,bytes,string) (contracts/UpgradeableBeacon.sol#518-539) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#531-534) StorageSlot.getAddressSlot(bytes32) (contracts/UpgradeableBeacon.sol#588-596) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#593-595) StorageSlot.getBooleanSlot(bytes32) (contracts/UpgradeableBeacon.sol#601-609) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#606-608) StorageSlot.getBytes32Slot(bytes32) (contracts/UpgradeableBeacon.sol#614-622) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#619-621) StorageSlot.getUint256Slot(bytes32) (contracts/UpgradeableBeacon.sol#627-635) uses assembly - INLINE ASM (contracts/UpgradeableBeacon.sol#632-634) Proxy._delegate(address) (contracts/oz/proxy/Proxy.sol#22-45) uses assembly - INLINE ASM (contracts/oz/proxy/Proxy.sol#23-44) Address.verifyCallResult(bool,bytes,string) (contracts/oz/utils/Address.sol#229-249) uses assembly - INLINE ASM (contracts/oz/utils/Address.sol#241-244) AddressUpgradeable.isContract(address) (contracts/oz/utils/AddressUpgradeable.sol#26-37) uses assembly - INLINE ASM (contracts/oz/utils/AddressUpgradeable.sol#33-35) AddressUpgradeable._verifyCallResult(bool,bytes,string) (contracts/oz/utils/AddressUpgradeable.sol#186-207) uses assembly - INLINE ASM (contracts/oz/utils/AddressUpgradeable.sol#199-202) EnumerableSet.values(EnumerableSet.Bytes32Set) (contracts/oz/utils/EnumerableSet.sol#234-248) uses assembly - INLINE ASM (contracts/oz/utils/EnumerableSet.sol#243-245) EnumerableSet.values(EnumerableSet.AddressSet) (contracts/oz/utils/EnumerableSet.sol#323-337) uses assembly - INLINE ASM (contracts/oz/utils/EnumerableSet.sol#332-334) EnumerableSet.values(EnumerableSet.UintSet) (contracts/oz/utils/EnumerableSet.sol#409-423) uses assembly - INLINE ASM (contracts/oz/utils/EnumerableSet.sol#418-420) StorageSlot.getAddressSlot(bytes32) (contracts/oz/utils/StorageSlot.sol#52-60) uses assembly - INLINE ASM (contracts/oz/utils/StorageSlot.sol#57-59) StorageSlot.getBooleanSlot(bytes32) (contracts/oz/utils/StorageSlot.sol#65-73) uses assembly - INLINE ASM (contracts/oz/utils/StorageSlot.sol#70-72) StorageSlot.getBytes32Slot(bytes32) (contracts/oz/utils/StorageSlot.sol#78-86) uses assembly - INLINE ASM (contracts/oz/utils/StorageSlot.sol#83-85) StorageSlot.getUint256Slot(bytes32) (contracts/oz/utils/StorageSlot.sol#91-99) uses assembly - INLINE ASM (contracts/oz/utils/StorageSlot.sol#96-98) AddressUpgradeable.isContract(address) (contracts/oz442/utils/AddressUpgradeable.sol#27-37) uses assembly - INLINE ASM (contracts/oz442/utils/AddressUpgradeable.sol#33-35) AddressUpgradeable.verifyCallResult(bool,bytes,string) (contracts/oz442/utils/AddressUpgradeable.sol#189-209) uses assembly - INLINE ASM (contracts/oz442/utils/AddressUpgradeable.sol#201-204) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage INFO:Detectors: Different versions of Solidity are used: - Version used: ['^0.8.0', '^0.8.1', '^0.8.11', '^0.8.13', '^0.8.2', '^0.8.9'] - ^0.8.0 (node_modules/@openzeppelin/contracts/access/Ownable.sol#4) - ^0.8.0 (node_modules/@openzeppelin/contracts/utils/Context.sol#4) - ^0.8.0 (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#5) - ^0.8.0 (contracts/interfaces/IResourceRegistry.sol#3) - ^0.8.0 (contracts/interfaces/IZNAResolver.sol#3) - ^0.8.0 (contracts/oz/access/Ownable.sol#4) - ^0.8.0 (contracts/oz/interfaces/draft-IERC1822.sol#4) - ^0.8.0 (contracts/oz/proxy/ERC1967/ERC1967Proxy.sol#4) - ^0.8.0 (contracts/oz/proxy/Proxy.sol#4) - ^0.8.0 (contracts/oz/proxy/beacon/BeaconProxy.sol#4) - ^0.8.0 (contracts/oz/proxy/beacon/IBeacon.sol#4) - ^0.8.0 (contracts/oz/proxy/beacon/UpgradeableBeacon.sol#4) - ^0.8.0 (contracts/oz/utils/Context.sol#4) - ^0.8.0 (contracts/oz/utils/EnumerableSet.sol#5) - ^0.8.0 (contracts/oz/utils/StorageSlot.sol#4) - ^0.8.0 (contracts/oz442/access/AccessControlUpgradeable.sol#4) - ^0.8.0 (contracts/oz442/access/IAccessControlUpgradeable.sol#4) - ^0.8.0 (contracts/oz442/proxy/utils/Initializable.sol#4) - ^0.8.0 (contracts/oz442/utils/AddressUpgradeable.sol#4) - ^0.8.0 (contracts/oz442/utils/ContextUpgradeable.sol#4) - ^0.8.0 (contracts/oz442/utils/StringsUpgradeable.sol#4) - ^0.8.0 (contracts/oz442/utils/introspection/ERC165Upgradeable.sol#4) - ^0.8.0 (contracts/oz442/utils/introspection/IERC165Upgradeable.sol#4) - ^0.8.1 (contracts/oz/utils/Address.sol#4) - ^0.8.11 (contracts/CustomStrings.sol#2) - ^0.8.11 (contracts/controllers/DomainPurchaser.sol#2) - ^0.8.11 (contracts/interfaces/IDomainPurchaser.sol#2) - ^0.8.11 (contracts/libraries/ResourceType.sol#2) - ^0.8.11 (contracts/mocks/MockResourceRegistry.sol#2) - ^0.8.11 (contracts/registrar/Registrar.sol#2) - ^0.8.11 (contracts/resolver/ZNAResolver.sol#2) - ^0.8.13 (contracts/opensea/IOperatorFilterRegistry.sol#2) - ^0.8.13 (contracts/opensea/OperatorFilterer.sol#2) - ^0.8.13 (contracts/opensea/RevokableOperatorFilterer.sol#2) - ^0.8.13 (node_modules/operator-filter-registry/src/IOperatorFilterRegistry.sol#2) - ^0.8.13 (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#2) - ^0.8.13 (node_modules/operator-filter-registry/src/OperatorFilterRegistryErrorsAndEvents.sol#2) - ^0.8.2 (contracts/UpgradeableBeacon.sol#2) - ^0.8.2 (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#4) - ^0.8.9 (contracts/SimpleTokenSafelist.sol#2) - ^0.8.9 (contracts/controllers/AuthBasicController.sol#2) - ^0.8.9 (contracts/controllers/SubdomainController.sol#2) - ^0.8.9 (contracts/interfaces/IBasicController.sol#2) - ^0.8.9 (contracts/interfaces/IRegistrar.sol#2) - ^0.8.9 (contracts/interfaces/IStakingController.sol#2) - ^0.8.9 (contracts/interfaces/IStakingControllerV2.sol#2) - ^0.8.9 (contracts/interfaces/ITokenSafelist.sol#2) - ^0.8.9 (contracts/interfaces/IZNSHub.sol#2) - ^0.8.9 (contracts/mocks/MockOwnedRegistrant.sol#2) - ^0.8.9 (contracts/mocks/MockToken.sol#2) - ^0.8.9 (contracts/oz/access/OwnableUpgradeable.sol#3) - ^0.8.9 (contracts/oz/introspection/ERC165Upgradeable.sol#3) - ^0.8.9 (contracts/oz/introspection/IERC165Upgradeable.sol#3) - ^0.8.9 (contracts/oz/math/SafeMathUpgradeable.sol#3) - ^0.8.9 (contracts/oz/proxy/Initializable.sol#4) - ^0.8.9 (contracts/oz/token/ERC20/ERC20Upgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC20/IERC20Upgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/ERC721HolderUpgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/ERC721PausableUpgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/ERC721Upgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/IERC721EnumerableUpgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/IERC721MetadataUpgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/IERC721ReceiverUpgradeable.sol#3) - ^0.8.9 (contracts/oz/token/ERC721/IERC721Upgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/AddressUpgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/ContextUpgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/EnumerableMapUpgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/EnumerableSetUpgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/PausableUpgradeable.sol#3) - ^0.8.9 (contracts/oz/utils/StringsUpgradeable.sol#3) - ^0.8.9 (contracts/registrar/ZNSHub.sol#2) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used INFO:Detectors: AccessControlUpgradeable._setRoleAdmin(bytes32,bytes32) (contracts/oz442/access/AccessControlUpgradeable.sol#234-238) is never used and should be removed Address.functionCall(address,bytes) (contracts/UpgradeableBeacon.sol#380-385) is never used and should be removed Address.functionCall(address,bytes,string) (contracts/UpgradeableBeacon.sol#393-399) is never used and should be removed Address.functionCallWithValue(address,bytes,uint256) (contracts/UpgradeableBeacon.sol#412-424) is never used and should be removed Address.functionCallWithValue(address,bytes,uint256,string) (contracts/UpgradeableBeacon.sol#432-447) is never used and should be removed Address.functionStaticCall(address,bytes) (contracts/UpgradeableBeacon.sol#455-462) is never used and should be removed Address.functionStaticCall(address,bytes,string) (contracts/UpgradeableBeacon.sol#470-480) is never used and should be removed Address.sendValue(address,uint256) (contracts/UpgradeableBeacon.sol#351-360) is never used and should be removed AddressUpgradeable.functionCall(address,bytes) (contracts/oz442/utils/AddressUpgradeable.sol#83-88) is never used and should be removed AddressUpgradeable.functionCallWithValue(address,bytes,uint256) (contracts/oz442/utils/AddressUpgradeable.sol#115-127) is never used and should be removed AddressUpgradeable.functionStaticCall(address,bytes) (contracts/oz442/utils/AddressUpgradeable.sol#157-164) is never used and should be removed AddressUpgradeable.functionStaticCall(address,bytes,string) (contracts/oz442/utils/AddressUpgradeable.sol#172-181) is never used and should be removed AddressUpgradeable.sendValue(address,uint256) (contracts/oz442/utils/AddressUpgradeable.sol#55-63) is never used and should be removed AddressUpgradeable.verifyCallResult(bool,bytes,string) (contracts/oz442/utils/AddressUpgradeable.sol#189-209) is never used and should be removed BeaconProxy._beacon() (contracts/UpgradeableBeacon.sol#1084-1086) is never used and should be removed BeaconProxy._setBeacon(address,bytes) (contracts/UpgradeableBeacon.sol#1105-1107) is never used and should be removed Context._msgData() (contracts/UpgradeableBeacon.sol#653-656) is never used and should be removed ContextUpgradeable._msgData() (contracts/oz/utils/ContextUpgradeable.sol#27-30) is never used and should be removed ERC1967Upgrade._upgradeToAndCallSecure(address,bytes,bool) (contracts/UpgradeableBeacon.sol#175-208) is never used and should be removed ERC1967Upgrade._upgradeToAndCallUUPS(address,bytes,bool) (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#86-109) is never used and should be removed ERC20Upgradeable._burn(address,uint256) (contracts/oz/token/ERC20/ERC20Upgradeable.sol#324-335) is never used and should be removed ERC20Upgradeable._setupDecimals(uint8) (contracts/oz/token/ERC20/ERC20Upgradeable.sol#369-371) is never used and should be removed ERC721Upgradeable._safeMint(address,uint256) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#414-416) is never used and should be removed ERC721Upgradeable._safeMint(address,uint256,bytes) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#422-432) is never used and should be removed ERC721Upgradeable._setBaseURI(string) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#543-545) is never used and should be removed EnumerableMapUpgradeable._get(EnumerableMapUpgradeable.Map,bytes32) (contracts/oz/utils/EnumerableMapUpgradeable.sol#176-180) is never used and should be removed EnumerableMapUpgradeable._tryGet(EnumerableMapUpgradeable.Map,bytes32) (contracts/oz/utils/EnumerableMapUpgradeable.sol#159-167) is never used and should be removed EnumerableMapUpgradeable.get(EnumerableMapUpgradeable.UintToAddressMap,uint256) (contracts/oz/utils/EnumerableMapUpgradeable.sol#293-299) is never used and should be removed EnumerableMapUpgradeable.tryGet(EnumerableMapUpgradeable.UintToAddressMap,uint256) (contracts/oz/utils/EnumerableMapUpgradeable.sol#277-284) is never used and should be removed EnumerableSet.add(EnumerableSet.UintSet,uint256) (contracts/oz/utils/EnumerableSet.sol#351-353) is never used and should be removed EnumerableSet.at(EnumerableSet.UintSet,uint256) (contracts/oz/utils/EnumerableSet.sol#393-399) is never used and should be removed EnumerableSet.contains(EnumerableSet.UintSet,uint256) (contracts/oz/utils/EnumerableSet.sol#368-374) is never used and should be removed EnumerableSet.length(EnumerableSet.UintSet) (contracts/oz/utils/EnumerableSet.sol#379-381) is never used and should be removed EnumerableSet.remove(EnumerableSet.UintSet,uint256) (contracts/oz/utils/EnumerableSet.sol#361-363) is never used and should be removed EnumerableSet.values(EnumerableSet.UintSet) (contracts/oz/utils/EnumerableSet.sol#409-423) is never used and should be removed EnumerableSetUpgradeable.add(EnumerableSetUpgradeable.AddressSet,address) (contracts/oz/utils/EnumerableSetUpgradeable.sol#216-218) is never used and should be removed EnumerableSetUpgradeable.add(EnumerableSetUpgradeable.Bytes32Set,bytes32) (contracts/oz/utils/EnumerableSetUpgradeable.sol#151-153) is never used and should be removed EnumerableSetUpgradeable.at(EnumerableSetUpgradeable.AddressSet,uint256) (contracts/oz/utils/EnumerableSetUpgradeable.sol#261-267) is never used and should be removed EnumerableSetUpgradeable.at(EnumerableSetUpgradeable.Bytes32Set,uint256) (contracts/oz/utils/EnumerableSetUpgradeable.sol#196-202) is never used and should be removed EnumerableSetUpgradeable.contains(EnumerableSetUpgradeable.AddressSet,address) (contracts/oz/utils/EnumerableSetUpgradeable.sol#236-242) is never used and should be removed EnumerableSetUpgradeable.contains(EnumerableSetUpgradeable.Bytes32Set,bytes32) (contracts/oz/utils/EnumerableSetUpgradeable.sol#171-177) is never used and should be removed EnumerableSetUpgradeable.contains(EnumerableSetUpgradeable.UintSet,uint256) (contracts/oz/utils/EnumerableSetUpgradeable.sol#298-304) is never used and should be removed EnumerableSetUpgradeable.length(EnumerableSetUpgradeable.AddressSet) (contracts/oz/utils/EnumerableSetUpgradeable.sol#247-249) is never used and should be removed EnumerableSetUpgradeable.length(EnumerableSetUpgradeable.Bytes32Set) (contracts/oz/utils/EnumerableSetUpgradeable.sol#182-184) is never used and should be removed EnumerableSetUpgradeable.remove(EnumerableSetUpgradeable.AddressSet,address) (contracts/oz/utils/EnumerableSetUpgradeable.sol#226-231) is never used and should be removed EnumerableSetUpgradeable.remove(EnumerableSetUpgradeable.Bytes32Set,bytes32) (contracts/oz/utils/EnumerableSetUpgradeable.sol#161-166) is never used and should be removed PausableUpgradeable.__Pausable_init() (contracts/oz/utils/PausableUpgradeable.sol#33-36) is never used and should be removed Registrar._getAdmin() (contracts/registrar/Registrar.sol#132-134) is never used and should be removed RevokableOperatorFilterer._onlyAllowedOperator(address) (contracts/opensea/RevokableOperatorFilterer.sol#19-37) is never used and should be removed RevokableOperatorFilterer._onlyAllowedOperatorApproval(address) (contracts/opensea/RevokableOperatorFilterer.sol#39-53) is never used and should be removed SafeERC20Upgradeable.safeApprove(IERC20Upgradeable,address,uint256) (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#52-69) is never used and should be removed SafeERC20Upgradeable.safeDecreaseAllowance(IERC20Upgradeable,address,uint256) (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#83-96) is never used and should be removed SafeERC20Upgradeable.safeIncreaseAllowance(IERC20Upgradeable,address,uint256) (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#71-81) is never used and should be removed SafeERC20Upgradeable.safeTransfer(IERC20Upgradeable,address,uint256) (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#22-31) is never used and should be removed SafeMathUpgradeable.div(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#135-138) is never used and should be removed SafeMathUpgradeable.div(uint256,uint256,string) (contracts/oz/math/SafeMathUpgradeable.sol#194-201) is never used and should be removed SafeMathUpgradeable.mod(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#152-155) is never used and should be removed SafeMathUpgradeable.mod(uint256,uint256,string) (contracts/oz/math/SafeMathUpgradeable.sol#218-225) is never used and should be removed SafeMathUpgradeable.mul(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#116-121) is never used and should be removed SafeMathUpgradeable.sub(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#101-104) is never used and should be removed SafeMathUpgradeable.tryAdd(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#24-28) is never used and should be removed SafeMathUpgradeable.tryDiv(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#60-63) is never used and should be removed SafeMathUpgradeable.tryMod(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#70-73) is never used and should be removed SafeMathUpgradeable.tryMul(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#45-53) is never used and should be removed SafeMathUpgradeable.trySub(uint256,uint256) (contracts/oz/math/SafeMathUpgradeable.sol#35-38) is never used and should be removed StorageSlot.getBooleanSlot(bytes32) (contracts/oz/utils/StorageSlot.sol#65-73) is never used and should be removed StorageSlot.getBytes32Slot(bytes32) (contracts/oz/utils/StorageSlot.sol#78-86) is never used and should be removed StorageSlot.getUint256Slot(bytes32) (contracts/oz/utils/StorageSlot.sol#91-99) is never used and should be removed StringsUpgradeable.toHexString(uint256) (contracts/oz442/utils/StringsUpgradeable.sol#40-51) is never used and should be removed TransparentUpgradeableProxy._admin() (contracts/UpgradeableBeacon.sol#933-935) is never used and should be removed Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code INFO:Detectors: Pragma version^0.8.0 (node_modules/@openzeppelin/contracts/access/Ownable.sol#4) allows old versions Pragma version^0.8.0 (node_modules/@openzeppelin/contracts/utils/Context.sol#4) allows old versions Pragma version^0.8.0 (node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol#5) allows old versions Pragma version^0.8.11 (contracts/CustomStrings.sol#2) allows old versions Pragma version^0.8.9 (contracts/SimpleTokenSafelist.sol#2) allows old versions Pragma version^0.8.2 (contracts/UpgradeableBeacon.sol#2) allows old versions Pragma version^0.8.9 (contracts/controllers/AuthBasicController.sol#2) allows old versions Pragma version^0.8.11 (contracts/controllers/DomainPurchaser.sol#2) allows old versions Pragma version^0.8.9 (contracts/controllers/SubdomainController.sol#2) allows old versions Pragma version^0.8.9 (contracts/interfaces/IBasicController.sol#2) allows old versions Pragma version^0.8.11 (contracts/interfaces/IDomainPurchaser.sol#2) allows old versions Pragma version^0.8.9 (contracts/interfaces/IRegistrar.sol#2) allows old versions Pragma version^0.8.0 (contracts/interfaces/IResourceRegistry.sol#3) allows old versions Pragma version^0.8.9 (contracts/interfaces/IStakingController.sol#2) allows old versions Pragma version^0.8.9 (contracts/interfaces/IStakingControllerV2.sol#2) allows old versions Pragma version^0.8.9 (contracts/interfaces/ITokenSafelist.sol#2) allows old versions Pragma version^0.8.0 (contracts/interfaces/IZNAResolver.sol#3) allows old versions Pragma version^0.8.9 (contracts/interfaces/IZNSHub.sol#2) allows old versions Pragma version^0.8.11 (contracts/libraries/ResourceType.sol#2) allows old versions Pragma version^0.8.9 (contracts/mocks/MockOwnedRegistrant.sol#2) allows old versions Pragma version^0.8.11 (contracts/mocks/MockResourceRegistry.sol#2) allows old versions Pragma version^0.8.9 (contracts/mocks/MockToken.sol#2) allows old versions Pragma version^0.8.13 (contracts/opensea/IOperatorFilterRegistry.sol#2) allows old versions Pragma version^0.8.13 (contracts/opensea/OperatorFilterer.sol#2) allows old versions Pragma version^0.8.13 (contracts/opensea/RevokableOperatorFilterer.sol#2) allows old versions Pragma version^0.8.0 (contracts/oz/access/Ownable.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/access/OwnableUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz/interfaces/draft-IERC1822.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/introspection/ERC165Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/introspection/IERC165Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/math/SafeMathUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz/proxy/ERC1967/ERC1967Proxy.sol#4) allows old versions Pragma version^0.8.2 (contracts/oz/proxy/ERC1967/ERC1967Upgrade.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/proxy/Initializable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz/proxy/Proxy.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz/proxy/beacon/BeaconProxy.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz/proxy/beacon/IBeacon.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz/proxy/beacon/UpgradeableBeacon.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC20/ERC20Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC20/IERC20Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC20/SafeERC20Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/ERC721HolderUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/ERC721PausableUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/ERC721Upgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/IERC721EnumerableUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/IERC721MetadataUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/IERC721ReceiverUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/token/ERC721/IERC721Upgradeable.sol#3) allows old versions Pragma version^0.8.1 (contracts/oz/utils/Address.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/utils/AddressUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz/utils/Context.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/utils/ContextUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/utils/EnumerableMapUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz/utils/EnumerableSet.sol#5) allows old versions Pragma version^0.8.9 (contracts/oz/utils/EnumerableSetUpgradeable.sol#3) allows old versions Pragma version^0.8.9 (contracts/oz/utils/PausableUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz/utils/StorageSlot.sol#4) allows old versions Pragma version^0.8.9 (contracts/oz/utils/StringsUpgradeable.sol#3) allows old versions Pragma version^0.8.0 (contracts/oz442/access/AccessControlUpgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/access/IAccessControlUpgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/proxy/utils/Initializable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/utils/AddressUpgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/utils/ContextUpgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/utils/StringsUpgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/utils/introspection/ERC165Upgradeable.sol#4) allows old versions Pragma version^0.8.0 (contracts/oz442/utils/introspection/IERC165Upgradeable.sol#4) allows old versions Pragma version^0.8.11 (contracts/registrar/Registrar.sol#2) allows old versions Pragma version^0.8.9 (contracts/registrar/ZNSHub.sol#2) allows old versions Pragma version^0.8.11 (contracts/resolver/ZNAResolver.sol#2) allows old versions Pragma version^0.8.13 (node_modules/operator-filter-registry/src/IOperatorFilterRegistry.sol#2) allows old versions Pragma version^0.8.13 (node_modules/operator-filter-registry/src/OperatorFilterRegistry.sol#2) allows old versions Pragma version^0.8.13 (node_modules/operator-filter-registry/src/OperatorFilterRegistryErrorsAndEvents.sol#2) allows old versions solc-0.8.13 is not recommended for deployment Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity INFO:Detectors: Low level call in Address.sendValue(address,uint256) (contracts/UpgradeableBeacon.sol#351-360): - (success) = recipient.call{value: amount}() (contracts/UpgradeableBeacon.sol#355) Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (contracts/UpgradeableBeacon.sol#432-447): - (success,returndata) = target.call{value: value}(data) (contracts/UpgradeableBeacon.sol#445) Low level call in Address.functionStaticCall(address,bytes,string) (contracts/UpgradeableBeacon.sol#470-480): - (success,returndata) = target.staticcall(data) (contracts/UpgradeableBeacon.sol#478) Low level call in Address.functionDelegateCall(address,bytes,string) (contracts/UpgradeableBeacon.sol#506-516): - (success,returndata) = target.delegatecall(data) (contracts/UpgradeableBeacon.sol#514) Low level call in ProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy) (contracts/UpgradeableBeacon.sol#961-974): - (success,returndata) = address(proxy).staticcall(0x5c60da1b) (contracts/UpgradeableBeacon.sol#969-971) Low level call in ProxyAdmin.getProxyAdmin(TransparentUpgradeableProxy) (contracts/UpgradeableBeacon.sol#983-996): - (success,returndata) = address(proxy).staticcall(0xf851a440) (contracts/UpgradeableBeacon.sol#991-993) Low level call in Address.sendValue(address,uint256) (contracts/oz/utils/Address.sol#60-68): - (success) = recipient.call{value: amount}() (contracts/oz/utils/Address.sol#63) Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (contracts/oz/utils/Address.sol#140-154): - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/Address.sol#152) Low level call in Address.functionStaticCall(address,bytes,string) (contracts/oz/utils/Address.sol#177-186): - (success,returndata) = target.staticcall(data) (contracts/oz/utils/Address.sol#184) Low level call in Address.functionDelegateCall(address,bytes,string) (contracts/oz/utils/Address.sol#212-221): - (success,returndata) = target.delegatecall(data) (contracts/oz/utils/Address.sol#219) Low level call in AddressUpgradeable.sendValue(address,uint256) (contracts/oz/utils/AddressUpgradeable.sol#55-64): - (success) = recipient.call{value: amount}() (contracts/oz/utils/AddressUpgradeable.sol#59) Low level call in AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (contracts/oz/utils/AddressUpgradeable.sol#136-151): - (success,returndata) = target.call{value: value}(data) (contracts/oz/utils/AddressUpgradeable.sol#149) Low level call in AddressUpgradeable.functionStaticCall(address,bytes,string) (contracts/oz/utils/AddressUpgradeable.sol#174-184): - (success,returndata) = target.staticcall(data) (contracts/oz/utils/AddressUpgradeable.sol#182) Low level call in AddressUpgradeable.sendValue(address,uint256) (contracts/oz442/utils/AddressUpgradeable.sol#55-63): - (success) = recipient.call{value: amount}() (contracts/oz442/utils/AddressUpgradeable.sol#58) Low level call in AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (contracts/oz442/utils/AddressUpgradeable.sol#135-149): - (success,returndata) = target.call{value: value}(data) (contracts/oz442/utils/AddressUpgradeable.sol#147) Low level call in AddressUpgradeable.functionStaticCall(address,bytes,string) (contracts/oz442/utils/AddressUpgradeable.sol#172-181): - (success,returndata) = target.staticcall(data) (contracts/oz442/utils/AddressUpgradeable.sol#179) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls INFO:Detectors: Parameter AuthBasicController.initialize(IRegistrar)._registrar (contracts/controllers/AuthBasicController.sol#33) is not in mixedCase Parameter DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._paymentToken (contracts/controllers/DomainPurchaser.sol#81) is not in mixedCase Parameter DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._zNSHub (contracts/controllers/DomainPurchaser.sol#82) is not in mixedCase Parameter DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._platformWallet (contracts/controllers/DomainPurchaser.sol#83) is not in mixedCase Parameter DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._rootPrices (contracts/controllers/DomainPurchaser.sol#84) is not in mixedCase Parameter DomainPurchaser.initialize(address,address,address,IDomainPurchaser.PricingData,uint256)._platformFee (contracts/controllers/DomainPurchaser.sol#85) is not in mixedCase Constant DomainPurchaser.shortNameLength (contracts/controllers/DomainPurchaser.sol#19) is not in UPPER_CASE_WITH_UNDERSCORES Constant DomainPurchaser.mediumNameLength (contracts/controllers/DomainPurchaser.sol#21) is not in UPPER_CASE_WITH_UNDERSCORES Constant DomainPurchaser.maxNameLength (contracts/controllers/DomainPurchaser.sol#23) is not in UPPER_CASE_WITH_UNDERSCORES Constant DomainPurchaser.divisionBasisPlatformFee (contracts/controllers/DomainPurchaser.sol#26) is not in UPPER_CASE_WITH_UNDERSCORES Constant MockOwnedRegistrant.registry (contracts/mocks/MockOwnedRegistrant.sol#72) is not in UPPER_CASE_WITH_UNDERSCORES Parameter MockResourceRegistry.addResource(uint256)._zNA (contracts/mocks/MockResourceRegistry.sol#32) is not in mixedCase Parameter MockResourceRegistry.addResourceExploit(uint256,uint256)._zNA (contracts/mocks/MockResourceRegistry.sol#40) is not in mixedCase Parameter MockResourceRegistry.addResourceExploit(uint256,uint256)._resourceType (contracts/mocks/MockResourceRegistry.sol#40) is not in mixedCase Parameter MockResourceRegistry.resourceExists(uint256)._resourceID (contracts/mocks/MockResourceRegistry.sol#59) is not in mixedCase Function OwnableUpgradeable.__Ownable_init() (contracts/oz/access/OwnableUpgradeable.sol#31-34) is not in mixedCase Function OwnableUpgradeable.__Ownable_init_unchained() (contracts/oz/access/OwnableUpgradeable.sol#36-40) is not in mixedCase Variable OwnableUpgradeable.__gap (contracts/oz/access/OwnableUpgradeable.sol#79) is not in mixedCase Function ERC165Upgradeable.__ERC165_init() (contracts/oz/introspection/ERC165Upgradeable.sol#25-27) is not in mixedCase Function ERC165Upgradeable.__ERC165_init_unchained() (contracts/oz/introspection/ERC165Upgradeable.sol#29-33) is not in mixedCase Variable ERC165Upgradeable.__gap (contracts/oz/introspection/ERC165Upgradeable.sol#66) is not in mixedCase Function ERC20Upgradeable.__ERC20_init(string,string) (contracts/oz/token/ERC20/ERC20Upgradeable.sol#60-66) is not in mixedCase Function ERC20Upgradeable.__ERC20_init_unchained(string,string) (contracts/oz/token/ERC20/ERC20Upgradeable.sol#68-75) is not in mixedCase Variable ERC20Upgradeable.__gap (contracts/oz/token/ERC20/ERC20Upgradeable.sol#393) is not in mixedCase Function ERC721HolderUpgradeable.__ERC721Holder_init() (contracts/oz/token/ERC721/ERC721HolderUpgradeable.sol#15-17) is not in mixedCase Function ERC721HolderUpgradeable.__ERC721Holder_init_unchained() (contracts/oz/token/ERC721/ERC721HolderUpgradeable.sol#19) is not in mixedCase Variable ERC721HolderUpgradeable.__gap (contracts/oz/token/ERC721/ERC721HolderUpgradeable.sol#35) is not in mixedCase Function ERC721PausableUpgradeable.__ERC721Pausable_init() (contracts/oz/token/ERC721/ERC721PausableUpgradeable.sol#21-26) is not in mixedCase Function ERC721PausableUpgradeable.__ERC721Pausable_init_unchained() (contracts/oz/token/ERC721/ERC721PausableUpgradeable.sol#28) is not in mixedCase Variable ERC721PausableUpgradeable.__gap (contracts/oz/token/ERC721/ERC721PausableUpgradeable.sol#47) is not in mixedCase Function ERC721Upgradeable.__ERC721_init(string,string) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#101-108) is not in mixedCase Function ERC721Upgradeable.__ERC721_init_unchained(string,string) (contracts/oz/token/ERC721/ERC721Upgradeable.sol#110-121) is not in mixedCase Parameter ERC721Upgradeable.safeTransferFrom(address,address,uint256,bytes)._data (contracts/oz/token/ERC721/ERC721Upgradeable.sol#332) is not in mixedCase Variable ERC721Upgradeable._tokenOwners (contracts/oz/token/ERC721/ERC721Upgradeable.sol#44) is not in mixedCase Variable ERC721Upgradeable.__gap (contracts/oz/token/ERC721/ERC721Upgradeable.sol#611) is not in mixedCase Function ContextUpgradeable.__Context_init() (contracts/oz/utils/ContextUpgradeable.sol#17-19) is not in mixedCase Function ContextUpgradeable.__Context_init_unchained() (contracts/oz/utils/ContextUpgradeable.sol#21) is not in mixedCase Variable ContextUpgradeable.__gap (contracts/oz/utils/ContextUpgradeable.sol#32) is not in mixedCase Function PausableUpgradeable.__Pausable_init() (contracts/oz/utils/PausableUpgradeable.sol#33-36) is not in mixedCase Function PausableUpgradeable.__Pausable_init_unchained() (contracts/oz/utils/PausableUpgradeable.sol#38-40) is not in mixedCase Variable PausableUpgradeable.__gap (contracts/oz/utils/PausableUpgradeable.sol#97) is not in mixedCase Function AccessControlUpgradeable.__AccessControl_init() (contracts/oz442/access/AccessControlUpgradeable.sol#56-60) is not in mixedCase Function AccessControlUpgradeable.__AccessControl_init_unchained() (contracts/oz442/access/AccessControlUpgradeable.sol#62) is not in mixedCase Variable AccessControlUpgradeable.__gap (contracts/oz442/access/AccessControlUpgradeable.sol#264) is not in mixedCase Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions INFO:Detectors: Redundant expression "this (contracts/UpgradeableBeacon.sol#654)" inContext (contracts/UpgradeableBeacon.sol#648-657) Redundant expression "this (contracts/oz/utils/ContextUpgradeable.sol#28)" inContextUpgradeable (contracts/oz/utils/ContextUpgradeable.sol#16-33) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements INFO:Detectors: Variable UpgradeableBeacon._implementation (contracts/UpgradeableBeacon.sol#733) is too similar to UpgradeableBeacon.constructor(address).implementation_ (contracts/UpgradeableBeacon.sol#744) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-too-similar INFO:Detectors: RevokableOperatorFilterer (contracts/opensea/RevokableOperatorFilterer.sol#13-76) does not implement functions: - RevokableOperatorFilterer.owner() (contracts/opensea/RevokableOperatorFilterer.sol#75) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions INFO:Detectors: Registrar.test (contracts/registrar/Registrar.sol#83) is never used in Registrar (contracts/registrar/Registrar.sol#14-854) Registrar.gap (contracts/registrar/Registrar.sol#84) is never used in Registrar (contracts/registrar/Registrar.sol#14-854) ZNSHub.test (contracts/registrar/ZNSHub.sol#94) is never used in ZNSHub (contracts/registrar/ZNSHub.sol#10-256) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable INFO:Detectors: Registrar.beacon (contracts/registrar/Registrar.sol#75) should be constant Registrar.gap (contracts/registrar/Registrar.sol#84) should be constant Registrar.test (contracts/registrar/Registrar.sol#83) should be constant ZNSHub.test (contracts/registrar/ZNSHub.sol#94) should be constant Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant INFO:Slither:. analyzed (85 contracts with 85 detectors), 321 result(s) found