Skip to main content
The ETH Registrar implements a registration system for .eth domain names with anti-frontrunning protection and flexible pricing.

Architecture

The ETH Registrar system consists of several components:
  • BaseRegistrar - Owns the .eth TLD and manages name ownership as ERC-721 tokens
  • ETHRegistrarController - Handles registration and renewal with commit-reveal process
  • BulkRenewal - Utility contract for renewing multiple names in one transaction
  • Price Oracles - Determine registration and renewal costs

Key Features

Name Ownership as NFTs

Each .eth name is represented as an ERC-721 NFT, allowing names to be transferred, sold, and managed using standard NFT tools.

Grace Period

Names have a 90-day grace period after expiration during which:
  • The owner can still renew the name
  • The name cannot be registered by others
  • The owner maintains control in the BaseRegistrar

Controller Pattern

The BaseRegistrar uses a controller pattern for extensibility:
  • The registrar owner can add/remove controllers
  • Controllers can register new names and extend expiries
  • Controllers cannot reduce expiry times or change ownership
  • This separation provides strong ownership guarantees while allowing innovation

Registration Flow

The ETHRegistrarController uses a two-step commit-reveal process:

Step 1: Commit

// Create a commitment
bytes32 commitment = controller.makeCommitment(registration);

// Submit the commitment
controller.commit(commitment);
Wait for the minimum commitment age (prevents miners from frontrunning).

Step 2: Register

// After waiting, reveal and register
controller.register{value: price}(registration);
The commitment must be revealed before it expires (maximum commitment age).

Why Commit-Reveal?

The commit-reveal process prevents frontrunning:
  1. Without it, miners or bots could see your registration transaction and submit their own with higher gas
  2. The commitment hides the name you want to register using a secret value
  3. The minimum delay ensures the commitment is included on-chain before you can reveal
  4. The maximum age prevents commitments from being valid indefinitely

Pricing

Prices are determined by price oracle contracts and typically based on:
  • Name length - Shorter names cost more
  • Duration - Longer registration periods cost more
  • Premium decay - Recently expired names may have a temporary premium that decays over time

Audits

These contracts were audited by ConsenSys Diligence. The audit report is available at: https://github.com/ConsenSys/ens-audit-report-2019-02

Next Steps

BaseRegistrar

Learn about the core registrar contract

ETHRegistrarController

Understand the registration controller

Price Oracles

Explore pricing mechanisms

Bulk Renewal

Renew multiple names at once

Build docs developers (and LLMs) love