Using emoji names

Registering a name

Two transactions, a short wait in between, and the name is yours for the term you chose. Here is what each step does and why it exists.

Registration is commit–reveal. It takes two transactions with a short pause between them, and that pause is the point: it is what stops someone watching the mempool from buying the name out from under you.

The flow

  1. Pick a name and check it. The interface normalises what you typed and tells you the tier, the price and whether it is available. A name that fails the rules is refused here, before you spend anything on gas.
  2. Commit. You send a hash — not the name. It is sha256(nameHash ‖ salt ‖ your address), where the salt is a random number your client generates. Nobody watching the chain learns which name you want. Minimum value is 0.05 GRAM — a deposit against squatting the commit map, not credited against the purchase.
  3. Wait. At least 60 seconds by default. This window is what makes the reveal safe. Your commitment stays valid for 24 hours, so there is no rush at the other end.
  4. Reveal and pay. You send the name, the salt, the term in years, the address that should own it, and the signer's attestation. The registrar re-derives the commitment, checks it matches, verifies everything on-chain, takes payment and issues the name.
  5. Done. The registry records you as the owner, the NFT is minted to you, and the resolvers are told who owns the name — all inside the same transaction.
Your salt is the secret The commitment hides your name only as well as your salt hides it. The other two inputs — your address and the name hash — are public or guessable. A client must generate the salt with a cryptographically secure random source, never a timestamp or a counter.

Why the commitment binds to your address

A commitment that only covered the name would be copyable: an observer sees your reveal in the mempool, replays it with more gas, and takes the name.

Because your address is inside the hash, a copied reveal produces a different commitment and simply fails. The commitment is also single-use — it is deleted when consumed, so the same reveal cannot be replayed later.

What the chain checks before it takes your money

CheckWhat it means
Commitment exists, is old enough, and is not staleThe 60-second window was served and the 24-hour window has not lapsed
Signature is valid, unexpired, and for this registrarThe signer approved this exact name, tier and metadata, and the signature cannot be replayed from another deployment
Raw bytes hash to nameHashYou cannot register one name and pay for another
No skin-tone modifier anywhere in the bytesEnforced in TVM, not by the signer
No blocked look-alike variantEnforced in TVM — see Risks
The bytes really are the tier claimedThe contract segments the emoji clusters itself and refuses any mismatch
Name is 2–7 emoji and ≤ 111 bytesNamespace limits
Name is not reserved, live, or in an auctionAvailability
Payment covers price + the registrar's outgoing workUnderpayment is refused, overpayment is refunded

Terms and pricing

You choose the term at registration: 1 to 5 years in a single transaction, up to a 10-year total horizon. A registration of N years costs the first-year price plus (N − 1) renewals at the tier's immutable rate.

welded shut — immutable, no setter existsadjustable within hardcoded bounds
EmojiTierFirst year Renewal / yr
2Legendary20 GRAM10 GRAM
3Epic15 GRAM7.5 GRAM
4Rare5 GRAM3 GRAM
5Uncommon3 GRAM1.5 GRAM
6–7Common1.5 GRAM0.75 GRAM

Single emoji do not appear in this table because they are never sold at a list price. See Auctions.

Prices move; the getter does not lie First-year prices are admin-adjustable within hardcoded bounds — never below the tier's renewal price, never above 4× the launch price — so read them from the contract rather than a table. Renewal prices are constants: the numbers above are the numbers forever.

Registering for someone else

The reveal names the address that will own the name, and it does not have to be the sender. You can buy a name as a gift, or have a treasury pay while ownership lands in a different wallet. The commitment still binds to whoever sends the commit, so both transactions must come from the same address.

Common errors

CodeWhat happenedWhat to do
413No commitment foundStart over — the commit did not land, or a different address sent it
414Commit too newWait out the remaining delay
415Commit expiredCommit again; the 24-hour window lapsed
402Bad signatureRefresh the attestation and retry
425Attestation expiredSame — signatures are deliberately short-lived
405Name takenSomeone else got there, or it is still inside grace
406UnderpaidRe-read priceRegister() and include fee headroom
427Single lockedSingle emoji come through drops, not registration
440Skin toneNot part of the namespace
450Confusable variantA look-alike; the interface will offer the registrable form
451Too longOver the 111-byte limit

The full list is in Integration.