Developers

Resolve .xp names to addresses and read profile records in your dapp or wallet. The snippets below target Xphere Mainnet and use the on-chain Universal Resolver.

Contracts (Mainnet)

  • Registry: 0x0Ae258509EA18720eF90A6Ee0432B159c0cCf7f6
  • Public Resolver: 0x25b209a3a75Fc48472448220865d315E14d97d3c
  • Base Registrar: 0x2772C07d01f232e3DfD4493E5556009cE596CAe9
  • Price Oracle: 0x2C977754e32628E9ACD0C0Da3F895C03cb63dF5F
  • Registrar Controller: 0x63965362C748e0E218331BceC9718fe02941FE50
  • Universal Resolver: 0xc789fAA5A83D6B97B264D4B422f801b4609B8CBB

Resolve an address

import { createPublicClient, http } from 'viem';
import { urAbi } from '@/lib/abi';
import { namehash } from '@/lib/namehash';

const client = createPublicClient({ transport: http('https://rpc.ankr.com/xphere_mainnet') });
const UNIVERSAL_RESOLVER = "0xc789fAA5A83D6B97B264D4B422f801b4609B8CBB";

async function resolve(name: string) {
  const node = namehash(name);
  return await client.readContract({ address: UNIVERSAL_RESOLVER, abi: urAbi, functionName: 'addr', args: [node] });
}

Read a text record

import { createPublicClient, http } from 'viem';
import { resolverAbi } from '@/lib/abi';
import { registryAbi } from '@/lib/abi';
import { namehash } from '@/lib/namehash';

const client = createPublicClient({ transport: http('https://rpc.ankr.com/xphere_mainnet') });
const REGISTRY = "0x0Ae258509EA18720eF90A6Ee0432B159c0cCf7f6";

async function getText(name: string, key: string) {
  const node = namehash(name);
  const resolver = await client.readContract({ address: REGISTRY, abi: registryAbi, functionName: 'resolver', args: [node] });
  return await client.readContract({ address: resolver as string, abi: resolverAbi, functionName: 'text', args: [node, key] });
}

Reverse lookup (primary name)

import { createPublicClient, http, encodeFunctionData, decodeFunctionResult } from 'viem';
import { resolverAbi, urAbi } from '@/lib/abi';
import { namehash } from '@/lib/namehash';

const client = createPublicClient({ transport: http('https://rpc.ankr.com/xphere_mainnet') });
const UNIVERSAL_RESOLVER = "0xc789fAA5A83D6B97B264D4B422f801b4609B8CBB";

async function reverse(name) {
  const node = namehash(name);
  const data = encodeFunctionData({ abi: resolverAbi, functionName: 'name', args: [node] });
  const [result] = await client.readContract({ address: UNIVERSAL_RESOLVER, abi: urAbi, functionName: 'resolveNode', args: [node, data] });
  return decodeFunctionResult({ abi: resolverAbi, functionName: 'name', data: result });
}

Looking for more? Reach out and we’ll expand this page with additional examples and a hosted API.

Xphere Names