Skip to content

Instantly share code, notes, and snippets.

@rfikki
Last active May 23, 2026 17:40
Show Gist options
  • Select an option

  • Save rfikki/06ecd543f6e22768d3af49368b05e2d8 to your computer and use it in GitHub Desktop.

Select an option

Save rfikki/06ecd543f6e22768d3af49368b05e2d8 to your computer and use it in GitHub Desktop.

Linagee Wrapper V2 — End User Guide

For users of the dapp. No coding required. This guide covers everything from connecting your wallet to using advanced privacy and identity features.


Table of Contents

  1. What is Linagee?
  2. Getting started — wallet setup
  3. Wrapping your name
  4. Unwrapping your name
  5. Managing resolver records
  6. ENS resolution — name.linagee.eth
  7. Privacy features
  8. Identity aggregation
  9. Soulbound (locking) your name
  10. Renting your name
  11. Token-bound account (TBA)
  12. Subnames
  13. NFT metadata and versioning
  14. Royalties
  15. Troubleshooting
  16. Glossary

1. What is Linagee?

Linagee is the oldest name registrar on Ethereum, deployed on August 8, 2015 — before ENS existed. Names like alice, vitalik, and satoshi were registered as raw bytes32 values on the Linagee contract. These are the true OG Ethereum names.

The Wrapper V2 turns your Linagee name into a modern ERC-721 NFT while adding:

  • Real ENS resolution (your name resolves as yourname.linagee.eth)
  • An on-chain identity wallet for your name
  • Privacy features including stealth payments
  • Compatibility with OpenSea, Blur, and every NFT marketplace

Your original Linagee name is never destroyed — unwrapping returns full ownership at any time.


2. Getting Started

What you need

  • An Ethereum wallet (MetaMask, Coinbase Wallet, Rabby, or any WalletConnect-compatible wallet)
  • The wrapped name dapp URL (provided by your deployment admin)
  • ETH for gas fees (wrapping costs approximately 0.003–0.006 ETH depending on network congestion)

Connect your wallet

  1. Open the dapp in your browser
  2. Click Connect Wallet in the top-right corner
  3. Choose your wallet from the list
  4. Approve the connection request in your wallet

Your address will appear truncated (e.g. 0x1234...abcd) when connected.


3. Wrapping Your Name

Wrapping converts your legacy Linagee name into an ERC-721 NFT. The process uses a commit-reveal pattern to protect against frontrunning (someone else stealing your wrap).

Step-by-step

Step 1 — Check ownership

  1. Go to the Wrap / Unwrap tab
  2. Type your name in the box without the .og — just the raw name (e.g. alice, not alice.og)
  3. Click Check
  4. If you own the name, you'll see a green confirmation

Note: Linagee names are case-sensitive. Alice, alice, and ALICE are three different names.

Step 2 — Transfer to wrapper

  1. Click Transfer to Wrapper
  2. Approve the transaction in your wallet
  3. Wait for the transaction to confirm (~15–30 seconds)

This transfers your Linagee name to the wrapper contract. It does not lose your ownership — the wrap in the next step will re-assign it back to you as an NFT.

Step 3 — Commit

  1. Click Submit Commitment
  2. Approve the transaction in your wallet
  3. Wait for confirmation

The commitment is a cryptographic hash of your address, name, and a random secret. It prevents others from frontrunning your wrap.

Step 4 — Wait ~30 seconds

The system requires at least 2 Ethereum blocks to pass after your commitment. This is typically 24–30 seconds. The dapp will warn you if you try too early.

Step 5 — Wrap

  1. Click Wrap Name
  2. Approve the transaction in your wallet
  3. Wait for confirmation

Your name is now an NFT! The NFT will appear in your wallet and on OpenSea within a few minutes.

What you receive

  • An ERC-721A NFT with a fully on-chain SVG image showing yourname.og
  • The NFT is listed with metadata attributes including ENS compatibility, privacy level, and genesis year (2015)

4. Unwrapping Your Name

Unwrapping burns the NFT and returns your Linagee name directly to your wallet — just as it was before wrapping.

  1. Go to the Wrap / Unwrap tab, scroll to Unwrap a Name
  2. Enter the Token ID of the name you want to unwrap (visible in your NFT wallet or on OpenSea)
  3. Click Unwrap
  4. Approve the transaction in your wallet

Warning: You cannot unwrap a soulbound name. See Section 9.


5. Resolver Records

Once wrapped, your name can point to addresses, social profiles, and content — just like ENS names. Go to the Resolver Records tab.

ETH Address record

Sets which Ethereum address your name resolves to. By default, it resolves to the NFT owner's address.

  1. Enter your Token ID
  2. Enter the address you want your name to point to
  3. Click Set

Use case: You want payments sent to alice.og to go to a cold wallet, not your hot wallet.

Text records

Text records attach social and profile information to your name. Supported keys:

Key Purpose
twitter Twitter/X handle (e.g. @aliceog)
github GitHub username
discord Discord handle
email Contact email
url Personal website
avatar Profile picture (IPFS hash or URL)
description Bio / about text
status Current status message
farcaster Farcaster handle or FID

You can also set any custom key you like by selecting custom in the dropdown.

Content hash

Links your name to an IPFS or IPNS resource — for example, a personal website stored on IPFS.


6. ENS Resolution

If your name is ENS-compatible (lowercase letters and numbers, no spaces or special characters), it automatically resolves as yourname.linagee.eth in any ENS-aware application.

What "ENS compatible" means

Name ENS compatible? Resolves as
alice Yes alice.linagee.eth
alice123 Yes alice123.linagee.eth
Alice Yes (folds to alice) alice.linagee.eth
hello world No (space) Display only
hello! No (special char) Display only

Case collisions: If both Alice and alice are registered, only the first one wrapped claims the alice.linagee.eth slot. The other still exists as an NFT with the .og display name, but has no ENS resolution route. Check the ENS Compatible badge on your name card.

Testing your ENS name

Once the resolver is set up for linagee.eth, you can test in:

  • MetaMask: send ETH to yourname.linagee.eth
  • ENS App: visit app.ens.domains/yourname.linagee.eth
  • viem / ethers.js: provider.resolveName("yourname.linagee.eth")

7. Privacy Features

Go to the Privacy & Identity tab, enter your Token ID, and choose your privacy level.

Level 0 — Public (default)

Standard resolution. Your address is publicly visible when someone looks up your name. No special configuration needed.

Level 1 — Stealth Payments (ERC-5564)

Your name stores a stealth meta-address — a special cryptographic key. When someone wants to pay you:

  1. They look up your stealth meta-address via your name
  2. Their wallet automatically generates a brand-new one-time address just for this payment
  3. The payment goes to that one-time address, which only you can access
  4. Your main wallet address is never revealed

To set up stealth payments:

  1. Generate a stealth meta-address using a compatible tool (e.g. Umbra.cash or the Fluidkey app)
  2. Copy your stealth meta-address (starts with st:eth:0x...)
  3. Paste it in the Stealth meta-address field
  4. Select Level 1 and click Apply Privacy Config

The viewing key (for finding incoming payments) can be shared with a trusted third-party scanning service. The spending key must always stay private.

Level 2 — Full ZK Anonymous (ERC-7524 PLUME)

Advanced: generates a cryptographic nullifier that lets you prove you own a Linagee name without revealing which name or which address. Used by:

  • Anonymous voting systems weighted by name ownership
  • Access-gated spaces where you prove OG status without deanonymising yourself
  • Anonymous forums where your consistent identity is the nullifier hash

This requires a wallet that supports PLUME signatures. Configuration is done through the ZK verifier address field (set to a deployed Semaphore or Noir verifier contract).


8. Identity Aggregation

ERC-7231 lets you bind your Web2 and Web3 identities to your name NFT, creating a verifiable identity layer that follows your name across the ecosystem.

How it works

  1. Create a JSON object describing your identity:
    {
      "twitter": "@aliceog",
      "github":  "alice-dev",
      "farcaster_fid": 12345,
      "ens":     "alice.eth",
      "linagee": "alice.og"
    }
  2. Store this JSON on IPFS (use Pinata, web3.storage, or Fleek)
  3. In the Privacy & Identity tab, paste your JSON in the schema field
  4. Click Commit Identity Schema
  5. A keccak256 hash of your JSON is stored on-chain — the data stays private unless you share the IPFS link

The hash proves the identity claims haven't been tampered with, while keeping the actual data under your control.


9. Soulbound (Locking) Your Name

A soulbound name cannot be transferred or sold — it is permanently bound to your wallet address. Useful if your name is your core identity anchor and you never want to risk it being transferred accidentally or through a wallet compromise.

  1. Go to the My Names tab
  2. Expand the name card (click it)
  3. Click Lock (Soulbound)
  4. Approve the transaction

This is irreversible. Once locked, the name can never be transferred. It can still be unwrapped (returning the raw Linagee name), but the NFT itself cannot move to another wallet.


10. Renting Your Name

You can grant another address the right to use your name (update records, act as the name) for a specified time period, without transferring ownership of the NFT.

This is configured via the contract directly (via Etherscan or a custom UI):

setUser(tokenId, renterAddress, unixTimestampExpiry)

Example use cases:

  • Rent your name to a brand for a marketing campaign
  • Temporarily give a friend use of your name while you're travelling
  • Let an organisation manage your name's records for a conference

The rental expires automatically — no need to trust the renter to return anything.


11. Token-Bound Account (TBA)

Every wrapped name can have its own smart contract wallet, called a Token-Bound Account (TBA). This is created using the ERC-6551 standard.

What the TBA does

  • Holds assets: The TBA address can receive ETH, ERC-20 tokens, and other NFTs
  • Executes transactions: As the name owner, you can instruct the TBA to interact with DeFi protocols, vote in DAOs, etc.
  • Transfers with the name: If you sell the name NFT, the buyer gets control of the TBA and all assets inside it

Creating your TBA

  1. Go to the My Names tab
  2. Expand your name card
  3. Click Create TBA
  4. Approve the transaction

The TBA address is deterministic and actually exists before deployment — you can send assets to it in advance.


12. Subnames

If you own a wrapped name, you can mint subnames from it — like having parent.og and issuing sub.parent.og to other people.

This is done via the contract's mintSubname function (currently via Etherscan or developer tools):

mintSubname(
  parentTokenId,  // your name's token ID
  childNameBytes32, // bytes32 of the child name
  recipientAddress,
  expiryTimestamp  // 0 for no expiry
)

Subname token IDs work identically to root names — they can have their own resolver records, TBAs, and privacy settings.


13. NFT Metadata and Versioning

Your name NFT's on-chain SVG image shows:

  • The name with .og suffix
  • The token ID
  • "Ethereum genesis · 2015" — marking its historical significance
  • A soulbound badge if locked

Adding custom metadata versions (ERC-7160)

You can add alternative metadata versions to your NFT — different visual themes, seasonal artwork, or credential-rich versions:

  1. Host your metadata JSON on IPFS
  2. In the My Names tab, expand the name card
  3. Use Add Version (developer tab) to add the IPFS URI
  4. Use Pin Version to set the active display version

All previous versions are permanently preserved — a full revision history of your name's identity.


14. Royalties

The wrapper contract includes ERC-2981 royalty support. When your wrapped name NFT is sold on a secondary marketplace:

  • A royalty percentage (configured by the contract admin, default 2.5%) goes to the protocol treasury
  • This funds ongoing development and gateway infrastructure

Marketplaces that support ERC-2981 (OpenSea, Blur, LooksRare) will enforce this automatically.


15. Troubleshooting

"Contract is not the owner" error when wrapping

You need to transfer your Linagee name to the wrapper contract address before calling wrap. Use the dapp's Transfer step, or manually call transfer(nameId, wrapperAddress) on the Linagee contract at 0x5564886ca2C518d1964E5FCea4f423b41Db9F561.

"Too early" error when wrapping

The commit-reveal pattern requires at least 2 blocks (~24 seconds) between your commitment and your wrap. Wait a little longer and try again.

"Commitment expired" error

Commitments expire after ~250 blocks (~50 minutes). If you waited too long between committing and wrapping, you need to start over with a new commitment.

My name doesn't resolve on ENS

  1. Check the ENS Compatible badge on your name card — names with spaces or special characters cannot resolve via ENS
  2. Check if there's a Normalized Slot Conflict — another case variant of your name may have claimed the ENS slot first
  3. The gateway server must be running and the resolver must be set on linagee.eth in ENS Manager

My name isn't showing on OpenSea

OpenSea indexes new NFTs within a few minutes to hours. If it's been more than 24 hours, try manually refreshing metadata on OpenSea (click the refresh button on the NFT page). The contract emits ERC-4906 metadata update events which OpenSea listens to.

I locked my name and now can't transfer it

This is by design. Soulbound names are permanently non-transferable. You can still unwrap it to recover the underlying Linagee name, but the NFT wrapper cannot move to another address.

Stealth address setup — I can't find my payments

You need to scan for incoming stealth transactions using your viewing key. Use a compatible tool like Umbra.cash or Fluidkey that implements ERC-5564 scanning. Never share your spending key.


16. Glossary

Term Meaning
bytes32 The raw format Linagee stores names in — a 32-byte hex string
CCIP-Read (EIP-3668) Protocol allowing ENS to fetch data from an offchain gateway
Commit-reveal Two-step process that prevents frontrunning by hiding your intent until you're ready
ERC-721A Gas-efficient NFT standard used by the wrapper
ENSIP-10 ENS wildcard resolution — allows *.linagee.eth to resolve without registering each name individually
Frontrunning When a bot sees your transaction and submits their own first to steal the outcome
Normalization (ENSIP-15) The process of standardising a name (e.g. lowercasing) before hashing it for ENS lookup
Soulbound A non-transferable token permanently bound to an address
Stealth address A one-time address generated for a specific payment, preserving recipient privacy
TBA (Token-Bound Account) A smart contract wallet owned by an NFT (ERC-6551)
ZK proof Zero-knowledge proof — proves a fact without revealing the underlying information
Viewing key Used to scan for incoming stealth payments — can be shared with a trusted scanner
Spending key Controls funds at stealth addresses — must always remain private
Nullifier A unique identifier used in ZK systems to prevent double-actions without revealing identity
Gateway The CCIP-Read server that reads from the wrapper contract and signs responses for ENS resolution
Royalty (ERC-2981) A percentage of secondary sales that flows to the protocol treasury

Linagee Wrapper V2 — built on Ethereum, honoring the 2015 genesis.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment