Everything you need to install, use, troubleshoot, and uninstall the INS MetaMask Snap. If you can’t find your answer here, open an issue on GitHub or DM @IgraNameService.
"blocked": false, "enabled": true, "version": "0.1.0". If you see this, you’re done.
Forward resolution turns a name (e.g. alice.igra) into a wallet address. It’s triggered automatically whenever you type into any field that MetaMask treats as a recipient.
.igraigranetwork.igra | Resolves to the Igra team wallet |
insdomains.igra | Resolves to the INS team wallet (same wallet as above) |
claudeai.igra | Resolves to a separate wallet (good cross-check) |
Reverse resolution does the opposite: it turns a wallet address back into a human-readable name. MetaMask uses this automatically when displaying addresses — if the address has a primary .igra name registered, you’ll see alice.igra instead of 0x….
.igra names0x… — that’s expected behavior, not a bug.
The Snap is enabled on these chains. Resolution is triggered when MetaMask’s active network matches one of them:
| Ethereum Mainnet | Chain ID 1 (eip155:1) — the most-used chain, all .igra names resolve here |
| Igra L2 | Chain ID 38833 (eip155:38833) — the home chain for INS |
Igra L2https://rpc.igralabs.com38833iKAShttps://explorer.igralabs.comchrome://extensions/ (look for the Flask logo, not regular MetaMask)Rare, but happens if a major version difference exists between our published manifest and your Flask install. Try:
.igra (no trailing space, no extra characters)https://insdomains.org/api/resolve?name=alice.igra
If this returns "exists": false, the name hasn’t been registered — nothing to resolve.The address comes from the on-chain INS registry. If it’s wrong, the name’s owner may have updated where it points after the last time you looked. Cross-check at insdomains.org/app — the snap and the dApp read from the same source of truth.
When you install the Snap, MetaMask will show you a permissions screen. Here’s exactly what each one means and why we ask for it:
endowment:name-lookup |
The mechanism by which MetaMask calls our Snap when you type a name. This is the only hook we use — we can’t do anything else with it. |
endowment:network-access |
Lets us call https://insdomains.org/api/resolve and /api/reverse. Without it, we’d have no way to look up addresses. We’ve hard-coded the destination — the Snap cannot reach any other URL. |
What we deliberately don’t request:
snap_getBip32Entropy / snap_getBip44Entropy / snap_getEntropy — we never see your private keyssnap_manageAccounts — we can’t add, remove, or modify accountssnap_manageState — we don’t persist anything on your machineendowment:transaction-insight — we don’t inspect transactions you signendowment:rpc — dapps cannot call our Snap directlyFull security review: SECURITY.md.
The Snap is a thin read-only client. Here’s what we see and what we don’t:
| What we see | The name string you type (e.g. alice.igra) when MetaMask asks us to resolve it. Or the wallet address MetaMask wants us to reverse-lookup. That’s it. |
| What we don’t see | Your private keys. Your balances. Your transaction history. Other names you’ve typed in other contexts. Anything from other dapps. The Snap sandbox in MetaMask Flask prevents this. |
| What we store | Nothing on your device. Server-side, our API logs ephemeral request metadata (timestamp, source IP) for rate-limiting and abuse prevention — these logs roll over within 24 hours. |
| Account / tracking | None. No account creation, no email, no cookies, no analytics tracker. |
Full privacy notes for the INS platform are at insdomains.org/privacy.
The Snap works fine with hardware wallets (Ledger, Trezor, Lattice, etc.) connected through MetaMask Flask. Resolution happens entirely in the browser before the transaction is sent to the hardware wallet for signing — your hardware wallet still displays the resolved address on its screen for you to verify, so even if the snap returned a wrong address you’d catch it before signing.
Snaps update automatically when you reinstall them, but Flask doesn’t auto-update them on a schedule. To grab a new version:
Current version: 0.1.0. Version history: CHANGELOG.
The Snap will be removed and any name resolution will stop. Your wallet, keys, and any .igra names you own on-chain are completely unaffected.
Integration options ranked from least to most work:
await window.ethereum.request({
method: 'wallet_requestSnaps',
params: { 'npm:ins-snap-resolver': {} },
});
// Forward
fetch('https://insdomains.org/api/resolve?name=alice.igra')
// Reverse
fetch('https://insdomains.org/api/reverse?address=0x...')
Registry.resolve(label) on Igra L2 chain 38833.Full API reference: docs/API.md. Snap source: github.com/ItsGoonBoyCrypto/INSdomains/tree/main/snap.
Regular MetaMask only loads Snaps from the official Snap Directory. We’ve submitted INS Snap for review — once approved, it’ll install in regular MetaMask too.
As soon as the MetaMask team approves our directory submission. Typical review window: 5–14 days. Follow @IgraNameService for the announcement.
No. The Snap can’t sign transactions, doesn’t have access to your keys, and never sees your balance. Worst case it could return a wrong resolved address — but MetaMask always shows you the address in the send confirmation, so you’d catch it before signing.
No. The Snap itself is free. Registering a .igra name on-chain costs iKAS gas at the standard INS tier (1-char = 4000 iKAS, 2-char = 2000 iKAS, etc.) but resolving names is free for everyone forever.
The Snap fails closed — you’ll see your raw input (e.g. alice.igra) instead of an address, and MetaMask will block sending until you paste a real address. The Snap can never substitute a wrong address silently.
Yes — anywhere MetaMask Flask runs. Flask isn’t Chrome-only.
No measurable impact. The Snap is 1.3 KB, runs only when MetaMask explicitly invokes it for name resolution, and has a 5-second hard timeout to prevent any single lookup from hanging the UI.
No. INS Snap is independent of ENS. We resolve .igra names directly via the INS registry on Igra L2.
| INS | Igra Name Service — the name registry mapping .igra names to wallet addresses on Igra Network |
| Igra Network | An EVM-equivalent L2 chain (ID 38833) built on top of the Kaspa BlockDAG |
| MetaMask Snap | A small extension that runs inside MetaMask to add features — in our case, native .igra name resolution |
| MetaMask Flask | MetaMask’s developer build, which can install Snaps directly from npm. Free, runs alongside regular MetaMask without conflicting. |
| Snap Directory | The official MetaMask-curated list of approved Snaps at snaps.metamask.io. Snaps on this list install in regular MetaMask. |
| Forward resolution | Name → address. Type alice.igra, get back 0x… |
| Reverse resolution | Address → name. Paste a wallet, see alice.igra if they’ve set one as primary |
| Primary name | The .igra name a wallet has chosen as its default reverse-resolution result. Set at insdomains.org/domains. |
| EIP-6963 | The standard MetaMask uses to announce its presence to dapps. The install page uses it to detect Flask specifically. |
| iKAS | The gas + utility token on Igra Network |
Open an issue using one of our templates: github.com/ItsGoonBoyCrypto/INSdomains/issues/new/choose
GoonBoyCrypto@gmail.com