Use when implementing SUI name service, resolving human-readable addresses, performing reverse lookups, or integrating SuiNS. Triggers on name service integration, address resolution needs, or domain name features.
From sui-dev-agentsnpx claudepluginhub first-mover-tw/sui-dev-agents --plugin sui-dev-agentsThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Human-readable names for SUI addresses (like ENS for Ethereum).
SuiNS provides:
GraphQL Breaking Changes:
Query.suinsName(name: ...) → Query.address(name: ...) for resolving SuiNS namesIAddressable.defaultSuinsName → IAddressable.defaultNameRecord.target for reverse lookupQuery.nameRecord for fetching the full SuiNS NameRecord for a given name# Old (deprecated)
query { suinsName(name: "alice.sui") { address } }
# New (v1.64+, current)
query { address(name: "alice.sui") }
query { nameRecord(name: "alice.sui") { ... } }
use suins::registry;
public fun register_name(
name: String,
duration_years: u64,
payment: Coin<SUI>,
ctx: &mut TxContext
) {
registry::register(
name,
duration_years,
payment,
ctx
);
}
public fun resolve(name: String): Option<address> {
registry::lookup(name)
}
import { SuiNSClient } from '@suins/sdk';
const suins = new SuiNSClient({ network: 'mainnet' });
// Resolve name to address
async function resolveName(name: string): Promise<string | null> {
const address = await suins.getAddress(name);
return address;
}
// Reverse lookup: address to name
async function getName(address: string): Promise<string | null> {
const name = await suins.getName(address);
return name;
}
// Register new name
async function registerName(name: string, years: number) {
const tx = new Transaction();
const [coin] = tx.splitCoins(tx.gas, [tx.pure(calculateCost(years))]);
tx.moveCall({
target: `${SUINS_PACKAGE}::registry::register`,
arguments: [
tx.pure(name),
tx.pure(years),
coin
]
});
return await signAndExecute({ transaction: tx });
}
function AddressDisplay({ address }: { address: string }) {
const { data: name } = useQuery({
queryKey: ['suins', address],
queryFn: () => getName(address)
});
return (
<span>
{name || `${address.slice(0, 6)}...${address.slice(-4)}`}
</span>
);
}
❌ Not caching name resolutions
❌ Assuming all addresses have names
❌ Not validating name format
❌ Forgetting to handle subdomain resolution
❌ Hard-coding name prices
❌ Not showing expiration dates
❌ Using names without ownership verification
Query SuiNS docs:
const suinsInfo = await sui_docs_query({
type: "github",
target: "suins",
query: "name registration and resolution API"
});
Make SUI addresses human-friendly!