The IRegistry interface is the foundational contract interface for ENS v2 registry functionality. It extends IERC1155Singleton to provide ERC1155-compliant token management for domain names while adding registry-specific features for subdomains, resolvers, and parent-child relationships.Interface Selector:0x51f67f40
// Renew a name for another yearuint64 newExpiry = uint64(block.timestamp + 365 days);IStandardRegistry(registry).renew(tokenId, newExpiry);// Emits: ExpiryUpdated(tokenId, newExpiry, msg.sender)
// Set a subregistry for a nameIStandardRegistry(registry).setSubregistry(tokenId, IRegistry(subregistryAddress));// Emits: SubregistryUpdated(tokenId, subregistryAddress, msg.sender)// Remove subregistryIStandardRegistry(registry).setSubregistry(tokenId, IRegistry(address(0)));// Emits: SubregistryUpdated(tokenId, address(0), msg.sender)
// Set a resolver for a nameIStandardRegistry(registry).setResolver(tokenId, resolverAddress);// Emits: ResolverUpdated(tokenId, resolverAddress, msg.sender)// Remove resolverIStandardRegistry(registry).setResolver(tokenId, address(0));// Emits: ResolverUpdated(tokenId, address(0), msg.sender)
Token regeneration occurs when roles are granted or revoked to maintain ERC1155 compliance. The token ID encodes role information, so role changes require a new token ID.
Example:
// Granting roles may trigger token regenerationIPermissionedRegistry(registry).grantRoles(resource, roleBitmap, account);// May emit: TokenRegenerated(oldTokenId, newTokenId)
// Set the canonical parent for this registryIStandardRegistry(registry).setParent(IRegistry(parentRegistry), "subdomain");// Emits: ParentUpdated(parentRegistry, "subdomain", msg.sender)
The address of the registry for this subdomain, or address(0) if none exists.
Example:
// Get the subregistry for a labelIRegistry subregistry = registry.getSubregistry("wallet");if (address(subregistry) != address(0)) { // Subregistry exists, can query further subdomains address resolver = subregistry.getResolver("alice");}
The address of a resolver responsible for this name, or address(0) if none exists.
Example:
// Get the resolver for a labeladdress resolver = registry.getResolver("alice");if (resolver != address(0)) { // Resolver exists, can query records bytes memory addr = IResolver(resolver).resolve( abi.encodeWithSignature("addr(bytes32)", node) );}