# Architecture

<figure><img src="https://3494957108-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZ7muoZFvLiqwVPVN2LV%2Fuploads%2F1GgAAk1gbfUCfQGnprlW%2Fjazdid_16.webp?alt=media&#x26;token=d06c44f9-f1e0-467e-9dcb-38a624d7c3d7" alt=""><figcaption></figcaption></figure>

## Major Components

### RegistrarController

The unified portal for register and renewal of different top-level domains (TLD) will be charged according to the registration fees configured by different registrars.

### Registrar

The registrar is responsible for allocating subdomains. Registrars can be configured at any level, and are pointed to by the owner field of the registry.

### ReverseRegistrar

The registrar responsible for managing reverse resolution via the ***.addr.reverse*** special-purpose TLD.

The reverse registrar provides functions to claim a reverse record, as well as a convenience function to configure the record as it's most commonly used, as a way of specifying a canonical name for an address.

The reverse registrar is specified in [EIP 181](https://eips.ethereum.org/EIPS/eip-181).

### PublicResolver

PublicResolver implements a general-purpose resolver that is suitable for most standard use-cases. The public resolver permits updates to domain name records by the owner of the corresponding name.

### Registry

All domain name 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.

### BulkRegistrarController

Auxiliary contract of registrarController, support bulk query registration price, bulk search domain names availability, and batch renewal function.
