diff --git a/ERCS/erc-7828.md b/ERCS/erc-7828.md new file mode 100644 index 00000000000..fbdabe39796 --- /dev/null +++ b/ERCS/erc-7828.md @@ -0,0 +1,241 @@ +--- +eip: 7828 +title: Readable Interoperable Addresses using ENS +description: An iteration of Interoperable Address' format that allows resolution to shorter, hierarchical strings using naming registries +author: Sam Kaufman (@SampkaML), Marco Stronati (@paracetamolo), Yuliya Alexiev (@yuliyaalexiev), Jeff Lau (@jefflau), Sam Wilson (@samwilsn), Vitalik Buterin (@vbuterin), Teddy (@0xteddybear), Joxes (@Joxess), Racu (@0xRacoon), Skeletor Spaceman (@0xskeletor-spaceman), TiTi (@0xtiti), Gori (@0xGorilla), Ardy (@0xArdy), Onizuka (@onizuka-wl), Lumi (@oxlumi), Moebius (@0xmoebius) +discussions-to: https://ethereum-magicians.org/t/erc-7828-chain-specific-addresses-using-ens/21930 +status: Draft +type: Standards Track +category: ERC +created: 2024-11-27 +requires: 155, 7930 +--- + +## Abstract + +This proposal extends [ERC-7930](./eip-7930.md) (Interoperable Addresses & Names) by standardizing a human-readable format for chain-specific addresses in the form `
@#`. It introduces: + +- A unified format for accounts that specifies, together with the address, the chain where the address lives. +- The use of human-readable chain names, with resolution to chain identifiers via ENS. +- The use of human-readable account names, with resolution to addresses via ENS. +- An on-chain registry mapping chain names to identifiers, enabling decentralized resolution of chain metadata. +- The ENS domain suffix used for chain names SHALL be abstracted from users for readability, ensuring a simpler display format. + +## Motivation + +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. + +The mapping from chain names to identifiers has, since [EIP-155](./eip-155.md), been maintained off chain using a centralized list. This solution has a few shortcomings: +- It does not scale with the growing number of L2s. +- The list maintainer is a trusted centralized entity. +- It does not (currently) support non-EVM chains, even when naming systems (such as ENS, since ENSIP-9) do. + +Instead of using non-human-readable numeric chain identifiers, this specification **SHALL** require a human-readable chain name resolved on-chain via ENS wildcard resolver. The centralized chain list maintained in `ethereum-lists/chains` **SHALL** be superseded by an on-chain registry. This registry provides a single source of truth for mapping chain names to chain identifiers and enables decentralized, extensible chain metadata resolution. + +In the same spirit, the address could be a human-readable name as well, which is already a use case for ENS. By coupling the TLD to the resolving method used, this standard could leverage current and future features of ENS as well as other naming registries. + +Moreover, the above can be leveraged to allow for a name to represent the same entity corresponding to different addresses on different chains, mitigating the risk of sending funds to an address the intended recipient doesn't actually control. + +Desired properties: +- Backwards compatibility with [ERC-7930] +- The chain portion can be an [ERC-7785](./eip-7785.md) domain name when that standard is productive. +- The address portion can be either the appropriate type of address for the chain, or a domain name. +- The address portion and the chain portion should be resolved separately. + +## Specification + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. + +### Format + +This standard defines a sub-syntax with extra semantics on top of the Interoperable Names syntax defined in [ERC-7930]. + +``` +: :=
"@" "#" +
: := | +: := | +: := [0-9A-F]{8} + +: := [-:_%a-zA-Z0-9]+ +: := [-:_a-zA-Z0-9]+ + := (