Under Construction This DApp is in development

.omni Domains

The .omni domain system provides human-readable, wallet-linked identities on OmniSocial, similar to ENS or Lens handles.

It enhances discoverability, trust, and user experience by replacing unreadable addresses with personalized names like alex.omni.

🧩 Key Concepts

  • Primary Domain: Assigned once at sign-up, tied to your first PersonaNFT’s handle (e.g., alex.omni).

  • Subdomains: Users can create unlimited subdomains under their .omni (e.g., dao.alex.omni, mod.alex.omni) for organizing roles, bots, or alt-personas.

  • Uniqueness: All .omni names are globally unique at the root level.

  • Gasless: Registration and resolution are gasless thanks to off-chain indexing + zkLinking for on-chain anchoring.

🪄 How It Works

  • Domains are registered automatically during Persona creation via createPersona(handle, ...), minting both the PersonaNFT and reserving handle.omni.

  • Each .omni domain is anchored to a user’s OmniWallet via a verified mapping stored on-chain and in the subgraph.

  • Subdomains are added using a UI flow or smart contract call to the DomainRegistry contract.

🔄 Example Resolution Flow

When a user enters kali.omni:

  1. Frontend calls the subgraph to fetch:

    • walletAddress

    • personaId

    • currentMetadata

  2. If desired, a call can also verify the DID and zkProofs linked to that domain.

  3. UI updates to show profile, rep, avatar, and connected content.

🧪 GraphQL Query Example (Subgraph)

To resolve kali.omni to address and persona:

query ResolveOmniDomain {
  omniDomain(id: "kali.omni") {
    name
    owner
    persona {
      id
      handle
      metadataURI
    }
  }
}

Expected result:

{
  "data": {
    "omniDomain": {
      "name": "kali.omni",
      "owner": "0xAbC123...",
      "persona": {
        "id": "42",
        "handle": "kali",
        "metadataURI": "ipfs://..."
      }
    }
  }
}

🛠 Smart Contract Integration

.omni domains are managed by the OmniDomainRegistry smart contract. Core functions:

  • registerPrimary(handle) – Called once per account

  • createSubdomain(parent, subhandle) – E.g., createSubdomain("alex", "dao")

  • resolve(handle) – Returns the linked wallet + persona info

🔒 Domain Verification

  • Every domain is linked to a DID (Decentralized Identifier).

  • Optional zkProofs allow users to verify:

    • They control a GitHub/X account

    • They're human (PoH, zkKYC)

    • They meet community-specified identity criteria

🧑‍💼 Example Use Cases

  • jessica.omni posts as herself.

  • mod.jessica.omni moderates DAO forums anonymously.

  • ethdev.jessica.omni publishes smart contract packages under a different profile.

Last updated

Was this helpful?