fix(providers): ens::namehash
with Unicode characters
#2510
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
ens::namehash
doesn't correctly compute nodes for ENS names that contain Unicode characters as documented in foundry#5386Currently, when
providers::resolve_name
is called on an ENS name like ret↩️rn.eth, it will produce a flawed node.ethers-rs
treats the nodes as sets of 32 decimal values that when converted into their hex equivalent, concatenated, and prepended with0x
, produce a node which is used to get the resolver contract for the ENS name.Nodes can be verified through the ENS Registry contract's
resolver
andowner
functions here.Solution
The reason for the discrepancy is that ret↩️rn.eth was not being stripped of its trailing
VARIATION SELECTOR 16
after the Unicode character. ENS ignores these but thenamehash
function did not account for them.The
namehash
function has been modified to strip any VS16's thus enabling it to successfully resolve ENS names with emojis.A test with the appropriate name has been added for verification.
PR Checklist