# CORE ID Registry

| description           |
| --------------------- |
| The CORE ID registry. |

### Registry

[Source](https://github.com/ensdomains/ens/blob/master/contracts/ENS.sol)

The CORE ID registry is the core contract that lies at the heart of CORE ID resolution. All CORE ID lookups start by querying the registry. The registry maintains a list of domains, recording the owner, resolver, and TTL for each, and allows the owner of a domain to make changes to that data.

The CORE ID registry is specified in [EIP 137](https://eips.ethereum.org/EIPS/eip-137).

### Get Owner

```
function owner(bytes32 node) external view returns (address);
```

Returns the owner of the name specified by `node`.

### Get Resolver

```
function resolver(bytes32 node) external view returns (address);
```

Returns the address of the resolver responsible for the name specified by `node`.

### Get TTL

```
function ttl(bytes32 node) external view returns (uint64);
```

Returns the caching time-to-live of the name specified by `node`. Systems that wish to cache information about a name, including ownership, resolver address, and records, should respect this value. If TTL is zero, new data should be fetched on each query.

### Set Owner

```
function setOwner(bytes32 node, address owner) external;
```

Reassigns ownership of the name identified by `node` to `owner`. Only callable by the current owner of the name.

Emits the following event:

```
event Transfer(bytes32 indexed node, address owner);
```

### Set Resolver

```
function setResolver(bytes32 node, address resolver) external;
```

Updates the resolver associated with the name identified by `node` to `resolver`. Only callable by the current owner of the name. `resolver` must specify the address of a contract that implements the Resolver interface.

Emits the following event:

```
event NewResolver(bytes32 indexed node, address resolver);
```

### Set TTL

```
function setTTL(bytes32 node, uint64 ttl) external;
```

Updates the caching time-to-live of the name identified by `node`. Only callable by the current owner of the name.

Emits the following event:

```
event NewTTL(bytes32 indexed node, uint64 ttl);
```

### Set Subdomain Owner

```
function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external;
```

Creates a new subdomain of `node`, assigning ownership of it to the specified `owner`. If the domain already exists, ownership is reassigned but the resolver and TTL are left unmodified.

`label` is the keccak256 hash of the subdomain label to create. For example, if you own *alice.c*ore and want to create the subdomain *iam.alice.core*, supply `namehash('alice.core')` as the `node`, and `keccak256('iam')` as the `label`.

Emits the following event:

```
event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
```

#### Set Record

```
function setRecord(bytes32 node, address owner, address resolver, uint64 ttl);
```

Sets the owner, resolver, and TTL for an CORE ID record in a single operation. This function is offered for convenience, and is exactly equivalent to calling `setResolver`, `setTTL` and `setOwner` in that order.

#### Set Subdomain Record

```
function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl);
```

Sets the owner, resolver and TTL for a subdomain, creating it if necessary. This function is offered for convenience, and permits setting all three fields without first transferring ownership of the subdomain to the caller.

#### Set Approval

```
function setApprovalForAll(address operator, bool approved);
```

Sets or clears an approval. Approved accounts can execute all CORE ID registry operations on behalf of the caller.

#### Check Approval

```
function isApprovedForAll(address owner, address operator) external view returns (bool);
```

Returns true if `operator` is approved to make CORE ID registry operations on behalf of `owner`.

#### Check Record Existence

```
function recordExists(bytes32 node) public view returns (bool);
```

Returns true if `node` exists in this CORE ID registry. This will return false for records that are in the legacy CORE ID registry but have not yet been migrated to the new one.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.coreid.org/core-id-registry.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
