Skip to main content

Quick Start

This guide will help you start using ENS Contracts in your JavaScript/TypeScript or Solidity project.

JavaScript/TypeScript Usage

1

Import the contracts

Import the compiled contract JSON files in your JavaScript or TypeScript code:
import {
  BaseRegistrarImplementation,
  BulkRenewal,
  ENS,
  ENSRegistry,
  ENSRegistryWithFallback,
  ETHRegistrarController,
  FIFSRegistrar,
  LinearPremiumPriceOracle,
  PublicResolver,
  Resolver,
  ReverseRegistrar,
  StablePriceOracle,
  TestRegistrar,
} from '@ensdomains/ens-contracts'
Each import provides the compiled contract JSON including ABI, bytecode, and metadata.
2

Use with your Web3 library

Use the imported contracts with your preferred Web3 library:
import { ethers } from 'ethers'
import { ENSRegistry } from '@ensdomains/ens-contracts'

const provider = new ethers.JsonRpcProvider('https://...')
const ensRegistry = new ethers.Contract(
  '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', // ENS Registry address
  ENSRegistry.abi,
  provider
)

// Query the owner of a domain
const owner = await ensRegistry.owner(namehash('alice.eth'))
3

Access additional contracts

Import other ENS contracts as needed:
// DNS-related contracts
import {
  DNSRegistrar,
  DNSSEC,
  PublicSuffixList,
  SimplePublicSuffixList,
  TLDPublicSuffixList
} from '@ensdomains/ens-contracts'

// DNSSEC algorithm contracts
import {
  RSASHA256Algorithm,
  RSASHA1Algorithm,
  SHA256Digest,
  SHA1Digest
} from '@ensdomains/ens-contracts'

// Root contract
import { Root } from '@ensdomains/ens-contracts'

Solidity Usage

1

Import contracts in Solidity

Import ENS contracts directly into your Solidity smart contracts:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import '@ensdomains/ens-contracts/contracts/registry/ENS.sol';
import '@ensdomains/ens-contracts/contracts/registry/ENSRegistry.sol';
import '@ensdomains/ens-contracts/contracts/registry/ENSRegistryWithFallback.sol';
import '@ensdomains/ens-contracts/contracts/registry/ReverseRegistrar.sol';
import '@ensdomains/ens-contracts/contracts/registry/TestRegistrar.sol';
2

Use in your contract

Interact with ENS contracts in your Solidity code:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import '@ensdomains/ens-contracts/contracts/registry/ENS.sol';

contract MyENSIntegration {
    ENS public ens;

    constructor(address _ensAddress) {
        ens = ENS(_ensAddress);
    }

    function getDomainOwner(bytes32 node) public view returns (address) {
        return ens.owner(node);
    }

    function getDomainResolver(bytes32 node) public view returns (address) {
        return ens.resolver(node);
    }
}

CommonJS Usage

If you’re using CommonJS (require syntax):
const {
  BaseRegistrarImplementation,
  ENSRegistry,
  PublicResolver
} = require('@ensdomains/ens-contracts')

Available Contracts

Here’s a comprehensive list of all available contract imports:
Registry: ENS, ENSRegistry, ENSRegistryWithFallback, FIFSRegistrar, ReverseRegistrar, TestRegistrarEthRegistrar: BaseRegistrarImplementation, BulkRenewal, ETHRegistrarController, LinearPremiumPriceOracle, StablePriceOracle, ExponentialPremiumPriceOracleResolvers: PublicResolver, ResolverDNS: DNSRegistrar, DNSSEC, PublicSuffixList, SimplePublicSuffixList, TLDPublicSuffixListDNSSEC Algorithms: RSASHA256Algorithm, RSASHA1Algorithm, SHA256Digest, SHA1DigestOther: Root, IBaseRegistrar, IPriceOracle

Next Steps

Now that you know how to import ENS contracts, explore the following resources:

ENS Documentation

Complete ENS system documentation

GitHub Repository

View source code and contribute

Audit Report

ConsenSys Diligence security audit

Build Status

CI/CD build status

Build docs developers (and LLMs) love