EIP-7828 ENS Resolver

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 identity
  • optimism — 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.

5 Likes