Agreed. I suggested a display name which I think helps address the 99% situation— you transcribe or copy/paste a name the visual appearance after validation being the same as what you typed—is a good test. ie. Normalize, Lookup, Normalize again, Compare. I also think knowing the users intention per name is valuable.
For normalization, I think the IDNA 2003 rules are too random: strict on things that should be separate and transparent the things that are obviously malicious. I only realized NV8 wasn’t being used after working through Bidi and ContextO. I blame the Unicode spec.
I also prefer only period as the label separator but UTS #46: Unicode IDNA Compatibility Processing
I think improvements that benefit the user are the best, so not being mislead by spoofed names and giving users confidence that names > addrs, should be the focus. NV8 is definitely a huge improvement for textual names. I think emoji are a manageable subset of Unicode. Deciding which emoji and non-emoji pictographs are both valid-and-unique is a one-time deal and feasible, hopefully with some community input.
This is where my library is at currently:
-
IDNATestV2: a few tests fail now that I’ve disallowed alternative stops. I’m also playing with some of the emoji and pictograph rules.
-
I implemented NFC myself because String.normalize fails some tests: NormalizationTest
-
I’ve moved the live demo to github hosting so I can iterate faster without publishing to npm: ENS Resolver Edit: fixed url
-
I think the core functions are pretty literal but it’s still a WIP: Tokenized IDNA • ContextJ+O • UTS-46 w/Bidi • UTS-51 Emoji Logic
-
The Bidi, Context, IDNA, NFC, and Emoji units are all independent.
I think the following outputs are useful to look at:
-
vs eth-ens-namehash (Prior results) About 500 more names than the prior, but my emoji list is very restrictive and adhoc at the moment.
-
These are the non-emoji Pictographs: ~~https://adraffy.github.io/ens-normalize.js/test/report-picto.html~~ Edit: this now includes all pictographs and emoji: https://adraffy.github.io/ens-normalize.js/test/report-emoji.html
-
Here is how I’ve currently codified my modifications to the spec: https://github.com/adraffy/ens-normalize.js/blob/main/build/ens-rules.js (I’m manually whitelisting emoji at the moment, rather than blacklisting.)