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
- 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.
- 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. - 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.
- 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.
- 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.
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
| Check | What it means |
|---|---|
| Commitment exists, is old enough, and is not stale | The 60-second window was served and the 24-hour window has not lapsed |
| Signature is valid, unexpired, and for this registrar | The signer approved this exact name, tier and metadata, and the signature cannot be replayed from another deployment |
Raw bytes hash to nameHash | You cannot register one name and pay for another |
| No skin-tone modifier anywhere in the bytes | Enforced in TVM, not by the signer |
| No blocked look-alike variant | Enforced in TVM — see Risks |
| The bytes really are the tier claimed | The contract segments the emoji clusters itself and refuses any mismatch |
| Name is 2–7 emoji and ≤ 111 bytes | Namespace limits |
| Name is not reserved, live, or in an auction | Availability |
| Payment covers price + the registrar's outgoing work | Underpayment 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.
| Emoji | Tier | First year | Renewal / yr |
|---|---|---|---|
| 2 | Legendary | 20 GRAM | 10 GRAM |
| 3 | Epic | 15 GRAM | 7.5 GRAM |
| 4 | Rare | 5 GRAM | 3 GRAM |
| 5 | Uncommon | 3 GRAM | 1.5 GRAM |
| 6–7 | Common | 1.5 GRAM | 0.75 GRAM |
Single emoji do not appear in this table because they are never sold at a list price. See Auctions.
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
| Code | What happened | What to do |
|---|---|---|
| 413 | No commitment found | Start over — the commit did not land, or a different address sent it |
| 414 | Commit too new | Wait out the remaining delay |
| 415 | Commit expired | Commit again; the 24-hour window lapsed |
| 402 | Bad signature | Refresh the attestation and retry |
| 425 | Attestation expired | Same — signatures are deliberately short-lived |
| 405 | Name taken | Someone else got there, or it is still inside grace |
| 406 | Underpaid | Re-read priceRegister() and include fee headroom |
| 427 | Single locked | Single emoji come through drops, not registration |
| 440 | Skin tone | Not part of the namespace |
| 450 | Confusable variant | A look-alike; the interface will offer the registrable form |
| 451 | Too long | Over the 111-byte limit |
The full list is in Integration.