-
Notifications
You must be signed in to change notification settings - Fork 879
Update ERC-7828: Update resolution flow with high level specifications #1481
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update ERC-7828: Update resolution flow with high level specifications #1481
Conversation
|
✅ All reviewers have approved. |
0xrcinus
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! I left some comments
| Additionally, the target chain component of an _Interoperable Name_ may be expressed as a human-readable label. This specification defines how such labels can be resolved, via the Ethereum Name Service (ENS), to chain-specific metadata. | ||
|
|
||
| The result is _chain-specific addresses_ such as `wallet.ensdao.eth@eip155:1`, `0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7@eip155:1` or the maximally readable `example.eth@base`. | ||
| The result is _chain-specific addresses_ such as `wallet.ensdao.eth@eip155:1`, `0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7@eip155:1` or the maximally readable `wallet.ensdao.eth@ethereum`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we update the other examples below (which reference example.eth) to use wallet.ensdao.eth
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have done this. wallet.ensdao.eth DOES resolve to 0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7 on Ethereum mainnet (at least for now). The only confusion is with the bitcoin example - wallet.ensdao.eth doesn't actually resolve to anything on the Bitcoin network. I'm unsure if this is unclear/confusing. Thoughts?
ERCS/erc-7828.md
Outdated
| 5. Verify `fullName` ends with `.l2.eth`. | ||
| 6. Strip the suffix and apply UTS #46 lower-case normalisation. | ||
| • Use the remaining label (e.g. **“arbitrum”** instead of **“arbitrum.l2.eth”**). | ||
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it is because I am less familiar with the internals of ENS resolution, but I think it would be good for the example to include the actual function call to get the data record
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair enough. Added.
ERCS/erc-7828.md
Outdated
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. | ||
|
|
||
| To obtain the **chain identifier** corresponding to a human-readable chain name, clients SHALL: | ||
| The resolver for `on.eth` MUST implement ENSIP-5 - Text Records, and allow for the resolution of text records for the `reverse.on.eth` namespace of the form `chain-label:` followed by the [ERC-7930] _Interoperable Address_ you are trying to discern the label for. For example, the _Interoperable Address_ representing Ethereum Mainnet is `0x000100000101`. Resolution of the text record `chain-label:0x000100000101` for the `reverse.on.eth` namespace SHOULD return `ethereum`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As above, I think a slightly more detailed example would be helpful here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added
ERCS/erc-7828.md
Outdated
| 5. Verify `fullName` ends with `.l2.eth`. | ||
| 6. Strip the suffix and apply UTS #46 lower-case normalisation. | ||
| • Use the remaining label (e.g. **“arbitrum”** instead of **“arbitrum.l2.eth”**). | ||
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. | |
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ for the chain using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated
ERCS/erc-7828.md
Outdated
| 5. Query the Universal Resolver: `result = UniversalResolver.resolve(dnsEncode(full), callData)`. | ||
| 6. ABI-decode `result` as `(bytes chainBytes)`. | ||
| • If `chainBytes` is empty → no mapping exists; treat the label as unknown. | ||
| Additional implementation details about the registry-resolver contract implementation can be discerned by referencing the ENS documentation, and viewing the verified source code of the contract set as the resolver for `on.eth`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it is worth mentioning aliasing, i.e. that multiple labels may resolve to the same Interoperable Address (but an Interoperable Address will only resolve to one label)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point. I've added a sentence to each of the forward resolution and reverse resolution sections to mention this.
ERCS/erc-7828.md
Outdated
| If an ENS address is used within the `<address>` component, it MUST be resolved subject to the ENS resolution specifications, giving consideration to the target chain specified in the `<chain>` component. | ||
|
|
||
| ### Resolving address names | ||
| The specifications of note are ENSIP-9: Multichain address resolution, ENSIP-10: Wildcard resolution, and ENSIP-11: EVM compatible Chain Address Resolution. These specification outline how one resolves an ENS name to discern the address **for a specific chain**.Consideration MUST be given to both current and future ENSIPs pertaining to address resolution. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The specifications of note are ENSIP-9: Multichain address resolution, ENSIP-10: Wildcard resolution, and ENSIP-11: EVM compatible Chain Address Resolution. These specification outline how one resolves an ENS name to discern the address **for a specific chain**.Consideration MUST be given to both current and future ENSIPs pertaining to address resolution. | |
| The specifications of note are ENSIP-9: Multichain address resolution, ENSIP-10: Wildcard resolution, and ENSIP-11: EVM compatible Chain Address Resolution. These specification outline how one resolves an ENS name to discern the address **for a specific chain**. Consideration MUST be given to both current and future ENSIPs pertaining to address resolution. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
| ### Resolving the `<address>` component | ||
|
|
||
| While currently only `eip155` chains are supported, the on-chain registry could start listing other chains in order to make human-readable names for non-evm chains possible. | ||
| If an ENS address is used within the `<address>` component, it MUST be resolved subject to the ENS resolution specifications, giving consideration to the target chain specified in the `<chain>` component. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it worth being specific about how to identify whether it's an ENS address (i.e. is it assuming that anything with a . is?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. Added.
ERCS/erc-7828.md
Outdated
| 5. Query the Universal Resolver: `result = UniversalResolver.resolve(dnsEncode(full), callData)`. | ||
| 6. ABI-decode `result` as `(bytes chainBytes)`. | ||
| • If `chainBytes` is empty → no mapping exists; treat the label as unknown. | ||
| Additional implementation details about the registry-resolver contract implementation can be discerned by referencing the ENS documentation, and viewing the verified source code of the contract set as the resolver for `on.eth`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We also don't mention anything about the "chains taking ownership of their metadata" thing which is in the rationale.. I agree that this isn't necessary for the naming standard, but I think if it isn't covered we shouldn't mention it in the motivation - but it may be worth mentioning at least the expected mechanic?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added a section 'The Canonical Resolver` that addresses this.
0xMonoAx
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left a few comments, but I also wanted to share some broader feedback.
I appreciate the goal of keeping the ERC as simple as possible. That said, I think the Specification section could benefit from a bit more technical detail, and from avoiding governance or operational aspects, since those may evolve over time or sit outside the scope of the spec itself. I also think it’s important to keep the usage of Interoperable Addresses consistent and aligned with what’s defined in ERC-7930. Regarding, on Security Considerations: the current text mentions that ENSIP-1 and ENSIP-15 help to “avoid homoglyph or spoofing attacks.” However, ENSIP-15’s own security considerations note that normalization alone is not a complete solution, so it may be worth reflecting that nuance more clearly in the text.
| @@ -17,17 +17,17 @@ This proposal defines an _Interoperable Name_, a human-readable _chain-specific | |||
|
|
|||
| Additionally, the target chain component of an _Interoperable Name_ may be expressed as a human-readable label. This specification defines how such labels can be resolved, via the Ethereum Name Service (ENS), to chain-specific metadata. | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the abstract does not clearly convey what a developer will encounter. I believe it would be more beneficial for the ERC to be more direct, so I propose the following new abstract:
This proposal defines an Interoperable Name, a human-readable, chain-specific address format of the form
<address>@<chain>#<checksum>, where both the<address>and<chain>components MAY be expressed as human-readable names and resolved via ENS.
An on-chain registry enables decentralized resolution of chain labels to their canonical identifiers, while address resolution leverages the existing ENS infrastructure.
The result is chain-specific addresses such as:
•0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7@eip155:1#80B12379
•alice.eth@eip155:1#80B12379
• or the most human-readable version,alice.eth@base#80B12379
The checksum is optional, and this is explained in the Checksum section
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As suggested by @0xrcinus externally, this should probably be a separate PR if you want to come back to these sections.
|
|
||
| ## Motivation | ||
|
|
||
| The core motivation for introducing the _Interoperable Name_ standard is to provide maximally readable, _chain-specific addresses_ for user-facing interactions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this section is missing important context about the underlying problem: addresses alone are no longer sufficient when the same format is reused across hundreds of L2s. Adding the following paragraph would make the section more complete:
The current Ethereum address landscape is leading to an ecosystem that will have hundreds and eventually thousands of L2s that use the same address format as Ethereum mainnet. This means an address by itself is not enough information to know which chain the address is related to. This can be problematic if funds are sent to an unreachable address on the incorrect chain. From the user account it should be possible to obtain the right chain identifier (chainID) to include in a transaction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As suggested by @0xrcinus externally, this should probably be a separate PR if you want to come back to these sections.
ERCS/erc-7828.md
Outdated
| wallet.ensdao.eth@bitcoin#597D21A1 | ||
| ``` | ||
|
|
||
| ### The Canonical Resolver |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This paragraph mentions some governance/operational details (like the "5/7 multisig", "reputable industry participants", future transfers, etc.) that might not fit well in the Specification section since they could change over time. Per EIP-1, specs should focus on technical details that allow interoperable implementations. Maybe these details would work better in Rationale or Security Considerations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair. Fixed. Will add longer general comment.
ERCS/erc-7828.md
Outdated
|
|
||
| If the `<chain>` component of an _Interoperable Address_ does not contain a colon (`:`) it is interpreted as being label under the `on.eth` ENS namespace. | ||
|
|
||
| The resolver for `on.eth` MUST implement ENSIP-24 - Arbitrary Data Resolution, and allow for the resolution of the [ERC-7930] _Interoperable Address_ for the specified chain label using the key, `interoperable-address`. For example if you resolve the `interoperable-address` data record for `ethereum.on.eth` the _Interoperable Address_ `0x000100000101` SHOULD be returned. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel that we are misusing not only the term but also the implementation of the Interoperable Address.
ERC-7930 defines it as follows:
Interoperable Address : A binary payload which unambiguously identifies a target address on a target chain. e.g. 0x00010000010114d8da6bf26964af9d7eed9e03e53415d37aa96045
I think we should explain in more detail how to extract the component, not just in this section but also in the next one
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is one slightly unintuitive thing about Interoperable Addresses, in that they can refer to just a chain (as they do in this case) - that definition in 7930 is maybe misleading
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interestingly, I got the 'chain only' Interoperable Addresses wrong, and we all missed it :| Oops. Fixed. But yes, these take advantage of the flexibility of 7930 to represent a chain only.
| If an ENS address is used within the `<address>` component, it MUST be resolved subject to the ENS resolution specifications, giving consideration to the target chain specified in the `<chain>` component. | ||
|
|
||
| Forward resolution (Interoperable Address -> Interoperable Name): Supported via the multichain address resolution standard defined in [ERC-2304], which uses [BIP 44] registered coin type identifiers to resolve names for various chains, including the `eip155` namespace. | ||
| The specifications of note are ENSIP-9: Multichain address resolution, ENSIP-10: Wildcard resolution, and ENSIP-11: EVM compatible Chain Address Resolution. These specification outline how one resolves an ENS name to discern the address **for a specific chain**. Consideration MUST be given to both current and future ENSIPs pertaining to address resolution. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consideration MUST be given to both current and future ENSIPs pertaining to address resolution
This should be in the Security Considerations section
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I put it here because whilst it is a security consideration it is also necessarily part of the spec because if ENS changes how resolution works, and thats not noted here the logical conclusion would be that this spec is essentially hard-coding old resolution standards..
| - Sidechains may rely on centralized CCIP-read gateways or signature authorities. | ||
|
|
||
| Wallets MUST surface whether reverse resolution was trust-minimized or trusted. | ||
| - Implementers MUST give consideration to the name normalization specifications of the Ethereum Name Service so as to avoid homoglyph or spoofing attacks. These are outlined in ENSIP-1 and ENSIP-15. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should be clearer here: while ENSIP-15 provides normalization against the most common homoglyph attacks, it's not a complete solution. Applications displaying ENS names should implement additional protection layers (e.g., checksum verification).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thats referenced explicitly in the Checksum section which maintaining the previous state of affairs requires checksum verification if provided, and requires them when sharing. I don't agree that this is the right approach but to get to a base from where to have these conversations we were just keeping things as is for now.
|
|
||
| Wallets MUST surface whether reverse resolution was trust-minimized or trusted. | ||
| - Implementers MUST give consideration to the name normalization specifications of the Ethereum Name Service so as to avoid homoglyph or spoofing attacks. These are outlined in ENSIP-1 and ENSIP-15. | ||
| - Users should stay vigilant of address poisoning attacks when using a raw _target address_ in the `<address>` component. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would also clarify that they can use the checksum
|
So, I reflected on this over the weekend having spoken to Josh and Barnabe. I agree, governance should not be included in this spec. I have removed it. Noting that the on-chain registry-resolver is an incredible powerful standalone product I have opted to build out documentation for it on the ENS documentation site. Governance stuff can be housed there, and that is an appropriate living location if we ever choose to upgrade the implementation down the line. A pull request can be found here: ensdomains/docs#508 |
0xrcinus
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, these changes give an up-to-date foundation with regard to the reference implementation, open questions can be addressed in subsequent PRs
eip-review-bot
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All Reviewers Have Approved; Performing Automatic Merge...
This PR removes the bloated and inaccurate outline of full end-to-end resolution flow for the on-chain registry-resolver, replacing it with a high level overview of the way that Interoperable Name's are parsed and processed. We point to the appropriate ENS specifications where appropriate.
This PR is to get 7828 to a position of high level of completeness whilst discussions are ongoing relating to checksums and the breadth/focus of the standard.
Additionally fixed a few small grammar/parsing errors.