Developers

Add .igra resolution in 5 minutes.

INS is the permanent name service native to Igra L2 (chain 38833, native iKAS). Every name is an ERC-721 with on-chain SVG art. Resolve a name to an address with one fetch() — the API unions the V1 + V2 registries automatically. No SDK, no indexer, no infrastructure on your side.

Quick start — REST API

Free, public, CORS-enabled, no auth, no rate limit. The fastest path — hit it from your wallet's existing fetch layer.

// Forward resolve (name -> address) — works for V1 + V2, no flags
async function resolveIgra(name) {
  const r = await fetch(
    "https://insdomains.org/api/resolve?name=" + encodeURIComponent(name)
  );
  if (!r.ok) return null;
  const d = await r.json();
  if (!d.exists) return null;
  return d.address;          // also: d.owner, d.registry_version,
                             //       d.tenure ("forever"|"annual"), d.expires_at
}

// in your send-flow:
const to = await resolveIgra("alice.igra");
if (to) sendTransaction(to);
// Reverse (address -> primary name) for tx history / contacts
async function displayName(addr) {
  const r = await fetch("https://insdomains.org/api/reverse?address=" + addr);
  const { primary } = await r.json();
  return primary ?? (addr.slice(0, 6) + "\u2026" + addr.slice(-4));
}

Live endpoints

Click any example — they return real JSON from chain right now.

/api/resolve?name=igranetwork.igraname → address (+ tenure, expires_at, registry_version)
/api/reverse?address=0x7447F0e5CDfa55ceF123F8d2E0B2c981d1807aA1address → primary name
/api/names/by-owner?address=0x7447F0e5CDfa55ceF123F8d2E0B2c981d1807aA1all names owned by an address
/api/names/recent?limit=5most-recent registrations (V1 + V2)
/api/statssupply, volume, fees, V2 breakdown
/api/nft-image/100?size=400&v=2rendered NFT card PNG (pass v=2 for V2 token ids)

Three ways to integrate

1REST API — 5 min, zero infra

The snippets above. Edge-cached 30–60s, V2-aware out of the box. Best for almost every wallet.

2Read contracts directly — no HTTP layer

Skip our API and read the chain yourself. Every endpoint is a thin wrapper over public view functions on the Registry.
import { createPublicClient, http } from "viem";

const client = createPublicClient({
  transport: http("https://rpc.igralabs.com:8545"),
  chain: { id: 38833, name: "Igra",
           nativeCurrency: { name: "iKAS", symbol: "iKAS", decimals: 18 } },
});

// resolve(label) returns the target address directly. Label only — no ".igra".
// Query V2 first, fall through to V1 on a zero result (matches the dApp).
const addr = await client.readContract({
  address: "0x7E7018959bf44045F01D176D8db1594894CBf4E9",
  abi: [{ name: "resolve", type: "function", stateMutability: "view",
          inputs: [{ name: "label", type: "string" }],
          outputs: [{ type: "address" }] }],
  functionName: "resolve",
  args: ["alice"],
});
V2 adds priceAnnualFor, expiresAt, isExpired, and isInGrace for Annual names (Forever names report expiresAt = 0).

3ENS-compatible namehash — for ENS-only tooling

The hardened resolver below exposes addr(bytes32 node) / text(bytes32, string) with trustless node→label binding (poisoning impossible by construction; expired names resolve to address(0)). Use only if you have an existing ENS pipeline — otherwise Path 1 or 2 is simpler.

Contracts on Igra mainnet

All explorer-verified. V2 is canonical; V1 is legacy read-only.

RPC: https://rpc.igralabs.com:8545 · Explorer: explorer.igralabs.com · strip the .igra suffix before calling label-based functions.

Audit posture

356
Foundry tests · 0 fail
12
contract suites
1024
runs per fuzz test
5%
hard fee cap (on-chain)

Reverse resolution is stale-safe, fees are capped in code (even a compromised owner can't exceed 5%), and registration overpayment is refunded in-tx. Reproduce with cd contracts && forge test.

What we'd love your help with

Get a hand integrating

Happy to do a 15-minute walk-through, debug a call against the live RPC, or open a PR into your wallet repo. The API is free forever and there are real users + volume on chain today.

Full source (MIT) is on GitHub — private during launch; ping @GoonBoyCrypto for read access.

Back home