{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "ens-name-normalization",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/ens-name-normalization/",
  "collection": "ethereum",
  "title": "ENS lookalike names and normalization: checking what you resolve",
  "description": "Learn why ENS software normalizes names before lookup and why valid Unicode still does not prove a name belongs to the intended person.",
  "aliases": [
    "ENS name normalization",
    "ENS lookalike names"
  ],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T19:27:58.939Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "ENS name normalization turns allowed input into a consistent form and rejects disallowed sequences before name processing. ENSIP-15 handles rules beyond simple lowercasing, including Unicode constraints. Normalization helps applications agree on the name being looked up; it does not prove the name owner is the person or organization you intend to pay.",
    "claimId": "ens-name-normalization-quick-answer",
    "sourceIds": [
      "x425-eth-ens-normalize"
    ]
  },
  "keyFacts": [
    {
      "label": "Consistency",
      "value": "Normalization precedes reliable name hashing and lookup.",
      "sourceIds": [
        "x425-eth-ens-normalize"
      ],
      "id": "consistency",
      "claimId": "ens-name-normalization-fact-consistency"
    },
    {
      "label": "Unicode",
      "value": "ENSIP-15 is more than converting ASCII capitals to lowercase.",
      "sourceIds": [
        "x425-eth-ens-normalize"
      ],
      "id": "unicode",
      "claimId": "ens-name-normalization-fact-unicode"
    },
    {
      "label": "Identity",
      "value": "A syntactically valid name is not an identity certificate.",
      "sourceIds": [
        "x425-eth-ens-normalize",
        "x425-eth-ens-roles"
      ],
      "id": "identity",
      "claimId": "ens-name-normalization-fact-identity"
    }
  ],
  "prerequisites": [
    "ethereum-address-checksums"
  ],
  "sections": [
    {
      "id": "processing",
      "heading": "Use an ENS-aware implementation",
      "sourceIds": [
        "x425-eth-ens-normalize"
      ],
      "paragraphs": [
        "Names are human-facing Unicode strings, while contracts and resolvers work with processed identifiers. Different text representations must be handled consistently where the specification treats them as equivalent; invalid combinations should be rejected.",
        "A custom “lowercase and hash” function can miss these rules. Use a library that implements the applicable ENS normalization standard instead of inventing a simplified parser."
      ]
    },
    {
      "id": "example",
      "heading": "Case normalization is the easy example",
      "sourceIds": [
        "x425-eth-ens-normalize"
      ],
      "paragraphs": [
        "For a simple ASCII illustration, Example.EtH normalizes to example.eth. That familiar case should not be mistaken for the full algorithm: Unicode characters and permitted combinations require the broader rules.",
        "When a wallet rejects a pasted name, do not silently remove unknown characters until something resolves. Confirm the intended name through a trusted source."
      ]
    },
    {
      "id": "human-check",
      "heading": "Validation and recognition answer different questions",
      "sourceIds": [
        "x425-eth-ens-normalize",
        "x425-eth-ens-roles"
      ],
      "paragraphs": [
        "A normalized name can still be the wrong legitimate name for your intended recipient. Technical validation checks the naming rules, not the sender’s relationship with an organization.",
        "Compare the full name and the resolved destination in the payment context. ENS spelling rules complement address and identity checks rather than replacing them."
      ]
    }
  ],
  "faq": [
    {
      "question": "Is every visually similar Unicode name the same ENS name?",
      "answer": "No. Normalization has specific allowed mappings and rejection rules. Visual similarity alone does not establish that two strings identify the same name.",
      "sourceIds": [
        "x425-eth-ens-normalize"
      ]
    },
    {
      "question": "Can normalization confirm that a name belongs to a company?",
      "answer": "No. It checks how a name is represented and whether the input is permitted. Organizational identity requires a separate reliable association.",
      "sourceIds": [
        "x425-eth-ens-normalize",
        "x425-eth-ens-roles"
      ]
    }
  ],
  "claims": [
    {
      "id": "ens-name-normalization-quick-answer",
      "articleSlug": "ens-name-normalization",
      "statement": "ENS name normalization turns allowed input into a consistent form and rejects disallowed sequences before name processing. ENSIP-15 handles rules beyond simple lowercasing, including Unicode constraints. Normalization helps applications agree on the name being looked up; it does not prove the name owner is the person or organization you intend to pay.",
      "sourceIds": [
        "source-67a5d9792baea5d3"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-67a5d9792baea5d3",
          "locator": "Normalization; ENSIP-15; namehash"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Fresh Name Processing mandates normalization before hashes and identifies ENSIP15 with Unicode constraints. ASCIIExample.EtH->example.eth matches documented case behavior; draft doesnotgeneralize lowercasing to Unicode or validname to identity."
        ]
      }
    },
    {
      "id": "ens-name-normalization-fact-consistency",
      "articleSlug": "ens-name-normalization",
      "statement": "Consistency: Normalization precedes reliable name hashing and lookup.",
      "sourceIds": [
        "source-67a5d9792baea5d3"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-67a5d9792baea5d3",
          "locator": "Normalization; ENSIP-15; namehash"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Fresh Name Processing mandates normalization before hashes and identifies ENSIP15 with Unicode constraints. ASCIIExample.EtH->example.eth matches documented case behavior; draft doesnotgeneralize lowercasing to Unicode or validname to identity."
        ]
      }
    },
    {
      "id": "ens-name-normalization-fact-unicode",
      "articleSlug": "ens-name-normalization",
      "statement": "Unicode: ENSIP-15 is more than converting ASCII capitals to lowercase.",
      "sourceIds": [
        "source-67a5d9792baea5d3"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-67a5d9792baea5d3",
          "locator": "Normalization; ENSIP-15; namehash"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Fresh Name Processing mandates normalization before hashes and identifies ENSIP15 with Unicode constraints. ASCIIExample.EtH->example.eth matches documented case behavior; draft doesnotgeneralize lowercasing to Unicode or validname to identity."
        ]
      }
    },
    {
      "id": "ens-name-normalization-fact-identity",
      "articleSlug": "ens-name-normalization",
      "statement": "Identity: A syntactically valid name is not an identity certificate.",
      "sourceIds": [
        "source-67a5d9792baea5d3",
        "source-0314bf4e15f4a3c3"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-67a5d9792baea5d3",
          "locator": "Normalization; ENSIP-15; namehash"
        },
        {
          "sourceId": "source-0314bf4e15f4a3c3",
          "locator": "Owner; controller; resolver; registrant"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:27:58.939Z",
        "reviewer": "Independent automated verification agent verify_bitcoin_stablecoins_100",
        "notes": [
          "Fresh Name Processing mandates normalization before hashes and identifies ENSIP15 with Unicode constraints. ASCIIExample.EtH->example.eth matches documented case behavior; draft doesnotgeneralize lowercasing to Unicode or validname to identity."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "x425-eth-ens-normalize",
      "label": "ENS name processing",
      "publisher": "ENS Labs",
      "url": "https://docs.ens.domains/resolution/names/",
      "locator": "Normalization; ENSIP-15; namehash",
      "note": "Normalization establishes consistent valid names, not identity authentication.",
      "version": "Documentation snapshot retrieved 2 October 2026; response hash recorded separately",
      "checkedAt": "2026-10-02T18:55:25.506Z",
      "contentSha256": "c8c809cfa33a58738d8dc982c4ca8f1bf73e312643c88912e64005b23df6c066",
      "recordId": "source-67a5d9792baea5d3"
    },
    {
      "id": "x425-eth-ens-roles",
      "label": "ENS terminology",
      "publisher": "ENS Labs",
      "url": "https://docs.ens.domains/terminology/",
      "locator": "Owner; controller; resolver; registrant",
      "note": "Roles in ENS naming, resolution and management.",
      "version": "Documentation snapshot retrieved 2 October 2026; response hash recorded separately",
      "checkedAt": "2026-10-02T18:55:25.181Z",
      "contentSha256": "eda2d55d25857800cbddcf2ddc398a9235d7cf2572bc315534aaf8b3939fed9a",
      "recordId": "source-0314bf4e15f4a3c3"
    }
  ],
  "related": {
    "articles": [
      "ethereum-address-checksums",
      "ethereum-wallet-requests",
      "ens-subnames"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and separate automated verification."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “ENS lookalike names and normalization: checking what you resolve.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/ens-name-normalization/"
}
