Hi Devs,
As part of our interop research at Unruggable, we’ve been closely monitoring proposals related to onchain identity. ENS plays a key role in enhancing UX across the interoperability roadmap. One of the most relevant proposals is EIP-7828, which introduces a chain-specific, human-readable address format powered by ENS. For example:
alice.eth@base // alice.eth on Base Network
vitalik.eth@1 // vitalik.eth on Ethereum (chainId 1)
bob.app.eth@optimism // bob.app.eth on Optimism
test.eth@base#abcd1234 // (with optional checksum)
How It Works
EIP-7828 builds on ENSIP-9 for multichain address resolution and uses ENSIP-11 to derive the appropriate coin type. In practice, this means we need:
- An ENS name, and
- A
coinType
unique to the target network
These are used in the ENS resolver function:
function addr(bytes32 node, uint coinType) public view returns (bytes memory);
Composition of a 7828 Address
An address like vitalik.eth@optimism
consists of two parts, separated by @
:
vitalik.eth
— the user’s ENS identityoptimism
— the target network
Resolving the Network
The EIP-7828 spec supports two mechanisms for resolving the target network:
1. Centralized Registry — Chainlist repo
This registry supports:
- Chain IDs: e.g.,
vitalik.eth@1
→ Ethereum (chainId 1) - Shortnames: e.g.,
bob.app.eth@optimism
→ Optimism
2. Decentralized Registries — ERC-7785 ENS Registries
ERC-7785 proposes a decentralized, onchain alternative to the above registry. It’s still under development, but EIP-7828 is designed to work with it once mature. The goal is to eventually replace the centralized registry with this trustless, permissionless source of chain metadata.
Finding the Coin Type
Once the network is resolved, we determine the coinType
using ENSIP-11. This coinType
is then used in the multi-coin resolution call as shown earlier.
ens-7828-resolver
We’ve developed an open-source library, @unruggable/ens-7828-resolver, that complies with EIP-7828 and currently supports the centralized registry method. It allows you to resolve EIP-7828 names like this:
const result = await resolve7828("vitalik.eth@ethereum");
console.log(result);
// {
// address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
// chainId: 1,
// chainName: 'Ethereum Mainnet',
// caip10: 'eip155:1:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
// coinType: 60
// }
The GitHub repository includes a deeper technical breakdown and the architecture of the resolver. You can run a script to resolve valid 7828 names and observe how the full resolution process works.
For more background, check out this full write-up on Medium: EIP-7828: Human-Readable, Chain-Specific Names with ENS.
Call for Contributions and Testing
The EIP-7828 spec is stable and ready for experimentation. We encourage developers, researchers, and infra teams to start integrating and testing this format in their applications and infrastructure as we move towards a decentralised registry.
The ens-7828-resolver
library is open source and available for use today. If you encounter issues, have feature requests, or would like to contribute improvements, feel free to open an issue or submit a pull request on GitHub.