Skip to content

Latest commit

 

History

History
109 lines (69 loc) · 4.68 KB

nameguard.md

File metadata and controls

109 lines (69 loc) · 4.68 KB

NameHash NameGuard

The NameHash team is proud to present NameGuard, a tool for identifying and preventing malicious use of ENS names.

  • Offers multiple levels of protection
    • Impersonated name detection
    • Confusable grapheme detection
    • International accessibility checks
    • Rendering checks for different fonts
    • ENSIP-15 verification with detailed explanations and auto-suggestions (provided by ens-normalize-python)
    • Punycode and DNS hostname compatibility checks
    • and more!
  • Provides a unified rating system for entire names, as well as detailed explanations for each check
    • 🟢 Pass: no issues found
    • 🟡 Warn: potential issues found
    • 🔴 Fail: serious issues found
  • Supports many use cases

⚠️ This SDK is BETA. Things will change based on the community feedback.

Getting Started

Using the public API

NameGuard is hosted at https://api.nameguard.io

You can make a basic request to the API like this:

curl https://api.nameguard.io/inspect-name/mainnet/nick.eth

The API documentation is available at https://api.nameguard.io/redoc or https://api.nameguard.io/docs.

Using the SDK

Quickstart:

npm install @namehash/nameguard
import { nameguard } from "@namehash/nameguard";
await nameguard.inspectName("nick.eth");

See the SDK README for more details.

Using the Python library

Quickstart:

pip install nameguard
from nameguard import NameGuard
ng = NameGuard()
await ng.inspect_name(network_name='mainnet', name='nick.eth')

See the NameGuard Python README for more details.

Running your own NameGuard instance

See the NameGuard Python README for more details.

NameGuard Specification

Checks

  1. Impersonation: Detects names that could be trying to impersonate a different name by using similar characters. Example: vitalìk.eth

  2. Confusables: Detects characters that can be confused with other characters. Example: vitalìk.eth

  3. Font Support: Checks if the characters in the name are supported by commonly used fonts. Example: 🛈.eth

  4. Invisibles: Detects invisible characters. Example: 888‍‍.eth

  5. Typing Difficulty: Detects names that are difficult to type on some keyboards. Example: żółć.eth

  6. Mixed Scripts: Detects names that contain characters from multiple scripts or alphabets. Example: あア.eth

  7. Name Wrapper: Checks if the name is supported by the new ENS Name Wrapper. Example: abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd.eth

  8. ENSIP-15: Checks if the name is normalized according to ENSIP-15. Example: bitсoin.eth

  9. Punycode: Checks if the name is compatible with Punycode encoding. Example: ab--abc.eth

  10. Unknown Labels: Checks if the name contains unknown labels. Example: [5bc926fc40cc7c49e0df6dddf26e4dc7b9d6d32f4a55d4f0670320dbf414afd2].byongdok.eth

  11. Decentralized Name: Checks if the name is decentralized (unruggable). Example: example.com

  12. NameWrapper fuses: Checks that the NameWrapper configuration of a name is safe.

  13. Uninspected Name: Checks if the name is exceptionally long and would not be inspected by NameGuard for performance reasons.

License

Licensed under the MIT License, Copyright © 2023-present NameHash Labs.

See LICENSE for more information.