Skip to content

ENSNode Reference Implementation

ENSNode is the reference implementation of the ENSDb standard, providing a complete ecosystem of tools and services for building with ENSDb. Each ENSNode instance includes:

  • At least one ENSDb instance — The PostgreSQL database following the ENSDb standard.
  • At least one ENSIndexer instance — The reference ENSDb Writer implementation that writes data into the ENSDb instance.
  • At least one ENSApi instance — The reference ENSDb Reader implementation that serves GraphQL and REST APIs.
flowchart LR
    subgraph ENSNode["ENSNode Environment"]
        subgraph ENSNodeMainnet["ENSNode 'Mainnet' instance"]
            direction LR
            ENSIndexerMainnet[ENSIndexer 'Mainnet' instance]
            ENSApiMainnet@{ shape: procs, label: "ENSApi Mainnet instances" }
        end

        subgraph ENSNodeSepolia["ENSNode 'Sepolia' instance"]
            direction LR
            ENSIndexerSepolia[ENSIndexer 'Sepolia' instance]
            ENSApiSepolia[ENSApi 'Sepolia' instance]
        end
    end

    subgraph PostgreSQLServer["PostgreSQL Server instance"]
        ENSDbMainnet[(ENSDb 'Mainnet' instance)]
        PSMainnet(Ponder Schema)
        NSMainnet(ENSNode Schema)
        EISMainnet@{ shape: procs, label: "ENSIndexer Schema" }

        ENSDbMainnet -->|1..1| PSMainnet
        ENSDbMainnet -->|1..1| NSMainnet
        ENSDbMainnet -->|1..*| EISMainnet


        ENSDbSepolia[(ENSDb 'Sepolia' instance)]
        PSSepolia(Ponder Schema)
        NSSepolia(ENSNode Schema)
        EISSepolia@{ shape: procs, label: "ENSIndexer Schema" }

        ENSDbSepolia -->|1..1| PSSepolia
        ENSDbSepolia -->|1..1| NSSepolia
        ENSDbSepolia -->|1..*| EISSepolia
    end
    
    ENSIndexerMainnet -->|Write| ENSDbMainnet
    ENSIndexerSepolia -->|Write| ENSDbSepolia
    ENSApiMainnet -->|Read| ENSDbMainnet
    ENSApiSepolia -->|Read| ENSDbSepolia

Single PostgreSQL Server, Multiple ENSDb Instances

Section titled “Single PostgreSQL Server, Multiple ENSDb Instances”

A single PostgreSQL server can serve multiple ENSDb instances for different ENS Namespaces. This allows you to have separate ENSDb instances based on your needs. For example:

  • Your production environment can have a dedicated ENSDb instance for ENS data from the ENS Namespace “mainnet”.
  • Your staging environment can have a separate ENSDb instance for ENS data from the ENS Namespace “sepolia”.
  • Your local development environment can have its own ENSDb instance for testing with local or ephemeral data from the ENS Namespace “ens-test-env”.
flowchart TB
    subgraph PGServer["PostgreSQL Server"]
        direction TB
        Mainnet[(ENSDb Mainnet instance)]
        Testnet[(ENSDb Sepolia instance)]
        Devnet[(ENSDb ENS Test Env instance)]
    end

Each ENSDb instance is an independent database containing complete ENS data for its respective environment.