[TEMP CHECK] ENS invalid name refund proposal

[TEMP CHECK] ENS invalid name refund proposal

This is a proposal to give refunds to the ENS names that used to be valid but now invalid (or causes different normalisation results) due to the new name normalization standard raffy has been working.

UPDATE: 3rd Nov 2023

UPDATE: 29th Aug 2023


There are three options for the refund and here is the overall cost

Option fee refund condition fee premium gas total eth price total in usd
A last remaining 77 19 74 170 1795 $305,150
B last all 224 19 74 317 1795 $569,015
C all 232 19 74 325 1795 $583,375
invalid names 9881
refund addresses 3677

The refund condition explained

The refund consists of 3 parts.

  1. Registration and renewal fee
  2. Premium (the extra amount paid after a name is expired and put with 90 days decaying premium)
  3. The gas spent to register/renew (the gas fee is estimated based on the last one month average gas cost with the gas price at the time of the transaction)

For 1, there are potentially three ways to refund

  • A: The last remaining registration fee or renewal fee
  • B: The last registration fee or renewal fee
  • C: All fees paid

The refund excludes any period when the name expired. This could be debatable as some people complain that they are no longer able to renew the invalid names from our UI. However, It also raises the risk of users digging in the expired names with high premium and re-register just so that users can get the full premium.


  1. 2019-03-23 Register 2.1 ETH by X (base 0.1, premium 2) with gas fee 0.0001 then expires
  2. 2020-03-23 Register 1.1 ETH by Y (base 0.1, premium 1) with gas fee 0.0001
  3. 2021-03-23 Renew 0.03 ETH by Y until 2024-03-23(3 years) with gas fee 0.0001
  4. 2022-01-04 Transfer from Y to Z
  5. 2023-03-23 Refund day. Total duration 5 years, remaining 1 year (0.01)

At this point.

  • X paid 2.1001 ETH
  • Y paid 1.1302 ETH
  • Z paid 0 ETH (More likely it was sold from B to C)

In this scenario, “Premium” is 1 ETH and the total gas fee is 0.0002 For the registration/renewal,

  • Option A is 0.01 (remaining duration of the 0.03 renewal)
  • Option B is 0.03 (renewal 0.03)
  • Option C is 0.13 (base registration 0.1 + renewal 0.03)

How do I know if my name is eligible

Please refer to this post to find out whether your name is eligible for not. Your name is eligible for refund only if “Different”, or “Error but Norm”. Please also bear in mind that it excludes names that has

Next Step

This is still not the final version so please post your feedback , questions, and bug report.

Once the script and data is finalized, we will raise a social vote on which method we refund (Option A, B,C, or no refund).

We will refund by bulk transfer so the each recipient does not have to pay gas to claim. The DAO proposal will add the extra gas cost for the operation.


The data was collected as of March 30th 16:00 UTC. The data will be recollected at the end of the voting result.

  • refund_addresses = This includes all the refund candidate addresses with number of names they own, sum of premium, gas, and fee (in 3 different options)
  • refund_names = The breakdown of refund_address for each name the address own with the etherscan url to inspect the history of the name

The query is on github


  • 25 names were owned by 0x000…dead (which are excluded from the list)
  • 1883 names contain invisible spoofing chars (which are excluded from the list)
  • On average, each address receives the refund of 0.04-0.08 ETH (depending on the options)
  • 60% of all the eligible addresses has only 1 name (90% has less than 5 names)
  • Top 10% of all the eligible addresses receive 32-33% of all the refund amount
  • The owner with largest number of names eligible for refund is 0x350c8181846e7d12f6a81fc756010f657705cea7 and has 177 names
  • The largest refund amount will be “ᴇᴛʜᴇʀᴇᴜᴍ” owned by 0x4ac5ed4b31f4f0e16bd96bf2d9f96200d7c266af and eligible for 15.28 ETH (mostly for premium)
  • The biggest gas refund will be to 0x372973309f827b5c3864115ce121c96ef9cb1658 owning 90 names spending 3.2 ETH in gas in total

Update: the gas cost to conduct the bulk transfer would be around 1.5 ETH at 40 gwei


Just a thought. Because B (return all fee of the current period) and C (return everything) is similar in terms of the refund amount, I suggest to combine the two and make the voting option of A (last remaining), B(all), C(no refund).


I think refunding names that are now illegal is very noble and I’m glad this is under consideration.

To get a birds-eye view, I computed a breakdown report for the 11764 (9881+1883) names. Here’s a quick overview:

  • Disallowed: image
  • Diff Norm: image

While computing this report, I noticed there was an additional error type that I had excluded because all my analysis worked on labels (eg. no sep.arator). There are 54 names which contain a "." and must of have been registered via contract. IMO, these should also be excluded.

I think it’s wise not to refund registrations (the 1883 from above) that when emoji (w/FE0F allowances) are removed, still contain ZWJ. These are almost all malicious spoofs except for the speculative emoji ZWJ gambles which are still technically spoofs because, until they’re supported sequences, they look exactly like distinct emoji.

I agree with Matoken’s list and I support A or B.


I agree with raffy’s perspective.

This topic is on the weekly ecosystem call agenda to gather additional feedback.


I can reflect this in the report. Are you going to reflect this as a change to the library?


No change required. I simply treat the registration “a.b”.eth as two (“a” and “b”) in my datasets, so I hadn’t considered the refund case for it.

1 Like

Where does it contain the list of 54 names?

1 Like

Oh sorry, https://adraffy.github.io/ens-norm-tests/test-breakdown/refund-matoken/tally.json under key “not a label” or just any name with a “.”

1 Like

Thanks for the info. I added the exclusion of “.” in my query. These names (was 52 not 54 for some reason) used up 0.3-04ETH ( 0.1-0.2 registration fees and 0.2 on gas cost) which will be subtracted from the earlier data provided.

all_addresses: 20,
all_names: 52,
all_premium: 0,
all_last_remaining_cost: 0.1023434248731609,
all_total_cost: 0.2329266675244665,
all_last_cost: 0.2329266675244665,
all_gas_spent: 0.2582836837284448

I have a heap of names registered through app.ens.domains

  • ‘SpaceX
  • McDonald‘s
  • NFT‘s
  • ‘Money
  • ‘Bitcoin
  • ‘Ethereum
  • ‘Sony

And anyone simply a few names that used the apostrophe.

I can currently use them to receive and send crypto.

Be cool if they were included in update.

Unfortunately, I only selected one apostrophe (2019 (’) RIGHT APOSTROPHE) to remain legal in the new normalization spec, and only in specific circumstances (cannot lead, trail, or touch.)

The names you list are now disallowed and part of the refund process.

I think the following is sufficient justification for this change:

  • ’Bitcoin
  • ʼBitcoin
  • ′Bitcoin
  • ‛Bitcoin
  • ‘Bitcoin
  • ‵Bitcoin
  • ῾Bitcoin

Although there are many quotation/punctuation characters allowed in UTS-46, I don’t think there’s a single legacy registrar on the planet that permits these characters to be registered.

1 Like


When does the refund process start?


I don’t consider it noble, I think it is logic. We could say ENS started chaotically, and once things became more clear (thanks also to your big research, which helped many to understand a lot about encodings) it became also possible to establish rules. So… it’s not a noble gift. It is just money that can be spent better by their related owners. Some people live in jurisdictions around the world where they have to pay taxes on the money they spent on NFT. So imagine you paid something with a vanishing utility and you also have to pay taxes on it. We can’t get back gas from miners and validators, so I don’t feel to discuss it too much (although some players spent a lot of gas… so I will let this for the rest of the community but to me if possible to refund the gas it would be nice anyway) but at least what was registered via the dapp frontend should be refunded. We aren’t talking about changing the rules of ethereum, we are talking about ENS as a DAO. The game rules must be clear. Once they are clear the problem won’t emerge anymore and we know what game we play.


Thanks for starting this! I made a few edits; otherwise it looks like a great start.

We should probably do a survey of the major execution clients and what languages they use so we can be specific in the RFP.

I made the following changes reflecting some feedback and the recent snapshot result

  • Froze the time to be at 18th June when the snapshot proposal was approved the (code diff)
  • Reduced the option from 3 to 2 ( as option b and c were close)

Here is the updated list of refund address and options.


While observing all the refunding names at this page, I found dozens of questionable names whether it should be included in the refund list.


This is the largest name to be refunded with 15 ETH , mostly because it was acquired at a premium. The last owner acquired the name 4 months ago with 15 ETH premium.

3 char/digit names

There are bunch names that look like 3 letter digit/names (they are just examples and there are a lot more of these)

  • bеn.eth
  • ɢᴏᴅ.eth
  • ʟɪɴᴋ.eth
  • ooз.eth
  • ссс.eth
  • gоd.eth
  • ৪৪৪.eth
  • аbc.eth

It’s hard to tell whether these people registered the name with the intention of scamming others or they are the ones that get scammed (but highly likely they registered to scam others unless they acquire the names at secondary market).

Would love to hear wider opinion of whether we should manually inspect individual names to consider including/excluding. cc @raffy

For others, please post if there are any other questionable names at https://docs.google.com/spreadsheets/d/11bxFy9ll-53bBmfgOm0O-rkHTg3mb6uylVZDmQm4waw/edit#gid=1731480659

IMO, the Latin-like confusables are likely malicious, especially when it a single substitution (like "bеn" = [62 435 6E]. Pure small-caps should probably be refunded as they were original valid.

I can produce a subset of the questionable that I’d personally exclude, if that’s what you’re looking for.

1 Like

I think that for simplicity we should set impartial rules and adhere to them; err on the side of no false-negatives, rather than no false-positives.

1 Like

Sorry if this was blocked on me, I forgot about this and was only reminded the other evening in Discord.

I split the names into a few categories: output.json

  not_ensip1: 203,        // not ENSIP-1
  wrong_pure_emoji: 208,  // just emoji but wrong form => REFUND
  braille_spacer: 62,     // spoof
  small_caps: 373,        // now invalid => REFUND
  arabic_an: 772,         // now mapped => REFUND
  single_script: 3239,    // 90%? REFUND but contains spoofs
  latin_like: 174,        // 2+ of (Latin, Greek, Cyrl), mostly spoofs 
  all_invalid: 2780,      // 90%? REFUND but contains spoofs
  unknown: 208

However, some of the names still require case-by-case inspection:

I think you can safely remove braille_spacer, not_ensip1, and the bulk of latin_like (~400 names). I’d error on the side of caution and refund the remainder.

1 Like